25-04-2018, 08:44
W jaką stronę zmierzać?
Ano w taką, która najbardziej odpowiada Twoim oczekiwaniom.
Chcesz wybudzać procesor przerwaniem z timera, więc masz do wyboru cztery tryby pracy.
IDLE, ADC Noise Reduction, Power-save, Extended Standby.
Najlepszym wyborem, według mnie, jest tryb Power-save.
Ja bym napisał tak:
Tryb zegara jest tak ustawiony, żeby resetował się co miej więcej 4 sekundy.
Po tym czasie daje nam przerwanie TIMER1_OVF_VECT i inkrementuje się zmienna licznik.
Gdy procesor wyjdzie z uśpienia 21600 razy, to oznacza, że minęło 24 godziny i wykonujemy funkcję obsługi serwa i idziemy spać.
ITD...
Ano w taką, która najbardziej odpowiada Twoim oczekiwaniom.
Chcesz wybudzać procesor przerwaniem z timera, więc masz do wyboru cztery tryby pracy.
IDLE, ADC Noise Reduction, Power-save, Extended Standby.
Najlepszym wyborem, według mnie, jest tryb Power-save.
Ja bym napisał tak:
Kod:
#include <avr/sleep.h>
#include <avr/power.h>
volatile int licznik=0;
ISR(TIMER1_OVF_VECT)
{
licznik++;
}
void dobranoc()
{
set_sleep_mode(SLEEP_MODE_PWR_SAVE);
sleep_enable();
power_adc_disable();
power_spi_disable();
power_timer0_disable();
power_timer2_disable();
power_twi_disable();
sleep_mode();
sleep_disable();
power_all_enable();
}
void setup()
{
TCCR1A=0x00;
TCNT1=0x0000;
TCCR1B=0x05;
TIMSK1=0x01;
}
void loop()
{
dobranoc();
if(licznik==21600)
{
funkcja_obslugi_serwaomechanizmu();
dobranoc();
}
if(licznik==43200)
{
funkcja_obslugi_serwaomechanizmu();
dobranoc();
}
if(licznik==64800)
{
licznik = 0;// po 72 godzinach resetujemy licznik
funkcja_obslugi_serwaomechanizmu();
dobranoc();
}
}
void funkcja_obslugi_serwaomechanizmu(){
// tutaj napisz co ma robic serwo
}
Tryb zegara jest tak ustawiony, żeby resetował się co miej więcej 4 sekundy.
Po tym czasie daje nam przerwanie TIMER1_OVF_VECT i inkrementuje się zmienna licznik.
Gdy procesor wyjdzie z uśpienia 21600 razy, to oznacza, że minęło 24 godziny i wykonujemy funkcję obsługi serwa i idziemy spać.
ITD...
Jeśli masz problem z kodem lub sprzętem, zadaj pytanie na forum. Nie odpowiadam na PW, jeśli nie dotyczą one spraw forum lub innych tematów prywatnych.