ATMega a timer2 s OC2

Richard Kaliciak hw.kaliciak@stonline.sk
Středa Duben 23 22:41:29 CEST 2008


Dakujem za nazory.

V principe sa jedna o PWM, ale len pokym idu impulzy. Dalej popisem moje 
poznatky, mozno sa niekomu v buducnosti zidu.

1. Vyskusal som Fast PWM
	// Timer/Counter 2 initialization
	// Clock source: System Clock
	// Clock value: 15,625 kHz
	// Mode: Fast PWM top=FFh
	// OC2 output: Non-Inverted PWM
	TCCR2=0x6D;
	TCNT2=0x00;
	OCR2=0x20;

Ak neprichadza externy INT, tak PWM robi to co ma, len s periodou cca 16ms.
Ak v externom preruseni nastavim citac na nulu, tak sa ocividne 
negeneruge signal BOTTOM, ktory nastavuje OC2 do 1. Takze vystup ostava 
stale na 0.
Ak v externom preruseni nastavim TCNT2=0xFF, tak sa PWM zosynchronizuje 
so vstupnymi impulzami, ale samozrejme sa generuje aj SIG_OVERFLOW2, 
takze sa nic nedozviem o vynechani impulzu.

2. Vyskusal som povodnu myslienku, ze timer2 sa porovnava s OCR2 a 
zaroven sa vyuzije pretecenie na indikaciu nepritomnosti impulzov. V 
externom preruseni treba urobit toto (poradil wek):
ISR( SIG_INTERRUPT4 ){
     	TCNT2=0x00;
     	TCCR2=0x35;		// OC2 output: Set on compare match
     	sbi( TCCR2, FOC2);	// force compare
     	TCCR2=0x25;		// OC2 output: Clear on compare match
     	OCR2 = mainOptions.powerTimer;
     	mainOptions.mainSynchronized = 1;
}

Tato varianta funguje.

3. Vyskusal som mavat PB.7 rucne pri externom preruseni a aj pri 
SIG_OUTPUT_COMPARE2. Aj toto funguje podla predstavy. Je tu len jedno 
prerusenie navyse.


Nechal som sa zviest touto vetou z DS:
"The output compare unit can be used to generate interrupts at some 
given time. Using the output compare to generate waveforms in normal 
mode is not recommended, since this will occupy too much of the CPU time."
Preto som sa chel tomu preruseniu od OCR vyhnut.


Richard Kaliciak

Jan Waclawek schrieb:
> Mno, asi by to islo aj takto, ale to neriesi "neprogramovanie prerusenia" na tom externom preruseni - navyse musis mat urobeny interrupt aj na ten overflow, ktory timer2 zastavi alebo nieco podobne.
> 
> Ja to vidim tak, ze ak nie je z nejakeho dovodu nevyhnutne potrebne setrit cyklami v okamihu compare match (setrit pri prichode externeho prerusenia nejde), tak treba napisat aj to prerusenie na compare match a machat pinom rucne. Zda sa mi to ako najjednoduchsie.
> 
> Asi nema zmysel to viac rozmazavat kym sa k tomu Riso nevyjadri.
> 
> wek
> 



Další informace o konferenci Hw-list