ATmega48 sleep

Fuzesi Arnold arno at externet.hu
Tue Dec 21 03:41:07 CET 2004


Sziasztok!

Van valakinek tippje, miert mukodik ez:

....
 else if(!remote_type){       //ha vezetékes
  __watchdog_reset();
  WDTCSR=b00011000;
  WDTCSR=b00000000;    //WDT off
  LED=0;
  //WAKE-UP
  while(IR_IN);                    //varakozunk egy 0 szintre
  WDTCSR=b00011000;
  WDTCSR=b00001110;    //1s WDT period
  LED=1;
  goto INIT;
}

Ez meg nem:

 else if(!remote_type){   //ha vezetékes
  __watchdog_reset();
  WDTCSR=b00011000;
  WDTCSR=b00000000;    //WDT off
  EICRA=b00000000;    //INT0 low level (required for wake-up from power down
mode)
  EIFR=b00000001;     //INT0 flag clear
  EIMSK=b00000001;    //INT0 enable
  LED=0;
  __enable_interrupt();
  SMCR=b00000101;  //sleep enable,power down mode
  __sleep();                    //INT0 ebreszti
  asm("nop");
  //WAKE-UP
  __disable_interrupt();
  WDTCSR=b00011000;
  WDTCSR=b00001110;    //1s period
  LED=1;
  goto INIT;
}

WDT ki van kapcsolva a fuse biteknel.

Ugy csinal, mintha sleep-bol nem lepne tovabb. Illetve 104uA-t fogyaszt.
Neha mikor rajon akkor csak 2uA-t. (ez lenne a normalis, minden ki van
kapcsolva, boden, wdt, power down modban van)

INT0 mukodik rendesen futo program eseten.
Egy egyszeru rutin amelyik siman lefut, es visszater.
Nem ertem... Valakinek otlete?

Kösz,
Arnold




More information about the Elektro mailing list