Перейти к содержанию
    

ATMega - спящий режим

Подскажите, плз, правильно ли я понял - если ATMega в спящем режиме, то от прихода сигнала по TWI она проснется?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

http://www.gaw.ru/html.cgi/txt/doc/micros/avr/arh128/4.htm

 

вот тут про режимы сна. читайте сами, ОК?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо! Только еще вопрос, не пойму из описания - уж извините, я начинающий, - если на каком-то выходе установить"0", а на каком-то "1", то после входа в спящий режим эти уровни так и останутся, или линии перейдут в третье состояние. Непонятно как-то, а с даташита - еще непонятней.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

- если на каком-то выходе установить"0", а на каком-то "1", то после входа в спящий режим эти уровни так и останутся

Да.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

если на каком-то выходе установить"0", а на каком-то "1", то после входа в спящий режим эти уровни так и останутся, или линии перейдут в третье состояние

Если установить Powerdown то перейдут в третье, кроме входов для пробуждения. И при пробуждении сбросом он перезагрузится.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Изучаю спящие режимы. AtMega8 не входит в режим ADC noise reduction. Между ножкой PORTD4 и землёй светодиод, и он моргает, хотя не должен бы, т.к. регистром MCUCR я вроде как отправил МК в вышеуказанный режим, причём все прерывания запрещены. Текст программы:

 

#include <iom8.h>

#include <ina90.h>

 

#define bit(n) (1<<(n)) /* set i-bit */

#define setbit(port,n) (port|=bit(n)) /* set n-bit in port */

#define clrbit(port,n) (port&=(~bit(n))) /* clr n-bit in port */

int t=0;

void main(void)

{

_CLI(); /* interruptions disabled */

DDRD=0xFF; PORTD=0xEF;

clrbit(MCUCR,6); clrbit(MCUCR,5); setbit(MCUCR,4); setbit(MCUCR,7); /* entered the ADC noise reduction mode */

for(;;)

{

for(t=0;t<0xFFFF;t++)setbit(PORTD,4); for(t=0;t<0xFFFF;t++)clrbit(PORTD,4);

}

}

Где я ошибаюсь?

Изменено пользователем YDM86

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Где я ошибаюсь?

 

Команду __sleep() разве не нужно подавать?

Плюс корректно настроить режим сна.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...

 

#include <iom8.h> 
#include <ina90.h>         

void main(void)
{ 
_CLI();   /* interruptions disabled */
DDRD=0xFF; PORTD=0xEF; 
clrbit(MCUCR,6); clrbit(MCUCR,5); setbit(MCUCR,4); setbit(MCUCR,7);    /* entered the ADC noise reduction mode */
for(;;)
{
  for(t=0;t<0xFFFF;t++)setbit(PORTD,4); for(t=0;t<0xFFFF;t++)clrbit(PORTD,4);
}        
}

Где я ошибаюсь?

А так слабо ?

вы кристалл в сон не отправляете , вы всего лишь разрешаете спящий режим и устанвливаете вид спящего режима

на асме команда отправки в спящий режим выглядит так - sleep

а на с++ иищете сами , я еще не дочитал книжку по С++ ;)

Изменено пользователем San_75

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...