attiny, timer0, výstup na OC0B

Wiring, C++, C, Java, ...
Pravidla fóra
Toto subfórum slouží k řešení obecných otázek kolem programování (konstrukce, knihovny, alokace paměti, ...)
Odpovědět
jmart
Příspěvky: 1
Registrován: 19 led 2018, 17:29
Reputation: 0

attiny, timer0, výstup na OC0B

Příspěvek od jmart » 19 led 2018, 18:06

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;

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 51 hostů