Întrebări frecvente la proiect 2

Întrebări comune pentru toate machetele

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).

La predarea proiectului, pot fi întrebat din codul generat automat de către Wizard / Cube?
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, activarea rezistenței de pull-up,
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 unde se setează tensiunea de referință și numărul canalului.

De ce nu folosim Arduino sau altă placă de test comercială la acest proiect?
De ce să cumpărati un Arduino cînd puteti să vă construiti... propriul Arduino?
Ați făcut proiectul de PIA în anul 1 pe o placă comercială. În anul 3 se cere și o parte hardware. Trebuie să fiți capabili să asamblați de la zero și mai ales să DEPANAȚI orice problemă apărută la placa voastră. Vizualizarea diferitelor semnale cu osciloscopul servește tocmai acestui scop (nu este doar pt. a primi puncte). În cazul plăcilor ESP32 de la PIA, dacă placa nu mai funcționa, studenții o înapoiau și primeau alta, similar situației unui user care își duce telefonul sau mașina la service. La proiectul 2, nu veți primi altă placă, ci veți fi îndrumați să vă reparați propria placă (inclusiv procesorul se poate dezlipi și relipi).
Placa Arduino a fost EXPLICIT gîndită și se vinde pt. a fi accesibilă copiilor de școală care nu au cunoștințe de electronică. Bibliotecile Arduino ascund cele mai multe detalii ale funcțiilor care accesează nivelul fizic. Această abordare este OK pt copii de școală, dar pentru diploma de inginer trebuie să știți mai mult de atît.

Întrebări pentru machetele cu procesor AVR

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).

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.

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: