Atmega16A и внешний сброс (reset)

Обсуждаем контроллеры компании Atmel.
Ответить
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

добрый день, помогите разобраться. Есть отладочная плата для Atmega16A с разъемом SPI , светодиодами (+резисторы), кварц 16 МГц (с кондерами 22pF), 7805 с обвязкой и схема сброса - reset подтянут на питание резистором 10КОм, на землю идет кнопка в параллель с конденсатором (керамика, 0,1 мкФ). Плата шьется, запускается, вообщем все работает. На данный момент залита прошивка для мигания светодиодами, проблема вот в чем - включаю питание - светодиоды мигают, нажимаю кнопку для reset - мигание светодиодов пропадает (это и понятно - начинается перезагрузка), а вот потом - тишина, т. е. прошивка заново не стартует, запустить ее удается только перезагрузкой по питанию. Вопрос вот в чем, почему не стартует прошивка после внешнего сброса ?

P.S.
прошу сильно не пинать, т.к. новичек, спасибо.
Реклама
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Сообщение nirq »

При сбросе состояние ОЗУ не изменяется, его надо инициализировать руками (если надо, а надо практически всегда).
После подачи питания ОЗУ принимает какое-то состояние - но какое именно, не оговаривается. То есть инициализировать надо явно и в любом случае.
Справедливо для не только ОЗУ, но и всего остального (читай "регистров с настройками для периферии").

Ещё лучше понять разницу между понятиями "сброс (ресет)" и "подача питания".
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

ничего не понял..... можно попдробней
Друг Кота
Аватара пользователя
Сообщения: 6339
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

nirq писал(а): Справедливо для не только ОЗУ, но и всего остального (читай "регистров с настройками для периферии").
По ДШ для регистров периферии существует вроде "значение по умолчанию", устанавливающееся при включении. Но побившись пару раз мордой об "один раз работает, другой раз нет", с тех пор обязательно инициализирую все используемые регистры. На умолчание надейся, но при рекламации спросят с тебя, а не с ребят из Сан-Хосе, штат Калифорния.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

maxrule писал(а):прошивка заново не стартует
Покажите Ваш исходник.
Jack_A писал(а):По ДШ для регистров периферии существует вроде "значение по умолчанию", устанавливающееся при включении. Но побившись пару раз мордой об "один раз работает, другой раз нет", с тех пор обязательно инициализирую все используемые регистры.
Регистры периферии по сбросу (хоть power-up, хоть WDT) принимают эти значения по умолчанию. Инициализировать их нет никакой нужды. Никогда этим не занимаюсь. Если программа иногда не работает - искать нужно в другом месте. Например, неинициализированная переменная в ОЗУ.
Контактная информация:
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение 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.
Реклама
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

а может дело в:
открываю на выход весь порт B, а светодиод подключаю через перемычку и резистор только к B0, остальные же порты "висят в воздухе" - без подтяжек и не использую ????????????????????????????????
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

В тексте никаких проблем не видно. Порт можно так использовать, ничего, что висят в воздухе.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

может саму плату посмотрите ? возможно кондеры кварца далеко от микросхемы поставил ?
Вложения
work.lay
(128.09 КБ) 559 скачиваний
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

может FUSE битами увеличить задержку завода контроллера после сброса - поставить 64К
Хорошему коту и в декабре - март :)
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

думал об этом выставил максимальную - 64mks (SKELS3-0: 1111, SUT0-1:11). Результата не дало
Мучитель микросхем
Сообщения: 443
Зарегистрирован: Ср окт 19, 2011 08:48:27
Откуда: Мать городов русских

Сообщение Frogfot »

попробуй от внутреннего RC завести
Хорошему коту и в декабре - март :)
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Пт сен 21, 2007 17:53:23
Откуда: Зарайск

Сообщение mrFox »

maxrule писал(а):возможно кондеры кварца далеко от микросхемы поставил ?
класический пример как делать не надо - землю от кондесаторов кварца надо вести напрямую к ножке МК и как можно короче
а на текущей макетке нужно отрезать землю кондесаторов кварца и проводом подпаять к земле у ножки МК
в общем следовало бы почитать про правила разводки плат
во вложении - исправленная плата
Вложения
work.lay
исправленна земля кварца
(126.46 КБ) 426 скачиваний
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

Frogfot писал(а):попробуй от внутреннего RC завести
Дельный совет, попробуйте от внутреннего RC. С внешним кварцем есть простор для ляпов, проводящий флюс, например.
Контактная информация:
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

спасибо mrFox, за замечания - учту на будущее, но:
выпаял внешний кварц, выпаял его кондеры, перенастроил на работу внутреннего генератора (8 МГц) -все равно на reset не реагирует - так же не стартует прошивка. Стартует только если перезагружаешь по питанию....
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

Лишнего ничего не подключено, программатора, например? Что видите тестером на пине RESET после отпускания сброса?
Контактная информация:
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

Сообщение nirq »

Вторая попытка: бабка рассказывала, что оне при плавном нарастании питания запускаются как-то... не того....
Что с питанием, конкретно? Если заменить на другое питание?
7805 с обвязкой
"Обвязка" громкий термин, а ещё есть "дропаут". На всякий случай.

Кофейная гуща. Очко переходит в зрительный зал.
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

итак, при нормальной работе напряжение между RESET и GND - 4.98 В. При сбросе (нажатие на кнопку) - напряжение между RESET и GND плавно падает (примерно 0.7 секунда) до 0.01 В, после отпускания кнопки плавно (примерно 0.7 сек) нарастает до 4.98 в.

Обвязка L7805CV - кондер на входе (керамика) - 0,33 mkF, на выходе - та же карамика - 0,1 mkF.
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пн ноя 04, 2013 01:18:37

Сообщение maxrule »

по поводу питания:
питание от блока (через 7805) и от программатора (от USB компа) - никакого результата, все то же самое.
Друг Кота
Аватара пользователя
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск

Сообщение Леонид Иванович »

maxrule писал(а):При сбросе (нажатие на кнопку) - напряжение между RESET и GND плавно падает (примерно 0.7 секунда)
Как такое может быть, кнопка же закорачивает RESET на землю?
Контактная информация:
Ответить

Вернуться в «AVR»