|
|
  |
AVR + TWI + POWER_DOWN, не работает |
|
|
|
Nov 27 2011, 18:08
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
обращаюсь к уважаемому сообществу со своей проблемой, голову уже сломал. делаю девайс на atmega8, который в одном из режимов уходит в POWER_DOWN с пробуждением по INT1. обработчик прерывания - пустышка, только чтоб проснуться. как только девайс просыпается, он берет из RTC DS1337 дату и время и сохраняет это в EEPROM, после чего снова уходит в отключку. для работы с и2ц использую библиотеку TWI от Peter Fleury <pfleury @ gmx.ch> http://jump.to/fleury .в общем, в нормальных режимах она не подводит, правда програмный и2ц почему-то не работает, но это к проблеме отношения не имеет. так вот, проблема в том, что после пробуждения МК начинает считывать время из часов и где-то там зависает, т.е. снова в спячку уже не уходит. я это точно вычислил, т.к. при заремаривании обращения к часам все отлично. причем в нормальном режиме (без спячки) работа с RTC осуществляется без проблем, проблема исключительно в момент обращения после пробуждения. отладку веду исключиельно по току потребления МК, т.к. выводить какую-то диагностику некуда и нечем - память на пределе и ноги заняты  грешу на какой-то неизвестный мне нюанс работы с TWI... может, надо как-то по-особенному пробуждаться, что-нибудь там инициализировать в этом TWI? подскажите, куда рыть - третьи сутки практически не сплю... в крайнем случае дайте, пожалуйста, рабочую либу, что ли... хоть бы и программную реализацию, совместимую по функциям с упомянутой либой, чтобы меньше править код... у самого уже крыша набекрень  надеюсь на вашу помощь
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Nov 28 2011, 09:38
|
Частый гость
 
Группа: Свой
Сообщений: 121
Регистрация: 19-01-05
Пользователь №: 2 049

|
Из слипа выходил так: Код Delay(100); ClrBit(GICR,INT0); ClrBit(MCUCR,SE); SetBit(UCSRB,TXEN); SetBit(SPCR,SPE); DDRA = 0xFE; PORTA = 0xF8; Почему? Не помню. Пять лет назад было.
|
|
|
|
|
Nov 28 2011, 11:05
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 23-06-05
Пользователь №: 6 244

|
Цитата(ARV @ Nov 27 2011, 21:08)  обращаюсь к уважаемому сообществу со своей проблемой, голову уже сломал. ... надеюсь на вашу помощь DS проснуться не успевает как следует? Более режимы ничем не отличаются.
Сообщение отредактировал IgorKossak - Nov 29 2011, 07:53
Причина редактирования: Бездумное цитирование
|
|
|
|
|
Nov 28 2011, 11:35
|

Профессионал
    
Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581

|
прерывания на INT1 в настоящее время поступают от проводка с общего провода, которым я касаюсь ножки  сигнал держится недолго - всего один "тыц"  прерывания от INT1 не запрещаются никогда, обработчик прерывания состоит из RETI. P.S. да, пробовал из сна выходить не по INT1, а по WDT - выходит и все нормально работает, что заставляет меня думать о том, что периферия TWI все-таки как-то портится либо во сне, либо по выходу из сна и аппаратный сброс ее лечит. МК у меня старый, ему, наверное, года 3 - может, какая-то старая ревизия кристалла с errata ? в даташите последнем errata начинается с ревизии D - может у меня А или В? есть у кого-нибудь древняя errata для справки?
--------------------
Я бы взял частями... но мне надо сразу.
|
|
|
|
|
Nov 29 2011, 03:35
|
Частый гость
 
Группа: Участник
Сообщений: 84
Регистрация: 23-06-05
Пользователь №: 6 244

|
Цитата(ARV @ Nov 28 2011, 14:20)  DS и не спит - он и без сна ноноамперы потребляет... что-то с AVR TWI не то... Ну так надо организовать им штатную рабочую ситуацию. ЦПУ сбрасывать , а таймер переводить с батарейного питания на основное. Начать со сброса цпу.
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|