Witam!
Chciałbym się dowiedzieć jaki poziom poboru prądu udało się Wam uzyskać, w trybie Power-save wspomnianego µP, ponieważ u mnie wynik ten jest zdecydowanie słąby i zastanawiam się co robię źle. Jest to około 360 µA. Natomiast dla trybu aktywnego, tzn. np czekając na znak z portu szeregowego jest to już aż około 10,25 mA! (bez rezystorów podciągających - 12,16 mA). Z noty katalogowej wynika, że powinno to być znacznie mniej. Oto główna część testowego programu, dla którego mierzę pobór prądu wpinając się przed nóżką VCC µP. Zasilanie jest ze stabilizatora 7805, na którego podaję wyższe napięcie ze zwykłego zasilacza wtyczkowego.
Fakt, że mieszałem też trochę we Fuse bitach
Z góry dzięki za wszelką pomoc!
Pozdrawiam!
Chciałbym się dowiedzieć jaki poziom poboru prądu udało się Wam uzyskać, w trybie Power-save wspomnianego µP, ponieważ u mnie wynik ten jest zdecydowanie słąby i zastanawiam się co robię źle. Jest to około 360 µA. Natomiast dla trybu aktywnego, tzn. np czekając na znak z portu szeregowego jest to już aż około 10,25 mA! (bez rezystorów podciągających - 12,16 mA). Z noty katalogowej wynika, że powinno to być znacznie mniej. Oto główna część testowego programu, dla którego mierzę pobór prądu wpinając się przed nóżką VCC µP. Zasilanie jest ze stabilizatora 7805, na którego podaję wyższe napięcie ze zwykłego zasilacza wtyczkowego.
...
#define F_CPU 8000000UL
...
//---------------------------------------------------
inline void UART_init(void) //inicjalizacja portu szeregowego
{
UBRRL = 12; //F_CPU = 8MHz, BAUD = 38400 bps
sbi(UCSRB,TXEN); //odblokowanie nadajnika
sbi(UCSRB,RXEN); //odblokowanie odbiornika
}
//---------------------------------------------------
inline void TIMER2_init(void) //inicjalizacja czasomierza 2 jako zegar czasu rzeczywistego
{
cli(); //wyłącz przerwania
sbi(SFIOR,PSR2); //wyzerowanie preskalera
sbi(ASSR,AS2); //taktowanie asynchroniczne z TOSC
sbi(TCCR2,CS22);
sbi(TCCR2,CS21); //ustawienie podziału sygnału zegarowego na CK/1024
sbi(TCCR2,CS20); //CK = 32768 Hz (przepełnienie co 10 sekund)
loop_until_bit_is_clear(ASSR,TCR2UB); // czekaj na uaktualnienie rejestru TCCR2
sbi(TIMSK,TOIE2); //odblokowanie przerwania na przepełnienie czasomierza 2
sei(); //włącz przerwania
}
//---------------------------------------------------
...
//---------------------------------------------------
SIGNAL(SIG_OVERFLOW2)
{
UART_getchar();
}
//---------------------------------------------------
int main(void)
{
DDRA = 0x00; //wszystkie porty jako wejścia
DDRB = 0x00;
DDRC = 0x00;
DDRD = 0x00;
PORTA = 0xFF; //z rezystorami podciągającymi
PORTB = 0xFF;
PORTC = 0xFF;
PORTD = 0xFF;
UART_init(); //inicjalizacja portu szeregowego
TIMER2_init(); //inicjalizacja czasomierza 2
set_sleep_mode(SLEEP_MODE_PWR_SAVE); //wybór trybu uśpienia
do
{
sleep_mode(); //uśpienie procesora
}
while(1); //nieskończona pętla
}
Fakt, że mieszałem też trochę we Fuse bitach
Z góry dzięki za wszelką pomoc!
Pozdrawiam!