Že nekaj časa se ukvarjam z arduinoti, mikrokrmilniki na sploh. Informacije so raztresene po internetu in popijeje kar dosti živcev, da jih najdeš. Rad bi se tudi zahvalil @PPG78 za pomoč in spodbudo k objavi te teme. Upam da vam bo ta tema koristila, lahko tudi napišete svoje izkušnje…, da bodo vse informacije na enem mestu.
Z arduinotom smo se srečali praktično vsi elektroniki začetniki, profesionalci… tako da ga že poznate.
Arduino mikrokrmilniki so narejeni iz Atmel-ovih čipov. Arduino uno, nano, micro… uporabljajo ATmega328p mikrokrmilnik. Na njem je naložen bootloader, ki skrbi da lahko naložimo svoj program preko UART pinov (TXD, RXD). Arduino se poveže na računalnik preko usb kabla, ki uporablja drug protokol. Kaj sedaj?
Originalni arduinoti uporabljajo ATmega8 za komunikacijo med USB in UART. Kloni pa uporabljajo znani FT232R čip.
Kaj pa ko imamo projekt, kjer nam je škoda cele arduino plošče ampak hočemo programirati v ArduinoIDE?
V tem primiru kupimo ATmega328 in mu dodamo 16MHz kvarc in 2 22pF kondenzatorja. Ampak to žal ni vse. Če hočemo uporabljati arduinoIDE moramo naložiti bootloader. Celotnega postopka ne bom razlagal bom pa pripel link: https://youtu.be/B5HT5IKcprE?si=A1ieVjN4nfkAYFrU
Potrebujemo pa še en arduino ali pa ISP programator.
Za programiranje pa je tako: lahko uporabite drug arduino in povežete pin 1,2 na arduinotu z RX in TX čipa. Potem napišete kodo in jo naložite na arduino. Lahko pa uporabite namenski programator (USB to UART converter). Lahko ga kupite ali pa izdelate sami. V prilogo bom naložil načrt.
Obstaja arduino knjižica Mighty, kjer so bootloaderji tudi za druge atmelove mikrokrmilnike. Podrobnosti so na youtubu in git-hubu.
Lahko pa se zgodi da imamo kodo v .hex obliki ali pa da moramo dobiti še tista 2kb prostora, ki ju zasede bootloader. Kaj potem?
To pa je bolj kompliciran postopek.
Prvo bom razložil teorijo, potem pa samo nalaganje kode.
Če hočemo naložiti kodo brez bootloaderja mora biti v .hex formatu. V arduinoIDE lahko to dosežemo tako, da kodo izvozimo (export). Za nalaganje kode je več programov npr: avrdude, atmel studio 7… jaz uporabljam avrdude.
Avrdude je zahteven za začetnike, saj nima grafičnega umestinka. Za to pa so naredili dodatek avrdudess. Ta program ponuja grafični umestnik.
Avrdudess: https://github.com/ZakKemble/AVRDUDESS
V primiru da uporabljamo ORIGINAL ARDUINO! kot programator izberemo “arduino”. Če pa imamo KLON! pa “arduino: FT232R connected to ISP”. Če imamo drug programator izberemo tega. Potem izberemo datoteke, in kaj naj z njimj naredi. Spodaj ima še nekaj funkciji, ki jih ne bom posabaj razlagal. Desno zgoraj izberemo kateri mikrokrmilnik želimo sprogramirati. Potem pa pridemo do “fuse & lock bits”. Tu se bo malo zakompliciralo, vendar brez skrbi:
Razložil bom L fuse bajt na ATmega328 in 16. TI SE RAZLIKUJEJO PRI TIPIH MIKROKRMILNIKOV, ZATO PREVERITE DATASHEET. Atmel ima Lfuse ponavadi v 8. Poglavju. Zapisujejo se v hex obliki (0x11…).
Ta 2 čipa imata vgrajen 8MHz kalibriran oscilator.
ZA INFORMACIJO: arduino z (ATmega328) ima Lfuse 0xff (11111111).
Lfuse vsebuje podatke o uri mikrokrmilnika.
0 POMENI DA JE VAROVALKA PROGRAMIRANA, 1 POMENI DA NI PROGRAMIRANA!!!
Lfuse:
1. Bit: CKDIV8: deli frekvenco z 8
2. Bit: CKOUT: signale iz ure pošlje na določen pin
3. Bit: SUT1
4. Bit: SUT2: nastavljo koliko časa po ponovni pridobitvi napajanja ali po spustitvi tipke RESET začne izvajati kodo. Informacije o času so v datasheetu.
5-8. Bit: izbira ure/oscilatorja
ATmega328:
5-8. Bit:
1111/1000 zunanji kristalni oscilator nizke moči
0111/0110 “full swing cristsl oscilator”
0101/0100 zunanji 128kHz RC oscilator
0010 kalibriran(8MHz) integriran oscilator
0000 zunanja ura
Novi pridejo z: 0_10 0010 (0x_2). _ je zato, ker v datasheetu nisem zasledil 2. Bita.
ATmega16:
5-8 bit:
1111/1010 zunanji kristalni oscilator/keramični oscilator nizke moči
1001 zunanji nizkofrekvenčni kristalni oscilator
1000/0101 zunanji RC oscilator
0100/0001 integriran kalibriran RC 8MHz oscilator
0000 zunanja ura.
Novi pridejo z: 0_100001 (0x_1). _ je zato, ker v datasheetu nisem zasledil 2. Bita.
Kasneje bom dodal še razlago hfuse.
Pa smo prebrodili čez težji del. Sedaj pa sledijo programatorji:
Imamo več programatorjev vendar vsi delujejo na isti način. Podatke iz USB porta prevedejo v ISP(in system programing) protokol. Lahk kupimo programator iz kitajske za par €. Imamo pa tudi programator, ki ga je razvil S56FPW. Vezja pa so se prodajala v tej temi: https://www.s5tech.net/viewtopic.php?f=25&t=25612&p=309955&hilit=Isp#p309955
Ta prgramator ima FT232R, ki skrbi za USB-UART komunikacijo in ATmega8 ki je mikrokrmilnik.
Ker sem imel doma drug material pa sem se odločil za razvoj svojega programatrja:
Kot prejšni bo uporabljal FT232R za komunikacijo, samo da bo namesto ATmega8 uporabljal ATmega328. Ubistvu bo to oskubljen arduino. Ker USB-UART pretvornik že imam bom naredil vezje samo z ATmega328, bom pa dodal oba načrta.
Ta programator pa je potrebno še pripraviti na delovanje:
Najprej naložimo bootloader.
Nato ga priključimo prek usb kabla na računalnik, kjer odpremo arduinoIDE. Gremo pod file(datoteka) in izberemo sketches(primiri) in ga naložimo na arduino.
Potem izberemo tools(orodja) in kliknemo “programer”. Izberemo Arduino as Isp. S tem smo pripravili programator.
3. Programator pa je arduino vendar lahko pride do kakšnih težav. Ampak naj vas ne bo strah.
O arduinotu nimam kaj dosti za povedati. Postopek je isti kot pri mojem programatorju, samo da se začne pri 2. Koraki saj je bootloader že naložen. Lahko se uporablja konektor 2x3 na robu plošče ali pa pin 13, 12, 11.
V primiru da večkrat uporabljate mikrokrmilnike priporočam programator, da 1x na leto nekaj sprogramirate pa je tudi arduino vredu.
Temo sem objavil danes, ker sem ravno dobil idejo kaj vse moram zajet. V nasprotenem primiru bi polovico pozabil . V soboto ko pridem do računalnika pa bom naložil vse priponke.
To je bila samo teorija, ko bom stvari preizkusil bom napisal nov prispevek in popravil morebitne napake.
To je zelo kompleksen post, z veliko informacijami zato me prosim obvestite če sem kaj zgrešil/se zmotil.