spinach Postat Iulie 26, 2014 Partajează Postat Iulie 26, 2014 saluatm, Vrau sa construesc o baza de timp pentru osciloscop , folosint un attiny2313 , astfel: -utilizez cristal de 20Mhz -fabric impulsurile cu fast pwm , cu contorul de 16 biti -primesc cererea de sincronizare pe o intrare Intrebarea ar fi : cit timp [cti cicli de ceas] se scurge de cind soseste cererea de sincronizare pina ce apare impulsul la esire pwm. mecanicmul functional ar fi asa: -soseste cererea de sincronizare , adica o intrare care isi schimba starea -citim intrarea -resetam contor folosit pentru pwm -apare pe esire impulsul pwm Link spre comentariu
one Postat Iulie 29, 2014 Partajează Postat Iulie 29, 2014 Depinde si care sunt setarile timerului pentru TOP de exemplu. Daca ai 20MHz frecventa clock si folosesti PWM pe 16biti, frecventa de iesire va fi Fclk/(N*(1+TOP)), unde N este factorul de diviziune al prescalerului. 20000000/65536, adica 305Hz, deci timpul de udate va fi maxim perioada impulsului, adica 3.2ms. Acest timp se reduce odata cu cresterea frecventei, deci cu reducerea valorii TOP. Link spre comentariu
spinach Postat Iulie 30, 2014 Autor Partajează Postat Iulie 30, 2014 (editat) Nu , nu ma refer la situatia in care ca se schimba parametri setati pt pwm , adica frecventa di regimul duty free. In acesta situatie mea , pwm genereaza impulsuri forte scurte , cam 5 % din valoarea stata corespunzator frecventei pwm Un generator pentru osciloscop , functioneaza sincronizat cu forma undei de masutat . Sincronizare = cu un impuls , care soseste la mcu. Cind mcu vede impulsul , trebuie sa inceapa un nou ciclu , adica in mod concret , trebuie sa reseteze contorul si implicit sileste mcu sa inceapa un nou ciclu pwm. Dupa cit am studiat , ii trebuie: -timp sa citesca intrarea -timp sa execute instructiunea de stergere contor -timp sa restarteze pwm si sa fabrice impuls pe esire , Acesti timpi , de fapt sint cicli de ceas mcu . Eu sint nedumerit , citi cicli se consuma ? Acuma poate va intrebati de ce ? Pai pentru ca in situatia ca baza de timp trebuie sa vizualizeze un semnal de 20 Mhz , are nevoie sa functioneze cu 0.5 us/div , [in ipostaza ca acceptam o vizualizare de 5 sinusoide pe ecran ]; , adica un total de 5u latime ecran , deci o frecventa de 0.2Mhz . Se poate concluziona ca daca mcu merge cu 20Mhz , are la dispozite 100 de cicli pentru fiecare ciclu necesar la pwm . Daca operatia de sincronizare se termina in 5 cicli de ceas mcu , cred ca ar fi acceptabil . Editat Iulie 30, 2014 de hspinache Link spre comentariu
Liviu M Postat Iulie 30, 2014 Partajează Postat Iulie 30, 2014 Ca sa inteleg si eu despre ce e vorba: tu vrei ca folosind un uController cu ceas de 20MHz sa construiesti un osciloscop pentru semnale cu frecvente de 20MHz? Link spre comentariu
Depanatoru Postat Iulie 30, 2014 Partajează Postat Iulie 30, 2014 (editat) Nici mama omida n-are de unde sa stie cati cicli consuma ... depinde cum faci programul stiind ca in general 1 instructiune in asamblare se executa intr-un tact Frecventa maxima PWM e mult mai mica decat frecventa de tact Editat Iulie 30, 2014 de Depanatoru Link spre comentariu
spinach Postat Iulie 30, 2014 Autor Partajează Postat Iulie 30, 2014 Pot folosi altceva ? cu frecventa mai mare ? Exista o frecventa maxima la pwm ? Link spre comentariu
Depanatoru Postat Iulie 30, 2014 Partajează Postat Iulie 30, 2014 (editat) Pai asa grosier din PWM de 8 biti nu se poate obtine frecventa mai mare de Fclock2^8 adica Fclock256 ... in realitate mai putin pt ca se mai consuma cicli de tact suplimentar Practic mai mult de 100KHz nu prea poti obtine cu un microcontroler obisnuit , si asta la rezolutie PWM de numai 8 bit E suficient pentru o sursa in comutatie de exemplu , dar nimic mai mult Editat Iulie 30, 2014 de Depanatoru Link spre comentariu
one Postat Iulie 31, 2014 Partajează Postat Iulie 31, 2014 (editat) Intrebarea ar fi : cit timp [cti cicli de ceas] se scurge de cind soseste cererea de sincronizare pina ce apare impulsul la esire pwm. mecanicmul functional ar fi asa: -soseste cererea de sincronizare , adica o intrare care isi schimba starea -citim intrarea -resetam contor folosit pentru pwm -apare pe esire impulsul pwm e cam complicat de calculat cu exactitate, cred ca daca aceasta rutina este facuta bine, cam 20 cicli...deci cam 1us la 20MHz dar.... cat dureaza impulsul PWM ? pasul 2 cred ca nu isi are rostul... schimbarea unui pin (poate fi si intrarea comparatorului analogic daca banda e suficienta), genereaza o intrerupere care reseteaza contorul si porneste impulsul. cred ca cel mai bine ar fi sa scrii programul si sa il simulezi cu avrstudio si vezi exact cati cicli iti ia. Ce faci cu acest impuls PWM? generezi o rampa ? nu ar fi mai simplu sa faci un circuit fara microcontroller ? Baza de timp este pentru un osciloscop analogic sau construiesti unul digital ? Cred ca exista un proiect open-source de osciloscop cu ATmega sau Xmega, cu tiny nu stiu. Uite aici un exemplu: http://www.eosystems.ro/index.php/projects/eoscope Editat Iulie 31, 2014 de one Link spre comentariu
spinach Postat August 1, 2014 Autor Partajează Postat August 1, 2014 1.Impulsurile sint folosite pentru a descarca un condensator si deci a genera tensiune in rampa ; to ele sint folosite pt stingere . 2.Este foarte facil de folosit un mcu , mai ales pentru alegere frecventa . 3.Am retinut ideia de a face o simulare in prealabi . 4.O intrerupere citi ck , consuma ? Link spre comentariu
one Postat August 1, 2014 Partajează Postat August 1, 2014 (editat) Detalii despre timpul de acces la rutina de intrerupere se pot gasi in documentul Atmel AVR1201: Using External Interrupts for tinyAVR Devices. The interrupt execution response for all the enabled AVR interrupts is minimum four/five clock cycles. This four/five clock cycles depends on the program counter width. If the program counter width is not more than two bytes, then the interrupt response time will be four clock cycles minimum and if the program counter width is more than two bytes, then the interrupt response time will be minimum five clock cycles. Deci daca rutina ta de intrerupere se afla in primele 65000 linii de program (cod masina), atunci iti ia 4 cicli, si al cincilea ciclu va fi prima ta instructiune din rutina de intrerupere. (cazul cel mai probabil). Oricum si asta ar trebui sa vezi cand simulezi... Parerea mea... daca vrei sa schimbi starea pinului cat mai rapid, imediat in rutina de intrerupere sa setezi pinul de iesire (altul decat OutputCompare), apoi sa resetezi registrele PWM, iar iesirea PWM sa o folosesti ca sa generezi o alta intrerupere care sa iti reseteze pinul cand PWM devine "0" si sa il seteze cand PWM devine "1". Astfel, ai o setare foarte rapida cand exista semnalul de trigger, iar in lipsa acestuia, functioneaza oricum. Editat August 1, 2014 de one Link spre comentariu
spinach Postat August 1, 2014 Autor Partajează Postat August 1, 2014 "Parerea mea... daca vrei sa schimbi starea pinului cat mai rapid, imediat in rutina de intrerupere sa setezi pinul de iesire (altul decat OutputCompare), apoi sa resetezi registrele PWM, iar iesirea PWM sa o folosesti ca sa generezi o alta intrerupere care sa iti reseteze pinul cand PWM devine "0" si sa il seteze cand PWM devine "1". Astfel, ai o setare foarte rapida cand exista semnalul de trigger, iar in lipsa acestuia, functioneaza oricum." Inca nu inteleg complect ; Link spre comentariu
one Postat August 1, 2014 Partajează Postat August 1, 2014 Incerc sa reformulez: ATtiny2313 are pinii de iesire PWM: PD5 - OC0B PB2 - OC0A PB3 - OC1A PB4 - OC1B Tu aplici impulsul de sincronizare pe PB0 sau PB1, daca folosesti comparatorul analogic (cu conexiunile de rigoare, tensiune de prag, etc.) sau pe unul din pinii PD2, PD3 (intreruperi externe). Impulsul de iesire il faci pe alt pin - presupunem aici PD6 dar poti sa alegi altul. Fac un pseudocod: presupun ca semnalul pwm se face 1 cand timerul incepe numaratoarea si devine 0 cand ajunge la OCR, se face din nou 1 cand termina numaratoarea si reincepe, etc. intrerupere_externa_sau_comparator_presupun_INT0 { PD6 = 1; // !!!!!! sa fie cat mai rapid TCNT1 = 0; //reseteaza timer PWM; }intrerupere_pwm_presupun_timer1_deci_TIMER1_COMPA { // se activeaza la setarea OCF1A, cand PWM-ul tau se face zero PD6 = 0; }intrerupere_pwm_presupun_timer1_deci_TIMER1_OVF { // se activeaza cand timerul ajunge singur la zero si nu il resetezi tu PD6 = 1: } Link spre comentariu
spinach Postat August 2, 2014 Autor Partajează Postat August 2, 2014 1. reiese ca sint 2 modalitati se achizitie informatie : var1-prin intrerupere externa var 2-prin comparator analogic Care din ele ar fi mai gustoasa ? 2.cam este necesar de folosit tm de 16 biti , pentru a avea spectrul de frecventa . tm de 16 bit este mai lent decit cel de 8 biti ? Link spre comentariu
one Postat August 4, 2014 Partajează Postat August 4, 2014 1. Daca folosesti comparatorul analogic, ai putea sa reglezi pragul de triggerare. Pe de alta parte, trebuie vazuta banda comparatorului... Eu banuiesc ca intreruperea externa ar fi ceva mai rapida dar nu stiu exact cu cat. 2. Timerul de 16 biti este tot atat de rapid ca si timerul de 8 biti, cu diferenta ca poti obtine temporizari mai lungi. Daca trebuie sa numere de exemplu de la 0 la 100, vor functiona la fel, cu conditia bineinteles de a folosi aceleasi setari pentru prescaller. La timerul pe 8 biti esti limitat la 255 valori. Link spre comentariu
spinach Postat August 4, 2014 Autor Partajează Postat August 4, 2014 Editare in C este mai lenta decit in asm ? Link spre comentariu
Postări Recomandate
Creează un cont sau autentifică-te pentru a adăuga comentariu
Trebuie să fi un membru pentru a putea lăsa un comentariu.
Creează un cont
Înregistrează-te pentru un nou cont în comunitatea nostră. Este simplu!
Înregistrează un nou contAutentificare
Ai deja un cont? Autentifică-te aici.
Autentifică-te acum