This shows you the differences between two versions of the page.
|
pm:prj2021:apredescu:pov-display [2021/06/01 18:23] andrei.carapcea |
pm:prj2021:apredescu:pov-display [2021/06/02 22:50] (current) andrei.carapcea [Timer1 si modul de functionare] |
||
|---|---|---|---|
| Line 116: | Line 116: | ||
| Astfel, se poate scrie orice caracter pe display-ul POV. | Astfel, se poate scrie orice caracter pe display-ul POV. | ||
| - | === Modul de conectare === | + | ==== Modul de conectare ==== |
| Pinout Arduino Nano: | Pinout Arduino Nano: | ||
| - | {{:pm:prj2021:apredescu:nano-pinout.jpg?700|}} | + | {{:pm:prj2021:apredescu:800px-arduino-nano-pinout.png?700|}} |
| + | |||
| + | [[https://commons.wikimedia.org/wiki/File:Arduino-nano-pinout.png | Sursa Arduino Nano pinout]] | ||
| Am ales sa conectez LED-urile astfel incat sa ocupe fix portul PD (PD0-PD7 sau D2-D7 + D1, D0, adica RX0 si TX1). Astfel, pentru a modifica starea LED-urilor, se scrie direct valoarea retinuta in memorie in PORTD. | Am ales sa conectez LED-urile astfel incat sa ocupe fix portul PD (PD0-PD7 sau D2-D7 + D1, D0, adica RX0 si TX1). Astfel, pentru a modifica starea LED-urilor, se scrie direct valoarea retinuta in memorie in PORTD. | ||
| Line 141: | Line 143: | ||
| // input capture interrupt enable | // input capture interrupt enable | ||
| - | TIMSK1 = (1 << ICIE1) | + | TIMSK1 = (1 << ICIE1); |
| // enable output compare A match interrupt | // enable output compare A match interrupt | ||
| - | TIMSK1 |= (1 << OCIE1A) | + | TIMSK1 |= (1 << OCIE1A); |
| // timer overflow interrupt enable | // timer overflow interrupt enable | ||
| TIMSK1 |= (1 << TOIE1); | TIMSK1 |= (1 << TOIE1); | ||
| Line 153: | Line 155: | ||
| se retine contorul curent al timer-ului in ICR1, si se intra in ISR-ul TIMER1_CAPT_vect. In acest ISR, se reseteaza counter-ul la 0 si indexul din vectorul de afisat. Se calculeaza perioada de rotatie impartind ICR1 la 64 (si tinand cont de cate overflow-uri s-au produs pana atunci), si pune aceasta valoare in registrul OCR1A. | se retine contorul curent al timer-ului in ICR1, si se intra in ISR-ul TIMER1_CAPT_vect. In acest ISR, se reseteaza counter-ul la 0 si indexul din vectorul de afisat. Se calculeaza perioada de rotatie impartind ICR1 la 64 (si tinand cont de cate overflow-uri s-au produs pana atunci), si pune aceasta valoare in registrul OCR1A. | ||
| - | Acum, pentru fiecare unghi din cele 64, se va intra pe ISR-ul TIMER1_COMPA_vect, unde se poate afisa starea curenta a LED-urilor si se poate incrementa indicele in vectorul de afisare. | + | Acum, pentru fiecare unghi din cele 64, se va intra pe ISR-ul TIMER1_COMPA_vect, unde se poate afisa starea curenta a LED-urilor si se poate incrementa indicele in vectorul de afisare. La final, se actualizeaza OCR1A pentru a genera o intrerupere la urmatorul unghi. |
| + | De asemenea, am folosit un "frame buffer" pentru a afisa textul. Astfel, nu apar artefacte atunci cand se actualizeaza configuratia display-ului si se afiseaza o configuratie incompleta. | ||
| Line 160: | Line 163: | ||
| ===== Rezultate obținute ===== | ===== Rezultate obținute ===== | ||
| + | |||
| + | Proiectul a fost finalizat cu succes. Efectul se vede bine cu ochiul liber. | ||
| + | |||
| + | Am realizat niste poze cu o expunere mai lunga pentru a evidentia fenomenul de persistence of vision: | ||
| + | |||
| + | Ceas analogic: | ||
| + | |||
| + | {{:pm:prj2021:apredescu:img_20210601_113701.jpg?300|}} | ||
| + | |||
| + | PM 2021: | ||
| + | |||
| + | {{:pm:prj2021:apredescu:pm-2021.jpg?300|}} | ||
| + | |||
| + | Afisare RPM curent: | ||
| + | |||
| + | {{:pm:prj2021:apredescu:rpm.jpg?300|}} | ||
| + | |||
| + | Pe filmari, efectul nu se vede la fel de bine, intrucat depinde mult de FPS. | ||
| + | |||
| + | |||
| + | Am facut si o filmare slow-motion pentru a evidentia mai bine modul in care isi schimba starea LED-urie. | ||
| + | |||
| + | [[https://www.youtube.com/watch?v=lnbqhCc3trI | Filmare POV display slow motion]] | ||
| + | |||
| + | [[https://www.youtube.com/watch?v=2-uD5XKbjIg | Filmare POV display ceas analogic]] | ||
| + | |||
| + | [[https://www.youtube.com/watch?v=q6oAxlLsWLQ | Filmare POV display afisare "Proiect PM", apoi "POV 2021"]] | ||
| ===== Concluzii ===== | ===== Concluzii ===== | ||
| + | Proiectul a fost interesant si are un rezultat satisfacator vizual. | ||
| + | |||
| + | A fost o experienta placuta pe partea de hardware si de software. | ||
| + | |||
| + | Cea mai dificila parte a proiectului este echilibrarea partii rotative, mai ales daca nu se foloseste un motor suficient de puternic. | ||
| + | |||
| + | Posibilitati de extindere a proiectului: | ||
| + | * modul Bluetooth + aplicatie de mobil pentru configurarea modurilor de iluminare | ||
| + | * modul RTC pentru afisarea timpului in timp real | ||
| + | * folosirea unui sistem de transmisie a puterii wireless pentru a alimenta componentele de pe rotor | ||
| ===== Download ===== | ===== Download ===== | ||
| + | PDF: | ||
| - | ===== Jurnal ===== | + | https://ocw.cs.pub.ro/courses/pm/prj2021/apredescu/pov-display?do=export_pdf |
| - | 25-04-2021: Draft pagina wiki | + | |
| + | Cod: | ||
| + | |||
| + | {{:pm:prj2021:apredescu:pm-pov-display.zip|}} | ||
| ===== Bibliografie ===== | ===== Bibliografie ===== | ||
| - | PDF: https://ocw.cs.pub.ro/courses/pm/prj2021/apredescu/pov-display?do=export_pdf | + | |
| [[http://www.techydiy.org/arduino-pov-display/| techydiy POV display]] | [[http://www.techydiy.org/arduino-pov-display/| techydiy POV display]] | ||
| + | |||
| + | [[https://ocw.cs.pub.ro/courses/_media/pm/atmel-7810-automotive-microcontrollers-atmega328p_datasheet.pdf | Datasheet atmega328p]] | ||