środa, 11 lutego 2015

Zrób sobie Arduino - część 1

Stosunkowo prosto można zrobić sobie swoją własną płytkę Arduino. Nie napisałem o tym we wstępie, a wydaje mi się że warto.

Opis zaktualizowany do Arduino IDE 1.8.5

PO CO ?

Ponieważ:
  1. Jest taniej. Największy koszt to programator, choć jego możemy przecież używać wielokrotnie.
  2. Nasze "Arduino" możemy umieścić wraz z pozostałymi komponentami na zaprojektowanej płytce drukowanej w gotowym projekcie.
  3. Możliwość użycia środowiska programowania Arduino - co znakomicie ułatwia szybki start i ukończenie projektu.
  4. Satysfakcja z pracy!

KOMPONENTY

Czyli co tak naprawdę potrzebujemy:
  1. Zestaw podstawowy: czyli płytka stykowa + zasilanie + przewody,
  2. Kontroler ATmega328, można także kupić taki z preinstalowanym bootloader'em - wtedy następny punkt jest zbędny.
  3. Programator USBASP lub po prostu samo Arduino które posłuży jako programator dla bootloadera.
  4. Kilka drobnych elementów: microswitch, rezystor 100K, 330, 3 kondensatory 100 nF, dioda np. 1N4004.
Tak więc nie licząc programatora nasze "Arduino" to naprawdę groszowa sprawa.

SCHEMAT

Poniżej schemat projektu wykonany w programie Eagle:
Minimalne "Arduino"
Schemat można pobrać tutaj (strzałka w dół widoczna po kliknięciu w link pozwala pobrać plik).
Uwaga! Powyższy schemat zakłada że używamy wewnętrzego generatora RC oraz NIE będziemy używać w projektach przetwornika analogowo-cyfrowego!

Wydzielony układ po lewej stronie schematu odpowiada za poprawną obsługę przycisku reset i zapobiega powstawaniu tzw. szpilek napięcia.
Układ ten został zapożyczony z tej strony gdzie jest to dokładnie wytłumaczone.

Jeśli nie zamierzamy implementować przycisku reset można ominąć ten podukład, ale należy zostawić kondensator 100 nF idący od nóżki RESET do masy oraz rezystor podciągający do +5V!

Na płytce warto umieścić także gniazdo do programowania IDC (Kanda). Tu jest 10-pinowe, choć są też dostępne 6-pin. Znakomicie ułatwia programowanie. Do gniazda przyda się także odpowiedni kabelek.

Dobrze jest także podłączyć diodę LED szeregowo z rezystorem (300 Ohm) pod pin 13 Arduino (czyli port PB5/SCK ATmegi) i dalej do masy , nie jest to pokazane na powyższym schemacie.

BOARDS

Wprowadzamy zmiany w pliku :
Do pliku hardware/arduino/boards.txt dopisujemy poniższą treść (wytnij i wklej):
##############################################################

atmega328bb.name=ATmega328 on a breadboard (8 MHz internal clock)

atmega328bb.upload.protocol=arduino
atmega328bb.upload.maximum_size=30720
atmega328bb.upload.maximum_data_size=2048
atmega328bb.upload.speed=57600

atmega328bb.bootloader.low_fuses=0xE2
atmega328bb.bootloader.high_fuses=0xDA
atmega328bb.bootloader.extended_fuses=0x05

atmega328bb.bootloader.file=atmega/ATmegaBOOT_168_atmega328_pro_8MHz.hex
atmega328bb.bootloader.unlock_bits=0x3F
atmega328bb.bootloader.lock_bits=0x0F

atmega328bb.build.mcu=atmega328p
atmega328bb.build.f_cpu=8000000L
atmega328bb.build.core=arduino:arduino
atmega328bb.build.variant=arduino:standard

atmega328bb.bootloader.tool=arduino:avrdude
atmega328bb.upload.tool=arduino:avrdude

Powyższe wpisy pozwolą programować mikrokontrolery ATmega328 dla częstotliwości 8MHz (wewnętrzny oscylator).

Zobacz także projekt MiniCore (patrz wpis MINIMALNE PODŁĄCZENIE A PROBLEMY Z AVRDUDE)

BOOTLOADER

Teraz należy podłączyć nasze "Arduino" do komputera poprzez programator i załadować bootloader. Po co nam bootloader ? By była możliwość ładowania programów za pomocą portu UART z pomocą środowiska Arduino IDE, o czym mam nadzieję napisać w kolejnej części.

Jeśli nie zamierzasz korzystać z tej metody i będziesz ładował programy za pomocą programatora jak USBASP to spokojnie tą część możesz pominąć i przejść od razu do PINOUT.

U W A G A : W takim przypadku (gdy programujemy bez bootloader'a, a jedynie za pomocą programatora) to program ładujemy za pomocą kombinacji klawiszy CTRL-SHIFT-U, a nie przyciskiem Wgraj/Upload (lub samej kombinacji CTRL-U).

Jeśli nie posiadasz programatora USBAsp, natomiast posiadasz już Arduino możesz wykorzystać je jako programator - patrz tutorial na tej stronie.

Jeśli posiadasz podpięty programator USBAsp możesz przystąpić do dzieła:
  • Po pierwsze z menu Narzędzia - Programator naszego Arduino IDE musimy wybrać programator, czyli USBasp.
  • Następnie z menu Narzędzia - Płytka wybieramy nasz mikrokontroler - w tym przypadku ATmega328 on a breadboard (8 MHz internal clock)
  • Ostatecznie klikamy na Wypal Bootloader z menu Narzędzia. To może chwilę potrwać. Dioda LED powinna zacząć migać. Bootloader wgrywamy tylko raz.
Jeśli zamierzasz programować z pomocą bootloadera warto zastosować rezystory 100K podciągające RX i TX do VCC (nie umieszczone na schemacie powyżej).

PINOUT

Warto teraz wiedzieć które piny mikrokontrolera odpowiadają pinom Arduino:
Powyższy obrazek pochodzi ze strony Arduino i dotyczy Atmegi168, w przypadku Atmegi328p rozkład pinów jest identyczny.

TEST

Warto teraz przetestować działanie wybierając z menu: Plik - Przykłady - 01 Basics - Blink:
void setup() {
  pinMode(LED_BUILTIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_BUILTIN, HIGH);  
  delay(1000); 
  digitalWrite(LED_BUILTIN, LOW); 
  delay(1000);                     
}

  • Jeśli posiadamy zainstalowany bootloader instalujemy powyższy szkic za pomocą przycisku ze strzałką w prawo ("Wgraj") lub po prostu wciskamy CTR-U.
  • Jeśli nie posiadamy bootloader'a wgrywamy szkic kombinacją CTRL-SHIFT-U (za pomocą programatora).

Dioda LED podpięta pod pin PB5 Atmegi będzie zapalać się i gasnąć dokładnie na 1 sekundę (1000 milisekund).

Zadanie wykonane!

Gotowy projekt na płytce stykowej z podpiętym programatorem

Brak komentarzy:

Prześlij komentarz