Întrebări frecvente la proiect 2/3

Ce înseamnă eroarea de PC-Loader "Error writing flash" ?
Este o eroare generică de comunicație serială în timpul programării. Dacă apare de mai multe ori, resetați calculatorul (sau pentru USB, scoateți/introduceți din nou adaptorul USB/serial pentru a reseta driverul).
Dacă tot se întîmplă, verificați seriala plăcii (de exemplu, tensiunea de alimentare e mai mică de 5V și funcționează la limită, sau folosiți o sursă cu brum puternic, care adaugă zgomot pe serială - vedeți cu osciloscopul semnalul emis/recepționat, dacă are nivele corecte și fără zgomot). Cele 10p pentru interpretarea caracterelor citite pe osciloscop sînt gîndite pentru a vă obișnui să folosiți osciloscopul în propria activitate de depanare și debugging, nu doar pentru notă.

Ce înseamnă eroarea de PC-Loader "Error Accessing COM Port" ?
Înseamnă că terminalul din CodeVision a rămas conectat și ține portul COM "ocupat"; apăsați butonul "Disconnect" din terminal înainte de a programa folosind PC-Loaderul.

În CVAVR, fereastra editorului îmi apare mică și fără posibilitate de resize
Ștergeți fișierele .ini din \ProgramData\HP InfoTech\CodeVisionAVR

Cuplînd adaptorul USB la portul USB din PC cu cele 3 fire (Rx,Tx,GND), se alimentează și plăcuța, chiar dacă nu am alimentarea pornită, deși J1 este pe 1-2 și nu am cele 2 fire dedicate pentru alimentarea din USB
Alimentarea se face parazit; aplicînd tensiune pe oricare pin de I/O cînd Vcc NU este prezent, această tensiune se închide la Vcc prin dioda de protecție internă dintre pin și Vcc, care protejează la aplicarea unei tensiuni > Vcc pe pin. Dar tensiunea va fi mai mică de 5V și funcționarea nu este garantată, de aceea, cît timp J1=1-2 trebuie să aveți alimentare externă! Pentru alimentarea din USB urmăriți explicit documentația.
Mai multe detalii despre alimentarea parazită și consecințele sale puteți studia aici

În afară de CVAVR, trebuie să instalez AVR Studio sau Atmel Studio?
Nu. AVR Studio ar putea fi necesar doar dacă vreți să folosiți, în cadrul CVAVR, programarea folosind un programator extern AVR-ISP (al cărui driver este instalat de către AVR Studio), sau un debugger extern. Pentru programarea folosind bootloaderul, nu este necesar. Atmel Studio este un mediu de programare complet independent de CVAVR.

Macheta mea nu mai face nimic, a mers și brusc nu mai merge
Încercați să încărcați din nou aplicația folosind PC-loaderul. Chiar dacă aplicația din Flash se poate șterge în anumite condiții, Bootloaderul nu se șterge niciodată (decît dacă folosiți un programator extern).

Macheta mea funcționează cînd e legată la portul serial al PC-ului și/sau cînd e conectat osciloscopul, altfel nu funcționează
Cel mai probabil ați uitat vreun pin de masă de pe machetă neconectat; cînd macheta e legată la un aparat extern, își închide circuitul de masă prin acel aparat.

Am în proiect taste sau senzori (de tip digital: 1 sau 0) care funcționează aleator
Cel mai probabil, nu ați activat rezistența de pull-up respectivă, iar în starea inactivă butonul/senzorul lasă pinul în stare nedeterminată; această stare poate fi citită ca 0 sau 1 în mod aleator. Singurul caz în care NU este necesară rezistența de pull-up este atunci cînd input-ul respectiv garantează un nivel logic pentru ambele stări (de exemplu, un senzor cu ieșire TTL sau CMOS; în schimb, un senzor cu ieșire Open Collector sau Open Drain nu garantează decît starea 0, pentru 1 trebuie pull-up).

Pot folosi funcția delay_ms() pentru intervale mai mari de 2s dacă am activat și watchdog-ul ?
Da, funcția delay_ms() resetează automat watchdog-ul în timpul funcționării.

Am niște funcții de tip printf("%3d") sau printf("%2.3f") care nu se execută corect
O particularitatea a CVAVR este că se pot exclude opțiunile printf și scanf de "width" și "precision" sau chiar suportul pentru "long" și "float" la compilare pentru a genera cod mai mic. Bifați aceste opțiuni în Project -> Configure -> C Compiler, dacă le folosiți.

La predarea proiectului, pot fi întrebat din codul generat automat de către Code Wizard?
Puteți fi întrebați din acele aspecte care se folosesc efectiv în proiectul dvs: direcția pinilor folosiți efectiv pt taste, LED-uri, senzori etc (registrul DDR), activarea rezistenței de pull-up (registrul PORT), unde este vorba pur și simplu de biții din port puși pe 1 sau 0 - pentru portul PA.2, este bitul 2 din registrele PORTA și DDRA.
Dacă folosiți timere sau ADC, trebuie să știți măcar ce registre sînt folosite, chiar dacă nu se cer exact biții (de exemplu să știți că tensiunea de referință și numărul canalului se setează în registrul ADMUX).

De ce nu folosim Arduino la acest proiect?
De ce să cumpărati un Arduino cînd puteti să vă construiti... propriul Arduino?
La acest proiect vă construiți de la 0 propria placă, echivalentă cu Arduino, pentru a înțelege că un sistem cu uC nu este o "cutie neagră". Un Arduino comercial conține aceleasi componente ca si placa voastră: un procesor AVR, componentele adiționale gen cuarț, alimentare etc, și vine cu altă variantă de compilator și bootloader. Ele sînt compatibile - puteți încărca un .HEX de pe placa voastră pe Arduino, dacă folosiți pinii de port corespunzători și selectați tipul de procesor și cuarțul în setările CVAVR.
Arduino este gîndit pentru cei care nu știu/nu vor să-și lipească propria placă, și vine cu tot felul de "shield"-uri, adică plăci adiționale cu driver de motor, senzor de umiditate, etc, pentru a face un proiect complet fără a lipi nimic. Pe de altă parte, la ETTI învățați să faceți și partea hardware, nu doar soft-ul pentru un hard făcut de alții. Pe placa voastră puteți lipi și configura orice fel de senzor, afișaj, periferic, modul de comunicație etc, fără să trebuiască să cumpărați "shield"-uri, ci direct piesa respectivă. Am ales explicit un uC AVR cu mai mulți pini decît cel de pe Arduino Uno, pentru a putea conecta cît mai multe periferice.

Pinii PC2:PC5 se comportă aleator cînd sînt citiți/scriși de program
Majoritatea procesoarelor pre-programate care s-au dat în 2017 au fuse bit-ul JTAGEN programat; aceasta înseamnă că interfața JTAG este activă și ocupă pinii PC2, PC3, PC4, PC5 (TCK, TMS, TDO, TDI). Interfața JTAG este utilă pentru testare și debugging în timp real, folosind un debugger extern conectat la acești pini.
În consecință, un program utilizator care încearcă să folosească acești pini ca input/output va duce la un comportament aparent aleator pe pini (ca și cînd pinii ar fi fizic defecți). Compilatorul nu va da nici o eroare sau warning căci el nu "știe" că pinii nu mai sînt disponibili.
Simultan cu programarea fuse-ului JTAGEN, bitul 7 (JTD) din MCUCSR trebuie să fie 0 (valoarea implicită) pentru ca JTAG-ul să fie activ.
Soluții: