МК Atmega не забывает значения??
МК Atmega не забывает значения??
Здравствуйте. Господа, выявилась одна странность. У меня мк атмега 16,(собрал часы-таймер). Для операций использовал переменные типа инт. Почему после снятия питания с контроллера, а затем подачи на него питания значения переменных не обнуляются?????? Но при подаче питания на ресет все обнуляется??
Re: МК Atmega не забывает значения??
Контроллеры тут, сюда не все по таким вопросам ходят... тему там запостил бы...
Схемы нет, программа какая там непонятно... где, во флеш или еепром?
Схемы нет, программа какая там непонятно... где, во флеш или еепром?
scio me nihil scire...
_______________________
<= Жалобная кнопка в правом нижнем углу... )
_______________________
Re: МК Atmega не забывает значения??
Программирую флешь.
Re: МК Atmega не забывает значения??
Конденсаторы по питанию большие есть?
Разница между теорией и практикой на практике гораздо больше, чем в теории.
- Fasterpast
- Мучитель микросхем
- Сообщения: 493
- Зарегистрирован: Ср фев 14, 2007 12:07:58
- Откуда: Москва
- Контактная информация:
Re: МК Atmega не забывает значения??
Мож паразитное откуда приходит?
- krolaka
- Нашел транзистор. Понюхал.
- Сообщения: 169
- Зарегистрирован: Пн мар 02, 2009 12:23:37
- Контактная информация:
Re: МК Atmega не забывает значения??
да было у меня мк не отключался работал через комовский програматор 

Re: МК Atmega не забывает значения??
Нет конденсаторов, отрубаю шнур питания(питание=0) но какого ч-а значение одной из переменных не обнуляется???(пробовал менять имя переменной-не вариант)
Re: МК Atmega не забывает значения??
krolaka, а как вы решили проблему????
- Финский
- Открыл глаза
- Сообщения: 59
- Зарегистрирован: Сб авг 28, 2010 13:29:43
- Откуда: Докучаевск, Донецк
- Контактная информация:
Re: МК Atmega не забывает значения??
Инициализация памяти
Мало кто подозревает о том, что при включении в оперативке далеко не всегда все байты равны 0xFF. Они могут, но не обязаны. Равно как и регистры РОН не всегда равны нулю при запуске. Обычно да, все обнулено, но я несколько раз сталкивался со случаями когда после перезапуска и/или включения-выключения питания, микроконтроллер начинал творить не пойми что. Особнно часто возникает когда питание выключаешь, а потом, спустя некоторое время, пара минут, не больше, включаешь. А всему виной остаточные значения в регистрах.
Итак, возьмите себе за правило после каждого включения, в разделе инициализации, еще даже до инициализации стека, делать зануление памяти и очистку всех регистров.
AVR. Учебный курс. Стартовая инициализация
[color=#800000]Техноманьяк и IT-шаман. Танцы с бубном на дому.[/color]
Re: МК Atmega не забывает значения??
Re: МК Atmega не забывает значения??
4894 есть еще советы?
Re: МК Atmega не забывает значения??
Такое подозрение, что прога запускается не сначала, а с цикла while. Что за фигня..
- krolaka
- Нашел транзистор. Понюхал.
- Сообщения: 169
- Зарегистрирован: Пн мар 02, 2009 12:23:37
- Контактная информация:
Re: МК Atmega не забывает значения??
увеличил сопротивление резисторов от програматора
вроде по 680 Ом поставил даже на ресет
а щас вообще проблем нету пользуюсь ucGoZilla 

Re: МК Atmega не забывает значения??
вот и ответ, при выключении/включении питания МК у вас не перезапускается. ищите причину - большие кондеры, паразитное питание, и т.д.Но сброс происходит только при перепрошивке или при ресете
Ради эксперимента замкните ноги питания контроллера секунд на 5-10, потом включите свое устройство и посмотрите на состояние переменных
KIT
Re: МК Atmega не забывает значения??
O-LED писал(а):вот и ответ, при выключении/включении питания МК у вас не перезапускается. ищите причину - большие кондеры, паразитное питание, и т.д.Но сброс происходит только при перепрошивке или при ресете
Ради эксперимента замкните ноги питания контроллера секунд на 5-10, потом включите свое устройство и посмотрите на состояние переменных
Имхо достаточно просто тестером поглядеть питание при "выключенном" состоянии.
Alerr писал(а):Здравствуйте. Господа, выявилась одна странность. У меня мк атмега 16,(собрал часы-таймер). Для операций использовал переменные типа инт. Почему после снятия питания с контроллера, а затем подачи на него питания значения переменных не обнуляются?????? Но при подаче питания на ресет все обнуляется??
Покажите кусок кода, где вы объявляете переменные.
Re: МК Atmega не забывает значения??
Вот код, где я обьявляю все переменные:
#include <mega16.h>
#include <delay.h>
int flag, i, mig;
int domin,dohour, min=0, hour=0, ch, mi, fun=0, data, lok;
int a[10]={136, 190, 196, 148, 178, 145, 129, 188, 128, 144}, b[4]={1, 2, 4, 8};
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Declare your global variables here
unsigned char h,m,s;
void main()
{
fun=0- то, что не зануляется при отключения атмели от программатора.
Конденсаторов и доп. источников питания нет.
#include <mega16.h>
#include <delay.h>
int flag, i, mig;
int domin,dohour, min=0, hour=0, ch, mi, fun=0, data, lok;
int a[10]={136, 190, 196, 148, 178, 145, 129, 188, 128, 144}, b[4]={1, 2, 4, 8};
// I2C Bus functions
#asm
.equ __i2c_port=0x15 ;PORTC
.equ __sda_bit=1
.equ __scl_bit=0
#endasm
#include <i2c.h>
// DS1307 Real Time Clock functions
#include <ds1307.h>
// Declare your global variables here
unsigned char h,m,s;
void main()
{
fun=0- то, что не зануляется при отключения атмели от программатора.
Конденсаторов и доп. источников питания нет.
Re: МК Atmega не забывает значения??
Попробуйте дописать volatile. 
Разница между теорией и практикой на практике гораздо больше, чем в теории.
-
uk8amk
- Поставщик валерьянки для Кота
- Сообщения: 2222
- Зарегистрирован: Вт ноя 27, 2007 11:32:06
- Откуда: Tashkent
Re: МК Atmega не забывает значения??
Помню в CVAVR был такой косяк, что если в одну строку инициализируется несколько разных переменных, то он их пропускал. Приходилось деклалировать каждую переменную по отдельности. Но я не в курсе, может сейчас уже починили этот косяк.
Re: МК Atmega не забывает значения??
прсле сброса в регистрах и/или озу произвольные или предыдущие значения , чтобы получить заранее заданные - стандартная процедура очистки/установки в модуле инициализации, а он обычно выполняется только после системного сброса ( по крайней мере так в большинстве программ "по умолчанию" )
если имеет место неполное отключение "на ходу" (аппаратное или программное) необходимо предусмотреть программно-аппаратное решение "выхода из ступора"- как минимум сброс по wdt или схеме контроля напряжения питания, а более тонко - корректную программу составить.
если причина в прерываниях -
внимательно отследить историю прерываний и стек возврата, особенно, если возможно взаимное наложение вызовов, даже если другие прерывания запрещены.
наиболее корректен вариант подстановки в качестве адреса возврата 0х0000 с последующей командой reti
к сожалению, работаю только с ассемблером - по С -не консультант...
если имеет место неполное отключение "на ходу" (аппаратное или программное) необходимо предусмотреть программно-аппаратное решение "выхода из ступора"- как минимум сброс по wdt или схеме контроля напряжения питания, а более тонко - корректную программу составить.
если причина в прерываниях -
внимательно отследить историю прерываний и стек возврата, особенно, если возможно взаимное наложение вызовов, даже если другие прерывания запрещены.
наиболее корректен вариант подстановки в качестве адреса возврата 0х0000 с последующей командой reti
к сожалению, работаю только с ассемблером - по С -не консультант...