Страница 1 из 2
Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 08:39:46
maxrule
добрый день, помогите разобраться. Есть отладочная плата для Atmega16A с разъемом SPI , светодиодами (+резисторы), кварц 16 МГц (с кондерами 22pF), 7805 с обвязкой и схема сброса - reset подтянут на питание резистором 10КОм, на землю идет кнопка в параллель с конденсатором (керамика, 0,1 мкФ). Плата шьется, запускается, вообщем все работает. На данный момент залита прошивка для мигания светодиодами, проблема вот в чем - включаю питание - светодиоды мигают, нажимаю кнопку для reset - мигание светодиодов пропадает (это и понятно - начинается перезагрузка), а вот потом - тишина, т. е. прошивка заново не стартует, запустить ее удается только перезагрузкой по питанию. Вопрос вот в чем, почему не стартует прошивка после внешнего сброса ?
P.S.
прошу сильно не пинать, т.к. новичек, спасибо.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 09:40:38
nirq
При сбросе состояние ОЗУ не изменяется, его надо инициализировать руками (если надо, а надо практически всегда).
После подачи питания ОЗУ принимает какое-то состояние - но какое именно, не оговаривается. То есть инициализировать надо явно и в любом случае.
Справедливо для не только ОЗУ, но и всего остального (читай "регистров с настройками для периферии").
Ещё лучше понять разницу между понятиями "сброс (ресет)" и "подача питания".
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 09:58:11
maxrule
ничего не понял..... можно попдробней
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 14:18:36
Jack_A
nirq писал(а):
Справедливо для не только ОЗУ, но и всего остального (читай "регистров с настройками для периферии").
По ДШ для регистров периферии существует вроде "значение по умолчанию", устанавливающееся при включении. Но побившись пару раз мордой об "один раз работает, другой раз нет", с тех пор обязательно инициализирую все используемые регистры. На умолчание надейся, но при рекламации спросят с тебя, а не с ребят из Сан-Хосе, штат Калифорния.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 14:33:10
Леонид Иванович
maxrule писал(а):прошивка заново не стартует
Покажите Ваш исходник.
Jack_A писал(а):По ДШ для регистров периферии существует вроде "значение по умолчанию", устанавливающееся при включении. Но побившись пару раз мордой об "один раз работает, другой раз нет", с тех пор обязательно инициализирую все используемые регистры.
Регистры периферии по сбросу (хоть power-up, хоть WDT) принимают эти значения по умолчанию. Инициализировать их нет никакой нужды. Никогда этим не занимаюсь. Если программа иногда не работает - искать нужно в другом месте. Например, неинициализированная переменная в ОЗУ.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 15:12:49
maxrule
Да исходник - проще некуда (я только учусь):
Код: Выделить всё
#include <avr/io.h>
#include <util/delay.h>
int main(void)
{
DDRB = 0xFF; //порт B на выход
PORTB = 0x00; //устанавливаем нули на выходе
while(1)
{
PORTB=0b00000001;
_delay_ms(500);
PORTB=0b00000000;
_delay_ms(500);
}
}
вроде никаких переменных не использую, а если и есть, то перед использованием инициализирую, единственное - через параметры компилятора передаю F_CPU=16000000UL.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 15:18:05
maxrule
а может дело в:
открываю на выход весь порт B, а светодиод подключаю через перемычку и резистор только к B0, остальные же порты "висят в воздухе" - без подтяжек и не использую ????????????????????????????????
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 16:11:05
Леонид Иванович
В тексте никаких проблем не видно. Порт можно так использовать, ничего, что висят в воздухе.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 16:20:01
maxrule
может саму плату посмотрите ? возможно кондеры кварца далеко от микросхемы поставил ?
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 16:45:02
Frogfot
может FUSE битами увеличить задержку завода контроллера после сброса - поставить 64К
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 16:49:25
maxrule
думал об этом выставил максимальную - 64mks (SKELS3-0: 1111, SUT0-1:11). Результата не дало
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 17:39:47
Frogfot
попробуй от внутреннего RC завести
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 22:12:32
mrFox
maxrule писал(а):возможно кондеры кварца далеко от микросхемы поставил ?
класический пример как делать не надо - землю от кондесаторов кварца надо вести напрямую к ножке МК и как можно короче
а на текущей макетке нужно отрезать землю кондесаторов кварца и проводом подпаять к земле у ножки МК
в общем следовало бы почитать про правила разводки плат
во вложении - исправленная плата
Re: Atmega16A и внешний сброс (reset)
Добавлено: Пн фев 03, 2014 23:09:59
Леонид Иванович
Frogfot писал(а):попробуй от внутреннего RC завести
Дельный совет, попробуйте от внутреннего RC. С внешним кварцем есть простор для ляпов, проводящий флюс, например.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Вт фев 04, 2014 00:47:56
maxrule
спасибо mrFox, за замечания - учту на будущее, но:
выпаял внешний кварц, выпаял его кондеры, перенастроил на работу внутреннего генератора (8 МГц) -все равно на reset не реагирует - так же не стартует прошивка. Стартует только если перезагружаешь по питанию....
Re: Atmega16A и внешний сброс (reset)
Добавлено: Вт фев 04, 2014 00:57:03
Леонид Иванович
Лишнего ничего не подключено, программатора, например? Что видите тестером на пине RESET после отпускания сброса?
Re: Atmega16A и внешний сброс (reset)
Добавлено: Вт фев 04, 2014 00:57:11
nirq
Вторая попытка: бабка рассказывала, что оне при плавном нарастании питания запускаются как-то... не того....
Что с питанием, конкретно? Если заменить на другое питание?
7805 с обвязкой
"Обвязка" громкий термин, а ещё есть "дропаут". На всякий случай.
Кофейная гуща. Очко переходит в зрительный зал.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Вт фев 04, 2014 01:10:52
maxrule
итак, при нормальной работе напряжение между RESET и GND - 4.98 В. При сбросе (нажатие на кнопку) - напряжение между RESET и GND плавно падает (примерно 0.7 секунда) до 0.01 В, после отпускания кнопки плавно (примерно 0.7 сек) нарастает до 4.98 в.
Обвязка L7805CV - кондер на входе (керамика) - 0,33 mkF, на выходе - та же карамика - 0,1 mkF.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Вт фев 04, 2014 01:21:11
maxrule
по поводу питания:
питание от блока (через 7805) и от программатора (от USB компа) - никакого результата, все то же самое.
Re: Atmega16A и внешний сброс (reset)
Добавлено: Вт фев 04, 2014 01:26:53
Леонид Иванович
maxrule писал(а):При сбросе (нажатие на кнопку) - напряжение между RESET и GND плавно падает (примерно 0.7 секунда)
Как такое может быть, кнопка же закорачивает RESET на землю?