Új hozzászólás Aktív témák

  • Gergosz2

    veterán

    válasz gyapo11 #2868 üzenetére

    <avr/sleep.h>-nak érdemes utána olvasni, ott benne van minden. És igen tényleg elérhető elég kis fogyasztás, de érdemes ezt elolvasnod: [link].

    Én személy szerint nem mentem el végletekig, az interfaceket lőttem le a timereket meg a ADC-t. Ez már levitte az áramfelvételt 30uA környékére ami 3,3V-on már elég kellemes volt. Én ezt egy Atmega168-cal csináltam.

    Maga a az altatást végző függvény ez:

    void sleepNow()
    {
    byte adcsra = ADCSRA;
    delay(100);
    //Mirf.powerDown();
    ADCSRA = 0; //ADC kikapcsolása
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    sleep_enable();
    attachInterrupt(0, wakeup_nrfl, LOW);
    sleep_mode();
    sleep_disable();
    ADCSRA = adcsra;
    detachInterrupt(0);
    }

    Ezt loopban rögtöm meghívom. A lényeg az, hogyha jön egy megszakítás, a program rögtön a sleep_disable(); parancsot hajtja végre, szóval ha elaltatod, akkor onnan folytatja. Azért is kell rögtön kikapcsolni, meg a megszakítást is addig kivenni. Utána megy tovább a loop-ban, amit még oda beraksz azt megcsinálja. Utána meg megint elalszik.

Új hozzászólás Aktív témák

Hirdetés