Robię przetwornicę na ATtiny261.
Chcę skonfigurować PWM tak, żeby miałem 2 symetryczne przebiegi na wyjściach OC1D i /OC1D (piny 7, 8) z czasem martwym ok. 200-300ns.
Udało mi się to zrobić na ATtiny 25/45/85, ale musiałem się przesiąść na coś co ma więcej pinów. W ATtiny261 jest więcej rejestrów, które trzeba ustawić.
Na początku włączam PLL (potrzebuję: PCK=64MHz, dla uzyskania: 250kHz, 8bit PWM).
Nie wiem co robię źle, ale PWM na tych wyjściach "skacze" - szybko zmienia się okres przebiegu i jego wypełnienie pomimo, że nigdzie więcej w kodzie nie modyfikuję rejestrów OCR1C i OCR1D.
Jeśli nie korzystam z wyjść OC1A i OC1B to bity PWM1A i PWM1B mają być 0 (disabled)? Czy mają jeszcze jakieś inne przeznaczenie?
Kod jest w assemblerze, ale to chyba bez znaczenia bo chcę spytać tylko o konfigurację rejestrów.
Chcę skonfigurować PWM tak, żeby miałem 2 symetryczne przebiegi na wyjściach OC1D i /OC1D (piny 7, 8) z czasem martwym ok. 200-300ns.
Udało mi się to zrobić na ATtiny 25/45/85, ale musiałem się przesiąść na coś co ma więcej pinów. W ATtiny261 jest więcej rejestrów, które trzeba ustawić.
Na początku włączam PLL (potrzebuję: PCK=64MHz, dla uzyskania: 250kHz, 8bit PWM).
Nie wiem co robię źle, ale PWM na tych wyjściach "skacze" - szybko zmienia się okres przebiegu i jego wypełnienie pomimo, że nigdzie więcej w kodzie nie modyfikuję rejestrów OCR1C i OCR1D.
Jeśli nie korzystam z wyjść OC1A i OC1B to bity PWM1A i PWM1B mają być 0 (disabled)? Czy mają jeszcze jakieś inne przeznaczenie?
Kod jest w assemblerze, ale to chyba bez znaczenia bo chcę spytać tylko o konfigurację rejestrów.
;PLL ON --------------------------------------------------------
ldi A, 0b00000010 ; turn on PLL
out PLLCSR, A ;
_Waiste_us 10000 ; delay 100us for stabilize PLL
ldi A, 0b00000110 ; turn on Timer/counter clock source
out PLLCSR, A ;
;PWM + DEAD TIME GENERATOR -------------------------------------
ldi A, 0b00000000 ; COM1A1, COM1A0, COM1B1, COM1B0, FOC1A, FOC1B, PWM1A, PWM1B
out TCCR1A, A ;
ldi A, 0b00000001 ; PWM1X, PSR1, DTPS11, DTPS10, CS13, CS12, CS11, CS10 (dead time - no division, clock: PCK)
out TCCR1B, A ;
ldi A, 0b00000101 ; COM1A1S, COM1A0S, COM1B1S, COM1B0S, COM1D1, COM1D0, FOC1D, PWM1D (OC1D and /OC1D, PWM1D enable)
out TCCR1C, A ;
ldi A, 0b00000001 ; FPIE1, FPEN1, FPNC1, FPES1, FPAC1, FPF1, WGM11, WGM10 (Phase correct PWM)
out TCCR1D, A ;
ldi A, 0b01000100 ; Configure: (7-4) dead time H, (3-0) dead time L
out DT1, A ;
ldi A, 255 ; 250kHz, 8-bit
out OCR1C, A ;
ldi A, 30 ; Przkładowo
out OCR1D, A ;
