Scriu acest post pentru că e util să înveți din nopțile pierdute ale altora, ca să ai timp să-ți pierzi nopțile pe altceva, mai interesant :).
Am ajuns târziu ieri la școală, pentru că am fost să dau jos blana, și m-am hotărât să nu plec până nu fac modulul de condus motorul să meargă (o să scriu mai pe larg despre el, în mai multe posturi despre a mea viitoare licență). Evident, treaba părea simplă și a devenit tot mai groasă pe măsură ce treceau orele.
Am scăpat de câteva conexiuni greșite, mi-am dat seama ca am pus diodele de protecție de peste bobinele de la relee pe dos, totul părea ok până într-un punct. Pun un ATMega32 nou nouț în soclu, setez direct AVR Eclipseu la 1MHz ca sa nu mai resetez fuse-uri, programez, super tare, merge. Pun multimetru pe picioarele ATMega, care ar fi trebuit să tragă tot portul C pe ieșire, pe 0. Jumate din pini erau la 0. Restu, la Vcc. WTF?
Îmi dau seama un pic mai târziu că PC0 și PC1 sunt legați la conectorul meu pentru I2C, și sunte legați la Vcc cu niște pull-up-uri ca să meargă cu brick-urile NXT. Bun. Dar restul? Mai erau cel puțini 3 pini care erau strâmbi. Din care unu exact ăla pe care mi-am legat eu ieșirile pentru comanda la motor. Am mai pierdut vreo oră, două întrebându-l pe prof, căutând scurt-uri pe placă …
Am scos porțile logice, am zis ca poate fac alea ceva. Niet, no luck. Am schimbat controller-ul cu cel de la mașinuța pentru Eurobot, aceeași poveste. Într-un final, pe la 6:45 AM, deja mă ridicasem de pe scaun să merg la șaorma, mă gândesc să mă uit eu pe datasheet la ATMega să vad dacă n-au ei ceva șmecherie cu Portu C. Urmeaza partea cu informație utilă din acest post:
Se pare că ATMega32 (și presupun că și alte ATMega-uri) au anumite PORT-uri din portul C care nu pot fi utilizate pentru I/O în momentul în care este activat JTAG-ul pe controller. Este vorba despre pinii PC5, PC4, PC3 și PC2. Soluția, evident, este să se dezactiveze JTAG-ul. Asta se poate face prin de-programarea siguranței (fuse) JTAGEN de pe ATMega. Eu am folosit AVRDude (pentru Linux), pe Windows foloseam PonyProg. Pentru AVRDude, ca să nu cauți referințe grămadă prin datasheet, există site-ul asta, care îți formează automat comanda pentru avrdude.