Sida 1 av 1
Väcka en ATmega169pV med pin-change
Postat: 2 augusti 2011, 02:04:35
av davrex
Har ni suttit och försökt få min avr att vakna efter jag har lackt den i power-down men av någon anledning så vill den inte det fast den får interupt på pin-change.
jag kör följande för att söva den:
http://www.nongnu.org/avr-libc/user-man ... sleep.html
Kod: Markera allt
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
sleep_mode();
Interuptet funkar i vaket läge men inte i power-down varför?
"Only an External Reset, a Watchdog Reset, a Brown-out Reset, USI start condition interrupt, an external level
interrupt on INT0, or a pin change interrupt can wake up the MCU." sida41 Står det under Power-Down mode i Databladet
http://www.atmel.com/dyn/resources/prod ... /8018s.pdf
Någon som har ide om vad jag har missat?
Re: Väcka en ATmega169pV med pin-change
Postat: 2 augusti 2011, 18:48:10
av thepirateboy
Borde funka, kan inte se nåt direkt fel. Har du testat INT0?
Så här ser min kod ut för samma sak (på en Atmega88P)
Kod: Markera allt
/**
* @brief Set the AVR in sleep mode
*
* This function set the AVR in sleep mode power save.
* It can be wakeup by external interrupt och by timer interrupt.
*
*/
void pal_mcu_sleep(void)
{
set_sleep_mode(SLEEP_MODE_PWR_SAVE); // Power save mode
cli();
wdt_disable();
sleep_enable();
MCUCR = 0x60; // BOD sleep, datasheet page 48, better to write in assembler
MCUCR = 0x40; // but works with compiling option -Os (size optimize)
sei(); // Activate global interrupt
////////////////////////////////////////////////////////////////////
sleep_cpu(); // Now its sleeping, ZZzzzzzzzz
////////////////////////////////////////////////////////////////////
sleep_disable();
wdt_enable(WDTO_1S);
}
Re: Väcka en ATmega169pV med pin-change
Postat: 2 augusti 2011, 18:53:16
av davrex
Problemet är att min LCD använder samma port som INT0 ligger på. Och jag behöver den pinnen till LCD displayn har ingen möjlighet att byta ut den.
Så jag skulle gärna vilja lösa det med pinchange interupptet.
Re: Väcka en ATmega169pV med pin-change
Postat: 2 augusti 2011, 19:08:53
av thepirateboy
Det enda att göra är nog att skriva enklast möjliga testprogram för att se var problemet är.
Jag har använt pinchange interrupt för att vakna och det har aldrig varit några problem så
länge MCU:n stödjer det.
Re: Väcka en ATmega169pV med pin-change
Postat: 2 augusti 2011, 20:11:09
av davrex
Har nu löst det skumt nog körde din kod istället för sleep_mode(); och då börja det funka och det verkar som att sleep_enable(); slår av mina globala interupps för köra jag följande:
Kod: Markera allt
sleep_enable();
sei();
sleep_cpu();
sleep_disable();
Så funkar det men inte om jag kör detta:
Kod: Markera allt
sleep_enable();
sleep_cpu();
sleep_disable();
Så tack för hjälpen har suttit många timmar med detta felet.