Differences

This shows you the differences between two versions of the page.

Link to this comparison view

pm:prj2021:avaduva:functiongenerator [2021/06/01 01:02]
andrei.biu
pm:prj2021:avaduva:functiongenerator [2021/06/18 19:33] (current)
andrei.biu [Download & Resurse aditionale]
Line 107: Line 107:
 Acesta este fisierul .ino in care este cod specific proiectului,​ construit pe baza celor doua biblioteci anterior descrise. Aici este pastrata starea aparatului, este gestionata apasarea butoanelor (prin functia ''​loop''​ specifica Arduino si intreruperi de tip pin change - PCINT; mai precis, in ISR - uri se detecteaza si se salveaza ce buton a fost apasat, iar apoi in ''​loop''​ se face pooling pentru a apela metoda corespunzatoare de ''​press''​ din ''​LCDInterface'';​ in final toata logica suplimentara la selectia diferitelor elemente de pe ecran este tratata prin handlerul dat ca paramentru metodei ''​LCDInterface::​pressSelect''​) si sunt realizate initializarile necesare (functia ''​setup''​ specifica Arduino). Acesta este fisierul .ino in care este cod specific proiectului,​ construit pe baza celor doua biblioteci anterior descrise. Aici este pastrata starea aparatului, este gestionata apasarea butoanelor (prin functia ''​loop''​ specifica Arduino si intreruperi de tip pin change - PCINT; mai precis, in ISR - uri se detecteaza si se salveaza ce buton a fost apasat, iar apoi in ''​loop''​ se face pooling pentru a apela metoda corespunzatoare de ''​press''​ din ''​LCDInterface'';​ in final toata logica suplimentara la selectia diferitelor elemente de pe ecran este tratata prin handlerul dat ca paramentru metodei ''​LCDInterface::​pressSelect''​) si sunt realizate initializarile necesare (functia ''​setup''​ specifica Arduino).
 ===== Utilizare ===== ===== Utilizare =====
-Utlizatorul ​aparatului trebuie doar sa seteze modul dorit si parametrii specifici fiecarui mod de functionare (waveform, PWM). Acest lucru se face prin navigarea si selectia pe ecran cu ajutorul celor 5 butoane. Intotdeauna exista o casuta curenta pe ecran (similar cu un element de interfata cu utilizatorul dintr-un GUI - de exemplu un buton - atunci cand se face navigarea cu tab) care este evidentiata printr-un cursor de tip underscore ("​_"​) ce este miscat prin cele 4 taste de directie.+Utilizatorul ​aparatului trebuie doar sa seteze modul dorit si parametrii specifici fiecarui mod de functionare (waveform, PWM). Acest lucru se face prin navigarea si selectia pe ecran cu ajutorul celor 5 butoane. Intotdeauna exista o casuta curenta pe ecran (similar cu un element de interfata cu utilizatorul dintr-un GUI - de exemplu un buton - atunci cand se face navigarea cu tab) care este evidentiata printr-un cursor de tip underscore ("​_"​) ce este miscat prin cele 4 taste de directie.
  
 <note tip> <note tip>
-Dupa pornirea aparatului cursorul nu este afisat.+Dupa pornirea aparatuluicursorul nu este afisat.
  
-Este necesar sa se apase o tasta de directie pentru a fi mutat cursorul pentru prima data si a fi afisat. Acesta este situat le pornire mereu in casuta din coltul stanga-sus al ecranului.+Este necesar sa se apese o tasta de directie pentru a fi mutat cursorul pentru prima data si a fi afisat. Acesta este situat le pornire mereu in casuta din coltul stanga-sus al ecranului.
 </​note>​ </​note>​
  
 Introducerea parametrilor / setarilor se face in casutele corespunzatoare astfel: Introducerea parametrilor / setarilor se face in casutele corespunzatoare astfel:
-  * Pentru cele de tip switch (''​OnOffSwitch''​ sau ''​MultiSwitch''​) se apasa tasta select pentru ​trececerea ​ciclica intre valori atunci cand cursoarul ​este pe casuta aferenta acelei setari. Schimbarea efectiva a parametrului setat se face imediat fara alte comenzi suplimentare. Daca setarea are valori ale caror nume necesita mai multe casute pentru afisare, casuta care este activa - care are comportamentul descris anterior - este mereu (si doarprima +  * Pentru cele de tip switch (''​OnOffSwitch''​ sau ''​MultiSwitch''​) se apasa tasta select pentru ​trecerea ​ciclica intre valori atunci cand cursorul ​este pe casuta aferenta acelei setari. Schimbarea efectiva a parametrului setat se face imediat fara alte comenzi suplimentare. Daca setarea are valori ale caror nume necesita mai multe casute pentru afisare, casuta care este activa - care are comportamentul descris anterior ​de switch ​- este intotdeauna ​doar prima casuta din totalul celor necesare. 
-  * Pentru cele in care se pot introduce date - in cazul aparatului valori numerice (de tip ''​DataBox''​) trebuie mai intai selectate prin apasarea select; atunci se blocheaza cursorul ​pentru a mai fi mutat si acesta este inlocuit cu unul de tip blinking box si se poate cicla prin valorie ​disponibile prin abasarea ​butoanlor up si down; pentru salvarea valorii introduse si intoarcerea la cursorul normal care permite navigarea pe ecran trebuie apasat din nou select.+  * Pentru cele in care se pot introduce date - in cazul aparatului valori numerice (de tip ''​DataBox''​) ​- acestea ​trebuie mai intai selectate prin apasarea select; atunci se blocheaza cursorul ​(nu mai poate fi mutatsi acesta este inlocuit cu unul de tip blinking box si se poate cicla prin valorile ​disponibile prin apasarea ​butoanlor up si down; pentru salvarea valorii introduse si intoarcerea la cursorul normal care permite navigarea pe ecran trebuie apasat din nou select.
  
 <note tip> <note tip>
-Casutele alaturate care permit introducerea de cifre fromeaza ​impreuna un numar. Chiar daca se poate schimba doar valoarea unei cifre la un moment dat, valoarea citita de aparat este formata din toate cifrele.+Casutele alaturate care permit introducerea de cifre formeaza ​impreuna un numar. Chiar daca se poate schimba doar valoarea unei cifre la un moment dat, valoarea citita de aparat este formata din toate cifrele.
  
-Daca este introdusa o valoare invalida sau indisponibila,​ se considera si afisa cea mai apropiata valoare valida.+Daca este introdusa o valoare invalida sau indisponibila,​ se considera si afiseaza ​cea mai apropiata valoare valida.
 </​note>​ </​note>​
  
Line 129: Line 129:
 {{ :​pm:​prj2021:​avaduva:​functiongenerator_lcdinterfacediagarm.png |}} {{ :​pm:​prj2021:​avaduva:​functiongenerator_lcdinterfacediagarm.png |}}
  
-In imagine e prezentata structura ecranului cand modul este Waveform, outputul este dezactivat (O arata ca prin apasare se activeaza semnalul, X arata dezactivarea),​ iar tipul de semnal este Sawtooth (SAW - Sawtooth wave, SIN - Sine wave, TRI - triangle wave, TPZ - trapezoidal wave).+In imagine e prezentata structura ecranului cand modul este Waveform, outputul este dezactivat (O arata ca prin apasare se activeaza semnalul, X semnifica ​dezactivarea),​ iar tipul de semnal este Sawtooth (SAW - Sawtooth wave, SIN - Sine wave, TRI - triangle wave, TPZ - trapezoidal wave).
  
 {{ :​pm:​prj2021:​avaduva:​functiongenerator_lcdinterfacediagarm2.png |}} {{ :​pm:​prj2021:​avaduva:​functiongenerator_lcdinterfacediagarm2.png |}}
  
-In imagine e prezentata structura ecranului cand modul este PWM, outputul este activat (O arata ca prin apasare se activeaza semnalul, X arata dezactivarea)si este activ un singur canal (SCH - Single channel mode, DCH - dual channel mode).+In imagine e prezentata structura ecranului cand modul este PWM, outputul este activat (O arata ca prin apasare se activeaza semnalul, X semnifica ​dezactivarea) si este activ un singur canal (SCH - Single channel mode, DCH - dual channel mode).
 ===== Testare & Demo ===== ===== Testare & Demo =====
-Pentru testarea proiectului am realizat un prototip pe breadboard utilizand exact componentele specificate in sectiunea de design hardware. ​Pe langa asta am utilzat urmatoarele instrumente pentru testare:+Pentru testarea proiectului am realizat un prototip pe breadboard utilizand exact componentele specificate in sectiunea de design hardware. ​In plus am utilzat urmatoarele instrumente pentru testare:
   * Sursa de alimentare reglabila   * Sursa de alimentare reglabila
   * Multimetru   * Multimetru
Line 145: Line 145:
 {{:​pm:​prj2021:​avaduva:​functiongenerator_capture_3.jpeg?​300|}} ​ {{:​pm:​prj2021:​avaduva:​functiongenerator_capture_3.jpeg?​300|}} ​
  
-Exemple de modaliati ​de functionare ale dispozitivului:​+Exemple de moduri ​de functionare ale dispozitivului:​
   * Triangular Wave, 3.5V, 100Hz   * Triangular Wave, 3.5V, 100Hz
     {{:​pm:​prj2021:​avaduva:​functiongenerator_capture_9.jpeg?​300|}} {{:​pm:​prj2021:​avaduva:​functiongenerator_capture_8.jpeg?​800|}}     {{:​pm:​prj2021:​avaduva:​functiongenerator_capture_9.jpeg?​300|}} {{:​pm:​prj2021:​avaduva:​functiongenerator_capture_8.jpeg?​800|}}
Line 159: Line 159:
 Live demo pentru modul Waveform: [[https://​ctipub-my.sharepoint.com/:​v:/​g/​personal/​andrei_biu_stud_acs_upb_ro/​ETsWX5p0IIVOj58VhsXtT0QB490XeUBBohJbZ1HQzZ6_Yg?​e=TK9w8y| Video]] Live demo pentru modul Waveform: [[https://​ctipub-my.sharepoint.com/:​v:/​g/​personal/​andrei_biu_stud_acs_upb_ro/​ETsWX5p0IIVOj58VhsXtT0QB490XeUBBohJbZ1HQzZ6_Yg?​e=TK9w8y| Video]]
 ===== Concluzii & Future Work ===== ===== Concluzii & Future Work =====
-Proiectul poate primi o serie de imbunatatiri fata de forma descrisa / deja implementata pentru a extinde ​capacitatiile ​acestuia: +Proiectul poate primi o serie de imbunatatiri fata de forma descrisa / deja implementata pentru a extinde ​capacitatile ​acestuia: 
-  - Frecventa maxima obtinuta in modul waveform este limitata in primul rand de software. Overheadul unei intreruperi este mare pentru astfel de aplicatii, mai ales in contextul in care codul dat de compilator nu este prea eficient pentru ISA-uri. In particular este pesimist in ceea ce priveste utilizarea registrilor si simte nevoia sa faca prea multe salvari pe stiva. Schimbarea codului din ISA-ul pentru waveform cu unul in limbaj de asamblare (inline assembly + ISR_NAKED) poate creste frecventa pana la 5kHz (acest lucru inca nu a fost realizat ​deoarce ​programul functiona incorect cu toate variantele de cod incercat). Mai departe rezervarea unor registrii globali poate aduce o dublare pana la 10kHz, dar acest lucru presupune abandonarea mediului Arduino si programarea in C fara a folosi nicio bibioteca ​externa (totul de la zero), inclusiv multe functii din implementarea libc pentru AVR (dintre cele precompilate). +  - Frecventa maxima obtinuta in modul waveform este limitata in primul rand de software. Overheadul unei intreruperi este mare pentru astfel de aplicatii, mai ales in contextul in care codul dat de compilator nu este prea eficient pentru ISA-uri. In particular este pesimist in ceea ce priveste utilizarea registrilor si simte nevoia sa faca prea multe salvari pe stiva. Schimbarea codului din ISA-ul pentru waveform cu unul in limbaj de asamblare (inline assembly + ISR_NAKED) poate creste frecventa pana la 5kHz (acest lucru inca nu a fost realizat ​deoarece ​programul functiona incorect cu toate variantele de cod incercat). Mai departerezervarea unor registrii globali poate aduce o dublare pana la 10kHz, dar acest lucru presupune abandonarea mediului Arduino si programarea in C fara a folosi nicio biblioteca ​externa (totul de la zero), inclusiv multe functii din implementarea libc pentru AVR (dintre cele precompilate). 
-  - Filtrul ​Salem-Key nu are un efect de filtrare ​sufiient ​de bun pentru netezirea frecventelor mici. Ar fi nevoie de un filtru realizat cu trimmer programabil. Exista astfel ​dd IC-uri, insa tind sa aiba o plaja mica de capacitante. In cazul aparatului ar fi nevoie de ceva in intervalul de cativa ​ μF - sute de pF. Acest lucru poate fi realizat cu un decodor pe 3 biti (ultimii 3 pini liberi ai placii), de exemplu 74HC237 care sa comande MOSFET-uri de joasa putere precum 2N7000 care la randul lor sa cupleze condensatorii necesari. ​Asta poate permite o reducere a numarului de valori necesare pentru reconstruirea semnalului, deci la crestera ​frecventei maxime (o limita realista este in jurul a 20kHz).+  - Filtrul ​Sallen-Key nu are un efect de filtrare ​suficient ​de bun pentru netezirea frecventelor mici. Ar fi nevoie de un filtru realizat cu trimmer programabil. Exista astfel ​de IC-uri, insa tind sa aiba o plaja mica de capacitante. In cazul aparatului ar fi nevoie de ceva in intervalul de cativa ​ μF - sute de pF. Acest lucru poate fi realizat cu un decodor pe 3 biti (ultimii 3 pini liberi ai placii), de exemplu 74HC237 care sa comande MOSFET-uri de joasa putere precum 2N7000 care la randul lor sa cupleze condensatorii necesari. ​Aceasta ​poate permite o reducere a numarului de valori necesare pentru reconstruirea semnalului, deci la cresterea ​frecventei maxime (o limita realista este in jurul a 20kHz).
  
-Cu toate acestea raman suficiente limitari pe partea de generare de waveform care pot fi prea mari pentru un alt uz decat cel ocazional in regim de hobby-ist. Pentru o performanta mult mai buna trebuie inlocuita intreaga parte de generare de functii de unda (hardware + parte din software) cu un DAC cu memorie interna (cu o interfata I2C sau SPI), sau chiar cu un IC dedicat pentru generare de semnale.+Cu toate acestearaman suficiente limitari pe partea de generare de waveform care pot fi prea mari pentru un alt uz decat cel ocazional in regim de hobbyist. Pentru o performanta mult mai buna trebuie inlocuita intreaga parte de generare de functii de unda (hardware + parte din software) cu un DAC cu memorie interna (cu o interfata I2C sau SPI), sau chiar cu un IC dedicat pentru generare de semnale.
  
 <​note>​ <​note>​
-Dintre acestea, cel mai probabil varianta cu DAC-ul este mai avantajoasa din punct de vedere al costului si inca ofera flexibilitatea de a genera semnale oarecare definite in soft. Totusi aceste alternative ies intr-o anumita masura din scopul initial al proiectului - acela de a testa capacitatiile ​intrinseci ale placii Arduino UNO de a functiona ca generator de functii de semnal.+Dintre acestea, cel mai probabil varianta cu DAC-ul este mai avantajoasa din punct de vedere al costului si continua sa ofere flexibilitatea de a genera semnale oarecare definite in soft. Totusi aceste alternative ies intr-o anumita masura din scopul initial al proiectului - acela de a testa capacitatile ​intrinseci ale placii Arduino UNO de a functiona ca generator de functii de semnal.
 </​note>​ </​note>​
  
Line 182: Line 182:
  
 [[https://​www.arduino.cc/​reference/​en]] [[https://​www.arduino.cc/​reference/​en]]
 +
 +Prezentarea pentru PM Fair: {{:​pm:​prj2021:​avaduva:​functiongenerator.pptx| Function Generator}}
  
  
pm/prj2021/avaduva/functiongenerator.1622498543.txt.gz · Last modified: 2021/06/01 01:02 by andrei.biu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0