Таймеры ATmega8

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
akulov
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн июн 06, 2011 13:18:00

Таймеры ATmega8

Сообщение akulov »

Начал я осваивать таймеры в 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:
Вложения
clock.rar
(22.63 КБ) 138 скачиваний
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6319
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Re: Таймеры ATmega8

Сообщение Jack_A »

akulov писал(а):И попутно вопрос, как сделать, что бы частота выводилась на порт периодически раз в секунду? Или, может, для этого и необязательно использовать отдельный таймер?
Конечно, не обязательно. Можно завести 2-байтовый счетчик и в обработчике таймера, генерирующего частоту, добавить вставочку ( описываю алгоритм, потому что на С для МК не пишу ) :
- инкрементировать счетчик
- если он меньше N1 - на выход
- разрешить вывод частоты
- если он меньше N2 - на выход
- обнулить счетчик, запретить вывод частоты
выход:

Здесь N2 = 1000000 мкс / интервал, на который настроен таймер
N1 < N2 - значение, при котором начнется выдача сигнала, определяет скважность. Чем ближе N2 к N1, тем короче выдача сигнала.
Реклама
akulov
Открыл глаза
Сообщения: 42
Зарегистрирован: Пн июн 06, 2011 13:18:00

Re: Таймеры ATmega8

Сообщение akulov »

Спасибо, буду пробовать!
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»