|
Atmega зависает при включении питания |
|
|
|
May 22 2010, 17:30
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 1-06-08
Пользователь №: 37 967

|
Имеется плата с Atmega 128. При включении питания зависает не постоянно. Программа написана на winavr включен fuse WDTON. В main первая команда погасить светодиоды, затем wdt_enable(WDTO_2S); После повторной подачи питания запуск происходит нормально. Состояние зависания определяю по тому, что светодиоды не гаснут. Возможные варианты: 1. Так как при повторном запуске программа запускается нормально значит flash память не портится. 2. AVR не правильно выполняет команды в "стрессовых" ситуациях ..... 3. Загадки WinAVR
Кварц внешний 14.7456
Уважаемые специалисты, помогите разобраться.
|
|
|
|
|
May 22 2010, 18:31
|
Гуру
     
Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823

|
Цитата(LSerg @ May 22 2010, 20:30)  В main первая команда погасить светодиоды... 1) А почему Вы решили, что не выполняется эта команда? Что, светодиоды больше не могут зажечься? 2) Попробуйте отключить fuse WDTON и не разрешать WDT.
--------------------
Уходя, оставьте свет...
|
|
|
|
|
May 22 2010, 19:29
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 1-06-08
Пользователь №: 37 967

|
Код #define SV_1_OFF PORTC |=(1<<PC0) #define SV_2_OFF PORTC|=(1<<PC1) #define SV_3_OFF PORTC |=(1<<PC2) #define SV_4_OFF PORTC|=(1<<PC3) #define SV_5_OFF PORTC|=(1<<PC4)
void Init_Port(void) { DDRC = 0xFF; //Настроить выводы на выход светодиоды DDRF = 0xF0; //Настроить выводы на вход "Кнопки" DDRB = 0xC8; DDRG |= 0x07; DDRE |= 0x02; //Выводы прерываний настроены на вход PORTF &= 0x0F;
SV_1_OFF; SV_2_OFF; SV_3_OFF; SV_4_OFF; SV_5_OFF; } int main(void) { unsigned char LCD_Menu=0, Cikl_Menu = 0, Flag_1sec=0, Time_Test_Ust = 0; volatile unsigned char Seconds_OLD = 0; wdt_enable(WDTO_2S); _delay_ms(30); // Задержка на переходные процессы Init_Port(); ..... } Светодиоды подключены через резистор на +5В. В программе они при наступлении аварии зажигаются индицируя номер события. И поэтому светится все вместе одновременно не могут, кроме включения. На счет очередности команд в вопросе я ошибся. В программе они идут на оборот. Отключить WDT можно, но зависание проявляется не часто примерно 1 в 30 включений. Может в этом и есть смысл, но пока непонятен. И отключать не хочется требуется постоянная работа устройства и перезапуск возможен.
Сообщение отредактировал LSerg - May 22 2010, 20:29
Причина редактирования: Оформление цитаты исходника.
|
|
|
|
|
May 23 2010, 07:56
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 1-06-08
Пользователь №: 37 967

|
Fuse Full Amplitude установлен. На счет WDT как я понимаю тоже должен работать, но зависание происходит. Что больше всего в этом не нравится это зависание при включении и непостоянно. Вроде как AVR не правильно выполняет команды???
|
|
|
|
|
May 23 2010, 08:49
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 1-06-08
Пользователь №: 37 967

|
Релюшки стоят, но срабатывают они уже после включения в процессе работы. И если сбивали бы, то по WDT должен идти перезапуск.
|
|
|
|
|
May 23 2010, 09:04
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Ничего не бывает просто так  Разводка питания как там у вас? Керамика стоит по питанию как положено? Ну не известно как у вас сконфигурирован WDT. Может быть он там прерывание пытается выполнить вместо перезагрузки. А может быть наоборот: WDT непрерывно перезапускает проц...Хотя нет, диодики бы наверное мигали... В общем надо всё проверять. А может быть кварц у вас так прилажен, что о надежном тактировании речи и быть не может. Никто ведь не знает что там и как у Вас.. Может быть начать тогда с внутреннего RC генератора?
--------------------
The truth is out there...
|
|
|
|
|
May 23 2010, 09:06
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 1-06-08
Пользователь №: 37 967

|
На счет прерывания по WDT в мега 128 по моему его нет? По поводу генератора если с ним предположим проблема, хотя разводка в норме, то WDT тактируется от своего генератора и внешний тут не причем.
Сообщение отредактировал LSerg - May 23 2010, 09:10
|
|
|
|
|
May 23 2010, 12:49
|

I WANT TO BELIEVE
     
Группа: Свой
Сообщений: 2 617
Регистрация: 9-03-08
Пользователь №: 35 751

|
Да что вы так за WDT вцепились. это вообще крайний случай, когда уже всё повисло наглухо. По хорошему - всё должно чётко работать и без него )) Код На счет прерывания по WDT в мега 128 по моему его нет? Не знаю. Надо смотреть в даташит. Я не общался пока со 128ой мегой так близко. Но уже лежит на очереди ))) Всёже я бы начал с внутреннего RC генератора.
--------------------
The truth is out there...
|
|
|
|
|
May 23 2010, 13:00
|

Профессионал
    
Группа: Свой
Сообщений: 1 818
Регистрация: 15-10-09
Из: Владивосток
Пользователь №: 52 955

|
1. Стоит попробовать все-таки внутреннее тактирование 2. Непонятно, почему в программе НЕ инициализируются DDRE, DDRG, PORTC, PORTF. Надеемся на исходное состояние при подаче питания и сбросе? Операторы "|=", "&=" портов не инициализируют А вообще, т.к. полный текст программы не приведен, скорее зависает не проц, а программа. Проц - только если не выполнены требования к монтажу и разводке (блокировки, расположение земли и толщина трасс...)
|
|
|
|
|
May 23 2010, 14:39
|
Участник

Группа: Участник
Сообщений: 41
Регистрация: 1-06-08
Пользователь №: 37 967

|
Цитата 2. Непонятно, почему в программе НЕ инициализируются DDRE, DDRG, PORTC, PORTF. Надеемся на исходное состояние при подаче питания и сбросе? Операторы "|=", "&=" портов не инициализируют Не совсем понял вопрос на счет операторов, если | - наложить 1, & - 0 . DDRC к которым подключены светодиоды настроен на выход. WDTON если включен то отключить нельзя по даташиту. BOD включен на 4В. В общем интересует не сталкивались ли с подобной ситуацией? Сам понимаю что чудес не бывает. Буду более детально проверять питание, если оно меньше 4В, то может висеть по BOR. Спасибо всем откликнувшимся.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|