Mam taki kłopot (Bascom + Atmega128) ;
Korzystam z PWM w trybie FAST.
Uruchamiam sobie to normalnie ;
Następnie zmieniam zależnie od potrzeb wypełnienie, przez wpis do OCR0.
Na koniec wyłączam PWM ;
PWM startuje zawsze od wypełnienia "0", i potem jest zwiększane (jak np. przy rozruchu silnika).
No i niby wszystko jest dobrze, tylko, że czasem przy ponownym włączeniu tego PWM na samym początku pojawia mi się takie coś :
Czerwony przebieg to wyjście z PWM.
Jak widać, w pierwszym "cyklu", zaraz po uruchomieniu PWM pojawia się pełne wypełnienie - w następnych już jest takie, jakie jest zadane (krótkie piki).
I teraz tak - przy pierwszym uruchomieniu (po resecie) - zawsze jest ok.
W następnych uruchomieniach już różnie - raz dobrze, raz źle.
Domyślam się, że coś pozostaje w jakimś rejestrze, ale w jakim ?
Myślałem , że zerowanie Tcnt0 pomoże, ale nie.
Wyłączam PWM, ponieważ kiedy OCR0 = 0 to na wyjściu są właśnie bardzo krótkie piki, a nie stabilny stan "0". Dlatego wyłączam to PWM, a potem jeszcze dodatkowo ustawiam ten pin na "0".
Ale to chyba nie jest przyczyną tego problemu ?
O co chodzi Waszym zdaniem ?
Korzystam z PWM w trybie FAST.
Uruchamiam sobie to normalnie ;
Tcnt0 = 0
Ocr0 = 0
Tccr0 = &B01101010 'timer0 in fast pwm mode, prescale = 8 10kHz
Ocr0 = 0Następnie zmieniam zależnie od potrzeb wypełnienie, przez wpis do OCR0.
Na koniec wyłączam PWM ;
Ocr0 = 0
Tccr0 = &B00000000
Tcnt0 = 0PWM startuje zawsze od wypełnienia "0", i potem jest zwiększane (jak np. przy rozruchu silnika).
No i niby wszystko jest dobrze, tylko, że czasem przy ponownym włączeniu tego PWM na samym początku pojawia mi się takie coś :
Czerwony przebieg to wyjście z PWM.
Jak widać, w pierwszym "cyklu", zaraz po uruchomieniu PWM pojawia się pełne wypełnienie - w następnych już jest takie, jakie jest zadane (krótkie piki).
I teraz tak - przy pierwszym uruchomieniu (po resecie) - zawsze jest ok.
W następnych uruchomieniach już różnie - raz dobrze, raz źle.
Domyślam się, że coś pozostaje w jakimś rejestrze, ale w jakim ?
Myślałem , że zerowanie Tcnt0 pomoże, ale nie.
Wyłączam PWM, ponieważ kiedy OCR0 = 0 to na wyjściu są właśnie bardzo krótkie piki, a nie stabilny stan "0". Dlatego wyłączam to PWM, a potem jeszcze dodatkowo ustawiam ten pin na "0".
Ale to chyba nie jest przyczyną tego problemu ?
O co chodzi Waszym zdaniem ?