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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Atmega зависает при включении питания
LSerg
сообщение May 22 2010, 17:30
Сообщение #1


Участник
*

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



Имеется плата с Atmega 128. При включении питания зависает не постоянно.
Программа написана на winavr включен fuse WDTON. В main первая команда погасить светодиоды, затем wdt_enable(WDTO_2S);
После повторной подачи питания запуск происходит нормально. Состояние зависания определяю по тому, что светодиоды не гаснут.
Возможные варианты:
1. Так как при повторном запуске программа запускается нормально значит flash память не портится.
2. AVR не правильно выполняет команды в "стрессовых" ситуациях .....
3. Загадки WinAVR

Кварц внешний 14.7456

Уважаемые специалисты, помогите разобраться.
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение May 22 2010, 18:31
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(LSerg @ May 22 2010, 20:30) *
В main первая команда погасить светодиоды...

1) А почему Вы решили, что не выполняется эта команда?
Что, светодиоды больше не могут зажечься?

2) Попробуйте отключить fuse WDTON и не разрешать WDT.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
Leonmezon
сообщение May 22 2010, 18:42
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 191
Регистрация: 11-02-09
Из: Краснодар
Пользователь №: 44 686



Чтоб можно было подсказать: Привидите текст программы (можно только начало: интересуют установки портов и основных регистров).
Можно еще прогнать в симуляторе (и посмотреть что происходит с регистрами).
Go to the top of the page
 
+Quote Post
LSerg
сообщение May 22 2010, 19:29
Сообщение #4


Участник
*

Группа: Участник
Сообщений: 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
Причина редактирования: Оформление цитаты исходника.
Go to the top of the page
 
+Quote Post
V_G
сообщение May 23 2010, 01:38
Сообщение #5


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

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



А фьюзы выставили для ВЧ кварца? Забыл точно наименование, но там один фьюз, отвечающий за выдачу либо полноразмерного сигнала на выход генератора, но более высокое потребление, либо за пониженное потребление и пониженную амплитуду сигнала кварцевого генератора. Во втором случае некоторые атмеги могут работать с кварцем выше 8 МГЦ, а могут и не работать. Потому для ВЧ кварцев Атмел рекомендует всегда включать этот фьюз на повышенное потребление.

А WDT зависание не провоцирует, а наоборот, убирает. Только тактирование проца должно при этом работать нормально.
Go to the top of the page
 
+Quote Post
LSerg
сообщение May 23 2010, 07:56
Сообщение #6


Участник
*

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



Fuse Full Amplitude установлен. На счет WDT как я понимаю тоже должен работать, но зависание происходит. Что больше всего в этом не нравится это зависание при включении и непостоянно. Вроде как AVR не правильно выполняет команды???
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 23 2010, 08:44
Сообщение #7


I WANT TO BELIEVE
******

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



А что там насчёт электромагнитной совместимости?
На плате стоят какие-нибудь релюшки? Что-то высоко мощное коммутируется? Может быть электродвигатель?
Что-то же сбивает процессор с толку.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
LSerg
сообщение May 23 2010, 08:49
Сообщение #8


Участник
*

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



Релюшки стоят, но срабатывают они уже после включения в процессе работы. И если сбивали бы, то по WDT должен идти перезапуск.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 23 2010, 09:04
Сообщение #9


I WANT TO BELIEVE
******

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



Ничего не бывает просто так smile.gif
Разводка питания как там у вас? Керамика стоит по питанию как положено?
Ну не известно как у вас сконфигурирован WDT. Может быть он там прерывание пытается выполнить вместо перезагрузки. А может быть наоборот: WDT непрерывно перезапускает проц...Хотя нет, диодики бы наверное мигали... В общем надо всё проверять.
А может быть кварц у вас так прилажен, что о надежном тактировании речи и быть не может. Никто ведь не знает что там и как у Вас..
Может быть начать тогда с внутреннего RC генератора?


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
LSerg
сообщение May 23 2010, 09:06
Сообщение #10


Участник
*

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



На счет прерывания по WDT в мега 128 по моему его нет?
По поводу генератора если с ним предположим проблема, хотя разводка в норме, то WDT тактируется от своего генератора и внешний тут не причем.

Сообщение отредактировал LSerg - May 23 2010, 09:10
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 23 2010, 12:49
Сообщение #11


I WANT TO BELIEVE
******

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



Да что вы так за WDT вцепились. это вообще крайний случай, когда уже всё повисло наглухо.
По хорошему - всё должно чётко работать и без него ))

Код
На счет прерывания по WDT в мега 128 по моему его нет?
Не знаю. Надо смотреть в даташит. Я не общался пока со 128ой мегой так близко. Но уже лежит на очереди )))

Всёже я бы начал с внутреннего RC генератора.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post
=AK=
сообщение May 23 2010, 12:57
Сообщение #12


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(LSerg @ May 23 2010, 03:00) *
При включении питания зависает не постоянно.
После повторной подачи питания запуск происходит нормально.


А Brow-Out Detector используете?
Go to the top of the page
 
+Quote Post
V_G
сообщение May 23 2010, 13:00
Сообщение #13


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

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



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


Участник
*

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



Цитата
2. Непонятно, почему в программе НЕ инициализируются DDRE, DDRG, PORTC, PORTF. Надеемся на исходное состояние при подаче питания и сбросе?
Операторы "|=", "&=" портов не инициализируют


Не совсем понял вопрос на счет операторов, если | - наложить 1, & - 0 . DDRC к которым подключены светодиоды настроен на выход.

WDTON если включен то отключить нельзя по даташиту.
BOD включен на 4В.

В общем интересует не сталкивались ли с подобной ситуацией?
Сам понимаю что чудес не бывает. Буду более детально проверять питание, если оно меньше 4В, то может висеть по BOR.
Спасибо всем откликнувшимся.
Go to the top of the page
 
+Quote Post
sigmaN
сообщение May 23 2010, 15:03
Сообщение #15


I WANT TO BELIEVE
******

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



Цитата
Не совсем понял вопрос на счет операторов
ну на самом деле имеется ввиду, что первая запись в регистры предпочтительно должна быть именно записью( оператор = ) а не модификацией (read-modify-write). Результат наложения маски ведь зависит от того, что было в регистре до этого. К тому же экономим две инструкции smile.gif

Но лично моё мнение: если в даташите написано, что после reset там будет ноль - он там и будет. Так что ничего особо криминального не вижу тут.


--------------------
The truth is out there...
Go to the top of the page
 
+Quote Post

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

 


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


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