Zdravím,
mám digispark (což je destička s ATtiny85) a pokouším se pípat piezo pípákem. Chci se naučit využívat časovače a jejich výstup na pin. Vybral jsem časovač timer0 a nastavil prescaler na 1024.
Čítat se bude pouze směrem nahoru až do horní meze nastavené v OCR0A. Když během čítání dojde ke shodě s OCR0B, změní se stav pinu. Hodnota OCR0B není důležitá, ale musí platit OCR0A > OCR0B.
Tohle všechno mi funguje. Ale pouze pro výstupní pin PB0, což je OC0A. Toto chování se nastavuje pomocí COM0A1 a COM0A0.
Nicméně dle dokumentace bych měl ke stejnému chování přimět i pin PB1, tedy OC0B. A to prostě nefunguje a nepípá to. Nevíte, čím to je? Tady je úryvek kódu.
Díky!
sbi(DDRB, PB0);
sbi(DDRB, PB1);
/* Toggle OC0A (MOSI, PB0) on Compare Match */
cbi(TCCR0A, COM0A1);
sbi(TCCR0A, COM0A0);
/* Toggle OC0B (MISO, PB1) on Compare Match */
cbi(TCCR0A, COM0B1);
sbi(TCCR0A, COM0B0); /* Does not work!!! */
OCR0B = 1;
sbi(TCCR0B, CS02); /* PRE */
cbi(TCCR0B, CS01); /* SCA */
sbi(TCCR0B, CS00); /* LER */
cbi(TCCR0B, WGM02); /* CTC mode */
sbi(TCCR0A, WGM01);
cbi(TCCR0A, WGM00);
OCR0A = 10;
attiny, timer0, výstup na OC0B
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 44 hostů