JosefSvejk píše:
Máš asi něco špatně v programu. Našel jsem fotky, co si kluk fotil při testování spotřeby. Samotná atmega328 žere fakt nula celá nic.
Mozny to jeee, ale jak rikam samotnej program z tech prikladu a porad to zere moc ... tohle je uz ani nevim odkud jen test s ledkou.... snazim se prave najit nekde tu chybu a porad nevim ...
// potřebné knihovny
#include <avr/sleep.h>
#include <avr/power.h>
#include <avr/wdt.h>
#define LED_PIN (13) // pojmenování pinu 13
// zde se bude ukládat zda přišel impuls z watchdog timeru
// hodnota 1 simuluje impuls po zapnutí, aby jsme nečekali
volatile int impuls_z_wdt=1;
// zde se ukládají impulsy
volatile int citac_impulsu= 2;
// zde nastavíme potřebný počet impulsů
// podle nastavení WDT viz níže je jeden impuls 8 sekund
volatile int impulsu_ke_spusteni = 2;
// impuls z WATCHDOG TIMERU /////////////////
ISR(WDT_vect)
{
//když je proměnná impuls_z_wdt na 0
if(impuls_z_wdt == 0)
{
// zapiš do proměnné 1
impuls_z_wdt=1;
}
}
void enterSleep(void)
{
//nastavení nejúspornějšího módu
set_sleep_mode(SLEEP_MODE_PWR_DOWN);
// spánkový režim je povolený
sleep_enable();
// spuštění režimu spánku
sleep_mode();
// tady bude program pokračovat když se probudí
// spánek zakázán
sleep_disable();
//znovu zapojení všech funkcí
power_all_enable();
}
void setup()
{
//nastaví pin 13 jako výstup
pinMode(LED_PIN,OUTPUT);
// nastavení WATCHDOG TIMERU
MCUSR &= ~(1<<WDRF); // neřešte
WDTCSR |= (1<<WDCE) | (1<<WDE); // neřešte
// nastavení času impulsu
WDTCSR = 1<<WDP0 | 1<<WDP3; // 8 sekund, WDTCSR = B0110 --> 1 sekunda
WDTCSR |= _BV(WDIE); //neřešte
}
void loop()
{
//když je impuls z WATCHDOG TIMERU a zároveň i potřebný jejich počet
if ((impuls_z_wdt == 1) & (impulsu_ke_spusteni == citac_impulsu))
{
///////////////////////////////////////////////////////////////
// zde je ukázkový kód, upravte si sami podle potřeby
digitalWrite(LED_PIN, HIGH);
delay(3000);
digitalWrite(LED_PIN, LOW);
// konec ukázkového kódu, který se v nastaveném intervalu
// bude provádět
//////////////////////////////////////////////////////////////
citac_impulsu = 0;// vynuluj čítač
impuls_z_wdt = 0; // vynuluj impuls
enterSleep();// znovu do spánku
}
else
{
enterSleep();//znovu do spánku
}
citac_impulsu++; // inpuls se přičte i když nic neproběhlo
}