Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.07.2012, 09:49
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,829
Сказал спасибо: 741
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
RS-триггер с памятью на МК
Всем здравствуйте. Потребовалось сделать RS триггер с запоминанием состояния при отключении питания, сделал на МК тини13. На столе все работает четко, но в полевых условиях обнаружился баг. Если предыдущее состояние было - 0(сброшено) , то при сбоях питания возможно самопроизвольное переключение в состояние 1(установлено). Наоборот если было состояние 1 , то переключение в ноль не происходит , как ни дергай питание. Как добиться четкого запоминания ? Схема и линк ниже.
По схеме- резистор на светодиоде есть, подтягивающие резисторы в МК включены, пробовал ставить внешние - результат тот же. Керамика на МК и источнике есть.
Код:
|
#asm("cli")
PORTB.3 = 0; // изначально выход сброшен
for(i=0;i‹50;i++) // начальная задержка
{
delay_ms(1);
PORTB.0=!PORTB.0; // часто моргаем светодиодом
#asm("wdr");
}
buffer = readEEPROM(Adr); // Читаем в буфер предыдущее значение выхода
PORTB.3 = buffer; // выход
#asm("sei")
#asm("wdr")
TCCR0A=0x40;
TCCR0B=0x05; // запустим таймер для моргания светиком
while (PINB.4) // пока есть питание, (на входе PINB.4 единица)
{
if (PINB.1 ==0) PORTB.3 = 0; // сброшен
if (PINB.2 ==0) PORTB.3 = 1; // установлен
#asm("wdr");
if (PORTB.3 ==buffer) // если значение изменилось
{
flag1=0;
}
else
{
flag1=1; // выставим флаг
} ;
}
// питание пропало, выход из программы
#asm ("cli")
#asm("wdr")
PORTB.0=1; // светодиод потушен
TCCR0A=0x00; // таймер стоп
TCCR0B=0x00;
if(flag1); // если значение изменилось
{ writeEEPROM(Adr,PORTB.3); // запишем
#asm("wdr")
while (EECR.1 != 0); // ждем готовности ЕЕПРПОМ
EEAR = 0;
#asm("wdr")
}
while(1);
// сваливаемся в бесконечный цикл.
// пока не снимется питание или не перезапустится МК от собаки
} |
‹/lj-cut›
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 16.07.2012 в 15:51.
|
|
|
|
16.07.2012, 09:57
|
|
Гуру портала
Регистрация: 27.10.2008
Адрес: ЕС
Сообщений: 10,835
Сказал спасибо: 919
Сказали Спасибо 4,308 раз(а) в 2,573 сообщении(ях)
|
Re: RS-триггер с памятью на МК
Вы не забыли, что EEPROM не бессмертный? Это так, дополняя общую картину.
С конденсатором тоже не все так просто. А что будет, если питание пропало и появилось? А конденсатор не успел разрядится.
|
|
|
Эти 3 пользователя(ей) сказали Спасибо Easyrider83 за это сообщение:
|
|
|
16.07.2012, 10:06
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,829
Сказал спасибо: 741
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: RS-триггер с памятью на МК
Сообщение от Easyrider83
|
Вы не забыли, что EEPROM не бессмертный? Это так, дополняя общую картину.
С конденсатором тоже не все так просто. А что будет, если питание пропало и появилось? А конденсатор не успел разрядится.
|
Помню, для тестов 10000 циклов хватит, потом сделаю перебор адресов.
Если питание просто кратковременно пропало , то программа уходит в бесконечный цикл и сбрасывается сторожевым таймером. Проблем с зависанием МК нет, как ни дергай питание проверяли по всякому. Именно проблема с самопроизвольным переключением в 1. Хотя разница опять же только в питании на столе у меня лабораторный источник , а в поле простой импульсный. Навешивание емкостей на источник не помогает.
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
16.07.2012, 10:08
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 6,868
Сказал спасибо: 2,950
Сказали Спасибо 3,138 раз(а) в 2,127 сообщении(ях)
|
Re: RS-триггер с памятью на МК
1. Контроль питания включен?
2. Светодиод без резистора.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
16.07.2012, 10:27
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,829
Сказал спасибо: 741
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: RS-триггер с памятью на МК
1 нет, , включать на 4,3 нет смысла т.к диод по питанию уже съест 0,7В. Получается следующее значение 2,7в, есть сомнения , что корректно пройдет запись, до того как BOD сработает.
Тут надо попробовать, просто я где-то читал, что не рекомендуется включать BOD при работе с еепром.
2 резистора нет т.к это симуляция, на самом деле он есть. в остальном схема совпадает.
__________________
Да здравствует Разум,да сгинет Маразм!
Последний раз редактировалось E_C_C; 16.07.2012 в 10:30.
|
|
|
|
16.07.2012, 10:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,528
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
|
Re: RS-триггер с памятью на МК
А что, ноги просто в воздухе висят? Те, на которых кнопки? Подтяжка внутренняя?
Я в АВР - как свинья в апельсинах. Может быть подтяжка слишком высокоомная? Я б 10к поставил, не больше. И емкость на землю.
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
|
|
|
|
16.07.2012, 11:10
|
|
Почётный гражданин KAZUS.RU
Регистрация: 08.05.2008
Адрес: регион 63
Сообщений: 1,829
Сказал спасибо: 741
Сказали Спасибо 683 раз(а) в 386 сообщении(ях)
|
Re: RS-триггер с памятью на МК
Сообщение от DK
|
И емкость на землю.
|
подтяжка внутренняя , но я пробовал и с внешней 1Ком.Отделить бы мух от котлет , кто виноват ложно срабатывает кнопка или некорректно считывается память. Самое главное на столе от ЛБП таких глюков нет, эксперименты надо производить на месте, а там условий нет . Попробую притащить всю ту требуху к себе собрать может что и проясниться.
__________________
Да здравствует Разум,да сгинет Маразм!
|
|
|
|
16.07.2012, 11:31
|
|
Прописка
Регистрация: 02.08.2010
Сообщений: 133
Сказал спасибо: 9
Сказали Спасибо 65 раз(а) в 50 сообщении(ях)
|
Re: RS-триггер с памятью на МК
В рекомендациях от Атмела нельзя писать в 00 ячейку - она сама себя при сбоях питания портит (так как адресный регистр самообнуляется).
Не нравится мне идея запоминать сосотяние во внутренней епром (особенно на 2313). "Протирается" она. Дублировать запись в нескольких ячейках и т.д. + алгоритм самопроверки при включении + алгоритм "наименьших потерь" при непрохождении проверки + внешний супервизор питания - сильно большая война изза RS тригера.
Встречный вопрос, а на кмоп-е с батарейкой (аккумулятором) сгородить не получится. Два диода для переключения на резерв- питание.
|
|
|
Эти 2 пользователя(ей) сказали Спасибо kratmel за это сообщение:
|
|
|
16.07.2012, 11:33
|
|
Заблокирован
Регистрация: 31.12.2011
Сообщений: 726
Сказал спасибо: 32
Сказали Спасибо 223 раз(а) в 162 сообщении(ях)
|
Re: RS-триггер с памятью на МК
R1 не к выходу КРЕН, а к входу... и последовательно стабилитрон...
Тогда хватит времени и "дребезг" отработать...
Светодиод при фиксации спада питающего напряжения выключать... для снижения потребления...
Попробуйте "троировать" запись в EEPROM... это поможет локализовать причину сбоя...
|
|
|
Эти 2 пользователя(ей) сказали Спасибо st__1 за это сообщение:
|
|
|
16.07.2012, 11:50
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: RS-триггер с памятью на МК
Сообщение от kratmel
|
Встречный вопрос, а на кмоп-е с батарейкой (аккумулятором) сгородить не получится.
|
С батарейкой и сам проц в своем ОЗУ удержит. Потребление меньше микроампера
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:20.
|
|