AVR Раздел по микроконтроллерам компании Atmel - AVR / ATtiny / ATmega / ATMega128 / ATxmega, вопросы по программированию в AVR studio и все, относящееся к AVR... |
02.01.2016, 12:57
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.01.2007
Адрес: Пермский край
Сообщений: 1,596
Сказал спасибо: 418
Сказали Спасибо 1,363 раз(а) в 513 сообщении(ях)
|
Работа с флагами сброса Tiny45
Здравствуйте всем!!!!
С праздниками!!!
За выходные решил добить старую задумку и встал в тупик. Железка - дверной звонок с управлением видеоглазком с 2-мя камерами и управление подсветкой. Из-за нехватки ног 45-й использовал Reset для выхода из сна и запуска основной программы. Лабораторная работа, проведённая на рабочей плате с её питанием и цепями Reset'а (вывод MCUSR на ноги, на светодиоды) показала чёткое появление флага EXTRF и отсутствие других флагов после каждого нажатия кнопки сброса, после подачи питания флаги выставляются произвольно, но обязателен PORF. На чём и основано такое ветвление:
Код:
|
in r16, MCUSR
clr r17
out MCUSR, r17 ; clear flags
andi r16, 0b00000101 ; power and bor reset flags
brne not_play ; power on - not music
play:
...
...
not_play:
...
sleep |
отчистку флагов добавил уже от безисходности, на плате, раз из пяти нажатий сброса, улетает сразу в "not_play" или ещё куда, но не на основную программу.
До этого куска кода только инициализация портов, прерывания ещё не разрешены. Подскажите, куда копнуть, где я лоханулся?
P.S. чёто в листинге "лишние" пробелы съедает.
Последний раз редактировалось alxchep; 02.01.2016 в 15:54.
|
|
|
|
02.01.2016, 13:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,000
Сказал спасибо: 3,017
Сказали Спасибо 3,191 раз(а) в 2,164 сообщении(ях)
|
Re: работа с флагами сброса Tiny45
1. В реале или в симуляторе?
2. Не вполне ясно, сейчас уже !Reset используется как ввод-вывод или ещё нет?
3. Используется-ли сторожевой таймер? Если да, то его надо сбросить после чтения MCUSR, т.к. если (WDRF==1) & (WDTON==unprogrammed), то сторожевой таймер разрешается автоматически (см. в описании бита WDE - "Bit 3 – WDE: Watchdog Enable").
4. Есть возможность вывести состояние MCUSR (эмулятор)?
Сообщение от alxchep
|
P.S. чёто в листинге "лишние" пробелы съедает.
|
Используйте тэг CODE.
|
|
|
Сказали "Спасибо" ForcePoint
|
|
|
02.01.2016, 16:01
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.01.2007
Адрес: Пермский край
Сообщений: 1,596
Сказал спасибо: 418
Сказали Спасибо 1,363 раз(а) в 513 сообщении(ях)
|
Re: работа с флагами сброса Tiny45
1. в реале.
2. Reset прошит и используется как сброс, просто основная часть программы начинается с вектора Reset. Оно сделало ненужным сторожевой таймер, есть возможность н.в. программирования, функционал не страдает.
3. Собака не используется, не разрешена фьюзом.
4. Эмулятора нет, для понимания, что делается в MCUSR специально делал лабу, короткая прога, читает MCUSR в регистр, регистр на PORT. На выводы повешены светики. Лаба делалась на боевой плате, с её цепями питания и сброса.
|
|
|
|
02.01.2016, 21:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.10.2007
Адрес: Беларусь
Сообщений: 8,048
Сказал спасибо: 60
Сказали Спасибо 3,954 раз(а) в 2,309 сообщении(ях)
|
Re: Работа с флагами сброса Tiny45
Что-то делаете не так, или палёные контроллеры
Этот код 100% определяет Ресет по ноге ресета, работает на сотнях плат
|
|
|
|
02.01.2016, 21:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 20.03.2007
Адрес: "Братское кольцо враждебности", т.е. ближайшее заМКАДье.
Сообщений: 7,000
Сказал спасибо: 3,017
Сказали Спасибо 3,191 раз(а) в 2,164 сообщении(ях)
|
Re: Работа с флагами сброса Tiny45
Сообщение от alxchep
|
Лабораторная работа, проведённая на рабочей плате с её питанием и цепями Reset'а (вывод MCUSR на ноги, на светодиоды) показала чёткое появление флага EXTRF и отсутствие других флагов после каждого нажатия кнопки сброса, после подачи питания флаги выставляются произвольно, но обязателен PORF.
|
Если временами попадался и WDRF, то приходим к пункту 3 про автоматическое разрешение сторожевого таймера.
Сообщение от alxchep
|
2. Reset прошит и используется как сброс, просто основная часть программы начинается с вектора Reset. Оно сделало ненужным сторожевой таймер, есть возможность н.в. программирования, функционал не страдает.
|
Не совсем понял, но, думаю, сначала надо исключить пункт 3. Поставьте принудительный сброс сторожевого таймера.
|
|
|
|
02.01.2016, 23:54
|
|
Почётный гражданин KAZUS.RU
Регистрация: 29.01.2007
Адрес: Пермский край
Сообщений: 1,596
Сказал спасибо: 418
Сказали Спасибо 1,363 раз(а) в 513 сообщении(ях)
|
Re: Работа с флагами сброса Tiny45
Сообщение от niXto
|
Что-то делаете не так, или палёные контроллеры
|
мда, завтра попробую вообще исключить кусок с проверкой, другого контроллера под рукой нет, до магазина далеко.
Сообщение от ForcePoint
|
Если временами попадался и WDRF
|
нет, имел ввиду остальные три флага. Чаще выставляются вместе BORF и PORF, иногда только PORF, иногда три вместе.
.... Усё.
я её нашёл. Не смотря на запрет прерываний, INT0, подтянутый внутренним резистором, иногда срабатывал. Помогла наружная подтяжка резистором к "+".
Последний раз редактировалось alxchep; 03.01.2016 в 16:07.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 23:16.
|
|