Skocz do zawartości

[C] [C][ATMEGA168][COUNTER2] PWM


Pomocna odpowiedź

Napisano

Witam. Chce w Atmedze168 uruchomić PWM na pinie PD3 - jest to wyjście OC2B timera2.

#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h> 

int main(){

DDRB |= _BV(PD3);
TCCR2A |= 0b00110001;
TCCR2B |= 0b00001111;
OCR2B = 100;
TIMSK2 |= 0b00000100;

for(;;){
_delay_ms(100);
}
}

Kompiluje, wgrywam, zero trudności.

Potem sprawdzam i na oscyloskopie nic. na wyjściu PD3 cały czas stan niski.

O czymś zapomniałem ?

[ Dodano: 08-06-2012, 17:12 ]

błąd jest w

DDRB |= _BV(PD3);

to poprawiłem uzyskując taką wersje programu:

int main(){

sei();
DDRD|= _BV(PD3);
_delay_ms(2);
TCCR2A |= 0b10110011;
_delay_ms(2);
TCCR2B |= 0b00001111;
_delay_ms(2);
OCR2B = 0b10000001;
_delay_ms(2);
OCR2A = 0b10001001;
_delay_ms(2);
TIMSK2 |= 0b00000100;
_delay_ms(2);

i teraz jak usunąć albo OCR2A albo OCR2B to przestaje działać 😉 pokręcone...

tak jakby bity w tych rejestrach były w innej kolejności niż w datasheetcie

dodano:

Już wiem - te śmieszne błędy wynikają ze złego ustawienia bitu WMG22.

Teraz wszystko śmiga jak chcę. Dziękuje za pomoc, temat do kosza. Wszystkie te przygody przez jedną głupią litere ;/

dodano(01:02 09.06.2012):

Niedawno robiłem na pracowni wzmacniacze całkujące i nie widziałem zastosowań w nabliższym czasie, teraz widze, że to cholernie przydatne układy 😉 zrobiłem na takim wzmacniaczu i sygnale pwm przetwornik C/A 😉

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...