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:
MCUCSR |= 0b10000000
MCUCSR |= 0b10000000
(se scrie valoarea de 2 ori într-un interval de 4 impulsuri de ceas, de aceea instrucțiunea e de 2 ori - vezi datasheet secțiunea 24.8.1 "MCUCSR – MCU Control and Status Register")
avrdude -p m16 -c usbasp -U lfuse:w:0xbf:m -U hfuse:w:0xda:m