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