реклама на сайте
подробности

 
 
> Снова о таймере 2 в ATmega324P, 32.768 kHz странные проблемы
ivainc1789
сообщение Jul 19 2010, 15:03
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 175
Регистрация: 5-01-05
Пользователь №: 1 807



Несколько месяцев назад я поставил Заказчику 5 устройств с батарейным питанием, построенных на ATmega324P. На таймере 2, работающем асинхронно реализованы часы. Сегодня вернули одно устройство с диагнозом - не работает. Разбор полетов показал, что по необъяснимым причинам таймер 2 перестал генерить. Т.е. два месяца устройство (и конкретно часы) работало нормально, но в один прекрасный день перестало. Функционально в программе необходимо было сделать, что если часы не работают, то это фатальный отказ.
Итак, я начал пытаться "оживлять" таймер 2. Пломбы на устройстве повреждены не были, вмешательство извне исключаю полностью. Осмотр платы в области часового кварца ничего не показал - чистая плата, какой и была изначально. Подумал, что программно имеем некую "хитрожопую" ошибку. После многочасовых экспериментов с софтом, решил вообще написать простейшую тестовую программу:
Код
__C_task void main(void){
  SETUP(LED1,OUT1);SETUP(LED2,OUT1);// светодиоды включить
  Delay(1000*ms);
  SETUP(LED1,OUT0);SETUP(LED2,OUT0);// светодиоды отключить
  // таймер2
  ASSR   = BIN(00100000);
  TCCR2A = BIN(00000000);
  TCCR2B = BIN(00000000);
  TCNT2 = 0;
  OCR2A = 32;     // индикатор секунды
  OCR2B = 4;      // индикатор 125ms
  TIMSK2 = BIN(00000001);
  TIFR2 =  BIN(00000111);
  //while(ASSR & 0x1F);// ожидать окончания инициализации
  // главный цикл
  __enable_interrupt();
  TCCR2B |= 0x01; // старт таймера2, предделитель 1024 (0x07)
  SETPORT(LED1);  // включить светодиод
  while(1);
}

// тест работы таймера
#pragma vector = TIMER2_OVF_vect
__interrupt void TIMER2_OVF(void) {
  TGLPORT(LED2);// переключить светодиод
}


Тут есть несколько "лишних" строчек, но непринципиально. Суть, думаю, ясна. Включение первого светодиода свидетельствует о том, что таймер инициализирован и запущен главный цикл. Переключения второго светодиода говорят о том, что таймер 2 работает.
Макросы работы с портами не привожу, т. к. они тривиальны.
Касание выводов кварца приводит к хаотичному зажигаю/погасанию светодиода2. Но и только.
Попытался заменить ATmega324P - результат тот же - не работает. Пробовал все кварцы (часовые) что были под рукой с разной емкостью - без результатно. Если сбросить при отладке через JTAG бит AS2 заставляя синхронно тактироваться таймер от системного клока - все работает нормально...
Больше всего меня беспокоит тот факт, что устройство проработало довольно длительное время и отказало как-то ВДРУГ... Может кто что посоветует...
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
WHALE
сообщение Jul 23 2010, 15:00
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 902
Регистрация: 2-01-06
Из: Краснодар
Пользователь №: 12 768



pcb в студию


--------------------
"Hello, word!" - 17 errors 56 warnings
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 13:15
Рейтинг@Mail.ru


Страница сгенерированна за 0.01363 секунд с 7
ELECTRONIX ©2004-2016