Witam, w ATtiny26 mam problem z właściwą inicjalizacją Timer/Counter1, tak aby na wyprowadzeniu PB3 (OC1B) pojawiła się fala prostokątna o zadanej programowo częstotliwości.
Zaprogramowałem procka takim kodem:
...
ldi R16,0x80
rcall TC1Init
...
;* ;TIMER/COUNTER 1 init *
TC1Init:
push R16
sbi DDRB,3
cbi PORTB,3 ;na wszelki wypadek
ldi R16,(1<<CS10)|(1<<CS11)|(1<<CS12)|(1<<CS13)|(1<<CTC1) ; Timer clock = system clock / 16384 & CTC mode ON
out TCCR1B,R16
ldi R16,1<<COM1B0 ; toggle output line OC1B
out TCCR1A,R16
pop R16
out OCR1B,R16 ; value of generating freq
ret
Kod ten powoduje ustawienie na PB3 jedynki logicznej i na tym koniec...
zero fali prostokątnej (oglądałem oscyloskopem), obojętnie zresztą jak jest ustawiony prescaller CS10-CS13 oraz jaką wartością ładuję OCR1B.
Pomocy, co robię nie tak ?
Zaprogramowałem procka takim kodem:
...
ldi R16,0x80
rcall TC1Init
...
;* ;TIMER/COUNTER 1 init *
TC1Init:
push R16
sbi DDRB,3
cbi PORTB,3 ;na wszelki wypadek
ldi R16,(1<<CS10)|(1<<CS11)|(1<<CS12)|(1<<CS13)|(1<<CTC1) ; Timer clock = system clock / 16384 & CTC mode ON
out TCCR1B,R16
ldi R16,1<<COM1B0 ; toggle output line OC1B
out TCCR1A,R16
pop R16
out OCR1B,R16 ; value of generating freq
ret
Kod ten powoduje ustawienie na PB3 jedynki logicznej i na tym koniec...
zero fali prostokątnej (oglądałem oscyloskopem), obojętnie zresztą jak jest ustawiony prescaller CS10-CS13 oraz jaką wartością ładuję OCR1B.
Pomocy, co robię nie tak ?
