Проверил - USART мешает уходить в сон.
Если делаю в программе, в начале ее работы, инициализацию USART, контроллер не засыпает, и потребляет от батареи ток ~90 мА.
Если USART в программе не задействовать, контроллер нормально засыпает, и потребляет 10-15 мкА.
Ну как же его отключить перед уходом в сон?
Код
;Инициализация USART:
;Установить скорость передачи данных
ldi temp,$00 ;9600 бит/с
out UBRRH, temp
ldi temp,$40
out UBRRL, temp
;Включить приемник и передатчик
ldi temp, (1<<RXEN)|(1<<TXEN)|(1<<RXCIE)
out UCSRB,temp
;Установить формат кадра: 8 битов данных, 1 стоп-бит
ldi temp, (1<<URSEL)|(0<<USBS)|(3<<UCSZ0)
out UCSRC,temp
Вот этот код перед засыпанием не помогает:
Код
ldi temp, (0<<RXEN)|(0<<TXEN)|(0<<RXCIE)
out UCSRB,temp
sleep
Порты перевожу в третье состояние, тогда потребляемый ток уменьшается до 10-15 мкА (если USART отключен), а то через них тоже как-то ток утекает:
Код
ldi temp,$00
out PORTD,temp ;инициализация PORTD
ldi temp,$00
out DDRD,temp ;установка направления PORTD
Сообщение отредактировал James D. - Jan 5 2011, 11:00