Таймер на mege8 и 48

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт сен 03, 2009 16:42:39

Сообщение WorkPage »

делаю часы реального времени. мк работает от внутреннего гены. На ногах внешней гены вист часовой кварц. Считаю его 2-ым таймером с делителем 1024. Для меги8 рабочий код:

в основной программе:
ASSR|=(1<<AS2); // Тактировать T2 от асинхронного генератора таймера
// Тактировать частотой 32768/1024=32 Гц, режим сброса по совпадению.
TCCR2|=(1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM21);
OCR2=(31); // (для 32 тактов OCR0=31!), совпадения с частотой 1 Гц.
TIMSK|=(1<<OCIE2); // Разрешить прерывание по совпадению Т2.
sei();

прерывание:
SIGNAL(SIG_OUTPUT_COMPARE2)
{
//здесь тикает 1 сек
if (sec==59)
{
sec=0;
if (min==59)
{
min=0;
if (hour==23) hour=0; else hour++;
}
else
min++;
}
else
sec++;
}

-----------------------------------------------------------------------
здесь вопросов нет. Всё работает.
С 48 мегой проблема

ASSR|=(1<<AS2); // Тактировать T2 от асинхронного генератора таймера
// Тактировать частотой 32768/1024=32 Гц, режим сброса по совпадению.
TCCR2A|=(1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM21);
OCR2A=(31); // (для 32 тактов OCR0=31!), совпадения с частотой 1 Гц.
TIMSK2|=(1<<OCIE2A); // Разрешить прерывание по совпадению Т2.
sei();

прерывание:
SIGNAL(SIG_OUTPUT_COMPARE2A)
{
//здесь тикает 1 сек
if (sec==59)
{
sec=0;
if (min==59)
{
min=0;
if (hour==23) hour=0; else hour++;
}
else
min++;
}
else
sec++;
}

НЕ ПАШЕТ
Генерацию осцилом проверил. Всё. Дальше идеи закончились.
p.s. пишу в WINAVR
Реклама
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт сен 03, 2009 16:42:39

Сообщение WorkPage »

Заработал такой вариант:
ASSR|=(1<<AS2); // Тактировать T2 от асинхронного генератора таймера
// Тактировать частотой 32768/1024=32 Гц, режим сброса по совпадению.
TCCR2A|=(1<<COM2B0)|(1<<WGM21); //включение режима СТС
TCCR2B|=(1<<CS20)|(1<<CS21)|(1<<CS22)|(1<<WGM22); //включение режима СТС; деление гены на 1024
OCR2A=(31); // (для 32 тактов OCR0=31!), совпадения с частотой 1 Гц.
TIMSK2|=(1<<OCIE2A); // Разрешить прерывание по совпадению Т2.

Проверьте, всё правильно?
Реклама
Открыл глаза
Сообщения: 65
Зарегистрирован: Чт сен 03, 2009 16:42:39

Сообщение WorkPage »

Почему-то с меткой А нивкакую работать не хочет.
Закрыто

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