Начал я осваивать таймеры в mega8 и столкнулся с проблемой.
Когда включаю все таймеры, таймер2 не хочет работать по совпадению, а только по переполнению. При
Код:
|
// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
TCCR0 = 0x03;
TCNT0 = 0x00;
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR1A
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x0B;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x61;
OCR1AL=0xA8;
OCR1BH=0x00;
OCR1BL=0x00;
// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: 125,000 kHz
// Mode: CTC top=OCR2
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x0C;
TCNT2=0x00;
OCR2=0x7C;
TIMSK=0x91;
ACSR=0x80; |
вообще не работает ни один таймер (выставил по визарду CVAVR), а при коде
Код:
|
ASSR=0x00;
TCCR2=0x04;
TCNT2=0x00;
OCR2=0x7C;
TIMSK=0x51; |
работает, но когда вывожу его в порт на динамик, звук нормальный только при определенном К деления, при остальных почему-то прерывистый. А мне надо получить на выходе частоту 1кГц.
Может, кто поможет решить эту проблему?
И попутно вопрос, как сделать, что бы частота выводилась на порт периодически раз в секунду? Или, может, для этого и необязательно использовать отдельный таймер?
Исходный код в CVAVR: