Страница 1 из 1

МК Atmega не забывает значения??

Добавлено: Вс июн 26, 2011 18:52:59
Alerr
Здравствуйте. Господа, выявилась одна странность. У меня мк атмега 16,(собрал часы-таймер). Для операций использовал переменные типа инт. Почему после снятия питания с контроллера, а затем подачи на него питания значения переменных не обнуляются?????? Но при подаче питания на ресет все обнуляется??

Re: МК Atmega не забывает значения??

Добавлено: Вс июн 26, 2011 19:59:54
DiGiCat
Контроллеры тут, сюда не все по таким вопросам ходят... тему там запостил бы...
Схемы нет, программа какая там непонятно... где, во флеш или еепром?

Re: МК Atmega не забывает значения??

Добавлено: Вс июн 26, 2011 20:07:11
Alerr
Программирую флешь.

Re: МК Atmega не забывает значения??

Добавлено: Ср июн 29, 2011 20:26:26
YS
Конденсаторы по питанию большие есть?

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 11:36:04
Fasterpast
Мож паразитное откуда приходит?

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 11:38:16
krolaka
да было у меня мк не отключался работал через комовский програматор :))

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 13:32:23
Alerr
Нет конденсаторов, отрубаю шнур питания(питание=0) но какого ч-а значение одной из переменных не обнуляется???(пробовал менять имя переменной-не вариант)

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 13:33:09
Alerr
krolaka, а как вы решили проблему????

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 13:40:01
Финский
Инициализация памяти
Мало кто подозревает о том, что при включении в оперативке далеко не всегда все байты равны 0xFF. Они могут, но не обязаны. Равно как и регистры РОН не всегда равны нулю при запуске. Обычно да, все обнулено, но я несколько раз сталкивался со случаями когда после перезапуска и/или включения-выключения питания, микроконтроллер начинал творить не пойми что. Особнно часто возникает когда питание выключаешь, а потом, спустя некоторое время, пара минут, не больше, включаешь. А всему виной остаточные значения в регистрах.

Итак, возьмите себе за правило после каждого включения, в разделе инициализации, еще даже до инициализации стека, делать зануление памяти и очистку всех регистров.
AVR. Учебный курс. Стартовая инициализация

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 13:44:01
Alerr
:)))))))))))))))))))))))))))))))))))))))))))) не так всё просто. Обнулял всё.... Но сброс происходит только при перепрошивке или при ресете

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 13:45:02
Alerr
4894 есть еще советы?

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 13:47:49
Alerr
Такое подозрение, что прога запускается не сначала, а с цикла while. Что за фигня..

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 14:06:10
krolaka
увеличил сопротивление резисторов от програматора :) вроде по 680 Ом поставил даже на ресет :) а щас вообще проблем нету пользуюсь ucGoZilla :)

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 14:20:48
O-LED
Но сброс происходит только при перепрошивке или при ресете
вот и ответ, при выключении/включении питания МК у вас не перезапускается. ищите причину - большие кондеры, паразитное питание, и т.д.
Ради эксперимента замкните ноги питания контроллера секунд на 5-10, потом включите свое устройство и посмотрите на состояние переменных

Re: МК Atmega не забывает значения??

Добавлено: Чт июн 30, 2011 22:28:51
kondor
O-LED писал(а):
Но сброс происходит только при перепрошивке или при ресете
вот и ответ, при выключении/включении питания МК у вас не перезапускается. ищите причину - большие кондеры, паразитное питание, и т.д.
Ради эксперимента замкните ноги питания контроллера секунд на 5-10, потом включите свое устройство и посмотрите на состояние переменных
Имхо достаточно просто тестером поглядеть питание при "выключенном" состоянии.
Alerr писал(а):Здравствуйте. Господа, выявилась одна странность. У меня мк атмега 16,(собрал часы-таймер). Для операций использовал переменные типа инт. Почему после снятия питания с контроллера, а затем подачи на него питания значения переменных не обнуляются?????? Но при подаче питания на ресет все обнуляется??
Покажите кусок кода, где вы объявляете переменные.

Re: МК Atmega не забывает значения??

Добавлено: Пт июл 22, 2011 11:11:26
Alerr
Вот код, где я обьявляю все переменные:
#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 не забывает значения??

Добавлено: Пт июл 22, 2011 18:49:25
YS
Попробуйте дописать volatile. :idea:

Re: МК Atmega не забывает значения??

Добавлено: Сб июл 23, 2011 08:31:34
uk8amk
Помню в CVAVR был такой косяк, что если в одну строку инициализируется несколько разных переменных, то он их пропускал. Приходилось деклалировать каждую переменную по отдельности. Но я не в курсе, может сейчас уже починили этот косяк.

Re: МК Atmega не забывает значения??

Добавлено: Вс июл 24, 2011 11:31:24
BOB51
прсле сброса в регистрах и/или озу произвольные или предыдущие значения , чтобы получить заранее заданные - стандартная процедура очистки/установки в модуле инициализации, а он обычно выполняется только после системного сброса ( по крайней мере так в большинстве программ "по умолчанию" )
если имеет место неполное отключение "на ходу" (аппаратное или программное) необходимо предусмотреть программно-аппаратное решение "выхода из ступора"- как минимум сброс по wdt или схеме контроля напряжения питания, а более тонко - корректную программу составить.
если причина в прерываниях -
внимательно отследить историю прерываний и стек возврата, особенно, если возможно взаимное наложение вызовов, даже если другие прерывания запрещены.
наиболее корректен вариант подстановки в качестве адреса возврата 0х0000 с последующей командой reti
к сожалению, работаю только с ассемблером - по С -не консультант...