Tocmai am terminat un proiect, este vorba despre unitatea de expunere UV bazată pe Arduino. Acesta funcţionează perfect pe plăcuţa mea de dezvoltare împreună cu un breadboard 800, dar vreau să merg mai departe şi să pun totul pe un cablaj electric. Motivul este dorinţa de a elibera plăcuţa de dezvoltare Arduino. Având câteva microcontrolere ATMEGA8 în plus m-am gândit că ar fi perfecte pentru ceea ce doresc eu să fac. Aş fi putut folosi şi un microcontroler ATMEGA328 dar având deja ATMEGA8 disponibil nu am vrut să cumpăr alte microcontrolere. Există şi posibilitatea de a transfera o schiţă Arduino pe un Atiny. Dacă doreşti acest lucru îţi recomand acest video tutorial https://plus.google.com/u/0/110934688248807770572/posts/DYFHUhy4V9R.
Mai departe am să detaliez paşii pe care i-am făcut să transfer proiectul meu pe un ATMEGA8.

Ce este acela un BOOTLOADER?
Bootloader-ul este un mic program care se află, în cazul plăcuţelor Arduino, în ultimii 2KB de memorie ai microcontrolerului (această valoare este setată automat de mediul de dezvoltare Arduino în momentul încărcării bootloaderului). Acest program are rolul de scanare a ‘evenimentelor speciale’, care pot semnaliza microcontrolerului să intre în modul ‘bootloading’. Dacă aceste ‘evenimente’ sunt găsite, microcontrolerul va prelua datele de la programator şi le va scrie în restul memoriei disponibile. În cazul în care nu se detectează nici un eveniment bootloader-ul va ceda controlul către programul existent în memorie.

Scrierea bootloader-ului pe un ATMEGA8

1.Necesar:
-placă de dezvoltare Arduino Uno
-breadboard
-chip ATMEGA8
-cristal cuarţ 16MHz
-2 condensatoare 22pF
-fire pentru conexiuni

2.Schema electrică:

bootloaderA8
3.Programarea efectivă:
Pentru a programa bootloader-ul trebuie mai întâi să pregătim placa de dezvoltare Arduino UNO. În acest sens va trebui să încărcăm schiţa ArduinoISP care se găseşte în dosarul cu exemple.

arduinoISP
După ce schiţa a fost încărcată, se leagă montajul descris mai sus la placa de dezvoltare. Pasul imediat următor este selectarea plăcii de dezvoltare ‘Arduino NG or older w/Atmega8’ din meniul ‘Plăcă de dezvoltare’.

A8_board
Urmează selectarea tipului de programator din meniul ‘Programator ->Arduino as ISP’

A8_program
Acum totul este pregătit. Bootloader-ul poate fi încărcat prin selectarea comenzii ‘Încarcă bootloader’.

Transferul schiței pe microcontrolerul ATMEGA8
Această parte este foarte simplă. Se scoate microcontrolerul ATMEGA328 de pe placa Arduino Uno şi se înlocuieşte cu ATMEGA8. Cu placa de dezvoltare ‘Arduino NG or older w/Atmega8’ selectată se poate încărca exemplu Blink.ino. După încărcarea acestuia, la un interval de aprox. 8s (necesare bootloader-ului), o să se observe clipirea ledului de pe pinul 13.
Atenţie la:
-pinii microcontrolerului (sa nu îi îndoi în momentul în care extragi microcontrolerul)
-dispunerea pinilor în raport cu socul (inversarea integratului îl poate distruge definitiv)
-depozitează microcontrolerul original într-un loc bine definit astfel încât să eviţi pierderea acestuia

La subiect şi nu prea
Prima oară când am încercat să scriu softul de la unitatea de expunere UV pe microcontrolerul ATMEGA8 m-am trezit pus în situaţia de a nu avea suficient spaţiu pentru program. Eroarea întâlnită a fost aceasta:

eroare_A8
În momentul respectiv a început o campanie nebună de optimizare a programului. Am să punctez principalele modificări pe care le-am făcut să ajung de la 8200 de bytes la 6780 bytes.
-am eliminat iniţializarea pentru portul serial deoarece nu îl foloseam (Serial.begin(9600)-7746 bytes)
-am modificat toate variabilele int în byte (7556 bytes)
-am eliminat surplusul de variabile string (7404 bytes)
-am eliminat funcţia lcd_print (6780 bytes)

Spor la treabă!

Instalarea unui bootloader
Etichetat pe:            

16 gânduri despre „Instalarea unui bootloader

  • 05/01/2014 la 10:04
    Legătură permanentă

    Salut!
    Nu pot s ascriu un comentariu la articolul http://www.roroid.ro/wiki/pmwiki.php/Main/ArduinoBootloaderSiTransferareaProiectelor
    Acesta ar fi: Ce dimensiune are HEX-ul generat din fisierul de 6780Bytes? (Se gaseste intr-un director din c:\Documents and Settings\profilul_userului\Local Settings\Temp si are denumirea ca numeproiect.cpp.hex Daca ati putea pe adresa mea de e-mail sa imi trimiteti si un printscreen cu afisarea Properties a fisierului v-as ramane recunoscator.
    Multumesc.

    Răspunde
  • 05/01/2014 la 10:05
    Legătură permanentă

    Buna ziua,

    Nu…hex-ul final este mult mai mare, aprox 20kB. In tutorial ma refer
    la dimensiunea binara a „schitei” care nu poate sa depaseasca 7168
    bytes pentru ATMEGA8.

    Am sa verific de ce nu se pot posta comentarii iar ulterior am sa
    postez mailul dumneavoastra

    Răspunde
  • 05/01/2014 la 10:08
    Legătură permanentă

    Va multumesc pentru promptitudine si pentru faptul ca mi-ati raspuns.

    Am un sketch tot de aproximativ 6500 bytes iar hexul il face de ~15,5 Kb si ma gandeam ca nu am cum sa il pun in ATmega8, mai ales ca o parte din memoria flash (8Kb) este ocupata de bootloader.

    Cu blog-ul se intampla ceva, nu am reusit sa dau comment de ep 2 browsere diferite si de pe 2 statii diferite.

    Inca o data, va multumesc!

    Răspunde
  • 05/01/2014 la 10:08
    Legătură permanentă

    Nu ar trebui sa aveti probleme. La mine a mers. Singurul dezavantaj e faptul ca porneste cam greu.

    Referitor la blog, diferenta o facea un „/”. 🙂

    Răspunde
  • 05/01/2014 la 10:09
    Legătură permanentă

    Mai exista un bootloader care l-am gasit la adresa
    http://todbot.com/blog/2009/05/26/minimal-arduino-with-atmega8/

    Este mult mai mic decat cel care il are softul arduino cand selectati plaa atmega8, de aici si avantajul de a putea incarca un hex mai mare si ar trebui sa booteze mai repede. Nu am testat pentru ca nu mi-a funcionat programatorul…
    Dezavantajul ar fi folosirea oscilatorului intern de 8 MHz.

    O zi buna!

    Răspunde
  • 05/01/2014 la 10:11
    Legătură permanentă

    O mica „erata”, bootloader-ul nu se afla in primii 2k de memorie ai microcontrolerului, ci la sfarsitul memoriei, dimensiunea depinzand de fuse-urile setate.

    Răspunde
  • 05/01/2014 la 10:12
    Legătură permanentă

    daca doresc sa folosesc oscilatorul intern al ATMEGA8 pot urma pasii descrisi de dvs. pentru incarcarea bootloaderului si programelor ulterioare sau ar trebui sa fac alte setari. pentru reducerea costurilor as dori sa pun doar un atmega8 cu pinul de reset conectat la VCC fara alte piese decat senzorii pe care va trebui sa-i gestioneze

    Răspunde
  • 20/01/2014 la 00:10
    Legătură permanentă

    Salutare! Am si eu o problema…
    Am un Arduino Uno si vreau sa controlez cu el un motor BLDC. Am facut greseala sa invart motorul in timp ce era conectat pe direct la Arduino. Stiu, prostie mai mare, greu de gasit…
    Mai departe, cred ca stiti deja ce s-a intamplat…boom! Nu mai functioneaza nimic. Am incercat sa uploadez exemplul pentru led blink, dar in interfata Arduino primesc eroarea: avrdude stk500_getsync() not in sync resp=0x00
    Am luat alta placuta de Arduino Uno, am pus microcontrolerul pe ea, nimic. Am pus microcontrolerul de pe placuta buna pe a mea, la fel, nimic.
    Apoi am luat multimetrul si am facut niste masuratori…cam toti pinii de pe atmega16u2 arata aproape 5V…e ceva putred acolo. Dar totusi de ce nu merge 328-ul cand il pun pe alta placuta?
    Un pic de ajutor? S-a mai confruntat cineva cu asa ceva? Mai pot scoate ceva din placa asta? Daca as cumpara cele doua integrate, cum as putea sa programez (daca se poate si e usor) 16u2-ul? Incarcarea bootloaderului pe 328 din cate stiu nu e mare filozofie…

    Răspunde
  • 24/08/2014 la 19:42
    Legătură permanentă

    As dori si eu, daca se poate sa-mi scrieti softul pentru ATMega 8 la statia de lipit termostatata cu led YO6PIR, de pe forum. Daca se poate, m-ar interesa pretul pe bucata, pe mine interesandu-ma 4 bucati scrise.
    Schema statiei se gaseste pe net.
    Cu mii de multumiri!

    Răspunde
  • 14/08/2015 la 16:21
    Legătură permanentă

    In locul quartzului de 16Mhz si a conzilor de 22pF, pot folosi un rezonator ceramic de 16Mhz ?
    Nu prea gasesc mai sus de 8Mhz.

    Răspunde

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.