Vizitator nelutu88 Postat Ianuarie 11, 2011 Partajează Postat Ianuarie 11, 2011 salut! Sunt incepator in programarea uC. :Trebuie sa generez : cod generare PWM cu frecventza de 38KHz la pinul 19(OC1A) al unui uC ATMega16.,pt a comanda niste leduri in IR . Dupa care sa detecteze un senzor IR,iar dupa aia sa aprind niste ledurile. Partea cu aprinsul ledurilor merge ,pt ca am testat cu o telecomanda acest lucru, cred ca problema ar fi la generarea frecventei pt comnada ledurilor in IR. daca ma poate ajuta cineva cu un cod,ms fain.Asta am reusit pana acum. Daca testez cu o telecomanda...se aprinde ledul,DAR la un moment dat...se aprinde singur ...fara sa mai folosesc telecomanda sau vreo alta sursa IR. ms#include #include #include int var=0;int k=421;void timer1_init(void){ OCR1A=210; TCCR1A=0x40; TCCR1B=0x01; //CTC, no prescalling TIMSK=0x10; //Output Compare A Match Interrupt Enable}ISR(TIMER1_COMPA_vect){ var=~var; if(var) OCR1A=k-200; else OCR1A=200;}ISR(INT0_vect){ PORTA|=(1< Link spre comentariu
ole Postat Ianuarie 12, 2011 Partajează Postat Ianuarie 12, 2011 Seteaza timerul pe modul CTC cu Toogle OCx. Link spre comentariu
nana Postat Ianuarie 12, 2011 Partajează Postat Ianuarie 12, 2011 Pai daca stam putin si analizam ce ai scris tu acolo sa vedem initializarea PWM;TIMSK reg de intrerupere este ok;TCCR1A este 0x40; este ok activezi doar com1A0 (toggle)insa tccr1b este 0x01; care selecteaza doar prescaler(no prescaler) insa pe bitul WGM12 cine vrei sa il seteze ca sa ai CTC; atunci trebuie sa setezi TCCR1B=0x09; sau TCCR1B |=(WGM12<<1)|(CS10<<1);Ia vezi acum functioneaza PWM-ul P.s: cum lai setat tu initial era Normal Mode Operation teoretic ar fi trebuit sa execute PWM insa tu ai intrerupere destul de mare(ca executie si timer fara prescaler) iar in accest mod imtreruperile de la PWM se executa f lent.In data sheet se recomanda modul CTC. Link spre comentariu
Vizitator nelutu88 Postat Ianuarie 14, 2011 Partajează Postat Ianuarie 14, 2011 OK,ms de raspunsuri,am sa-ncerc Pai daca stam putin si analizam ce ai scris tu acolo sa vedem initializarea PWM;TIMSK reg de intrerupere este ok;TCCR1A este 0x40; este ok activezi doar com1A0 (toggle)insa tccr1b este 0x01; care selecteaza doar prescaler(no prescaler) insa pe bitul WGM12 cine vrei sa il seteze ca sa ai CTC; atunci trebuie sa setezi TCCR1B=0x09; sau TCCR1B |=(WGM12<<1)|(CS10<<1);Ia vezi acum functioneaza PWM-ul P.s: cum lai setat tu initial era Normal Mode Operation teoretic ar fi trebuit sa execute PWM insa tu ai intrerupere destul de mare(ca executie si timer fara prescaler) iar in accest mod imtreruperile de la PWM se executa f lent.In data sheet se recomanda modul CTC. 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