Sleep módy Atmegy8
Moderátor: Moderátoři
Sleep módy Atmegy8
Ahoj, potřeboval bych radu od někoho kdo má zkušenosti s ATmegou8 a jejími sleep módy. Potřeboval bych ATmegu vždy na 2 sekundy uspat, pak probudit, udělat nějakou operaci- například odeslat číslo UARTem, udělat jeden AD převod... a zase uspat. Podle datasheetu lze probouzet z Power-safe-mode událostí od Timer/counter2 pokud je clockován asynchronně... Ten Timer2 je ale pouze 8 bitový, takže nevím jak udělat tak dlouhou pauzu- mám k dispozici vnější krystal 16MHz... děkuju za reakce Milan
no pokud si myslím jak to je, může to být i špatně, ale na asynchronní zdroj ten timer může běžet jenom na hodinkový krystal ? Čili na 16MHz ti to nepoběží
a hlavně to má ještě předděličku 1:1024.
v datasheetu je napsáno : The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external
clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation. The CPU main
clock frequency must be more than four times the Oscillator frequency.
![Wink ;)](./images/smilies/icon_wink.gif)
v datasheetu je napsáno : The Oscillator is optimized for use with a 32.768 kHz watch crystal. Applying an external
clock to the TOSC1 pin may result in incorrect Timer/Counter2 operation. The CPU main
clock frequency must be more than four times the Oscillator frequency.
Ahoj, děkuju za odpověď. Dneska jsem přes den pořádně prostudoval datasheet a přečetl jsem si přesně to co jsi psal... Takže jsem v AVR studiu nastavil fuses na interní 8MHz oscilátor a na vstup Atmegy jsem připojil ten hodinkovej. Po zkouknutí osciloskopem kmitá jak má. Ale stejně se mi nepodařilo Atmegu vzbudit...(AS2 v ASSR mám nastavený, interrupty povolený taky) Musím zítra zkusit v přerušení zkusit hýbat hodnotou na pinu a kouknout na to osciloskopem... jinak nevím kde je chyba.
Ještě jak jsi psal o té předděličce- jestli jsem dobře pochopil datasheet tak ta se při asynchronním módu toho Timeru2 neuplatní....
Ještě jak jsi psal o té předděličce- jestli jsem dobře pochopil datasheet tak ta se při asynchronním módu toho Timeru2 neuplatní....
Tady je ten kód. Jak jsem říkal, mám nastaveno na 8 MHz interní oscilátor a na svorkách pro krystal mám hodinkovej krystal... mega se neprobudí...
Kód: Vybrat vše
#include <stdlib.h>
#include <avr/io.h>
#include <stdio.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>
#define F_CPU 8000000 //definovana rychlost taktu pro knihovnu "delay.h", interni RC
#include <util/delay.h>
#define USART_BAUDRATE 9600
#define BAUD_PRESCALE (((F_CPU / (USART_BAUDRATE * 16UL))) - 1)
void main(void)
{
UCSRB |= (1 << RXEN) | (1 << TXEN);
UCSRC |= (1 << URSEL) | (1 << UCSZ0) | (1 << UCSZ1);
UBRRL = BAUD_PRESCALE;
UBRRH = (BAUD_PRESCALE >> 8);
ASSR = (1 << AS2);
//TCCR2 |= ((1 << CS22) | (1 << CS21) | (1 << CS20)); //zakomentovana preddelicka 1024
TIMSK |= (1 << TOIE2);
TCCR2 |= (1 << CS10);
MCUCR |= (1<<SE)|(1<<SM1)|(1<<SM0); // Povoleni sleep modu (power safe mod
sei();
while(1)
{
asm("sleep");
_delay_ms(200);
}
}
ISR(TIMER2_OVF_vect)
{
_delay_ms(200);
UDR = '0x55';
}
When entering Power-save mode after having written to TCNT2, OCR2, or TCCR2, the user must wait until the written register has been updated if Timer/Counter2 is used to wake up the device. Otherwise, the MCU will enter sleep mode before the changes are effective. This is particularly important if the Output Compare2 interrupt is used to wake up the device, since the Output Compare function is disabled during writing to OCR2 or TCNT2. If the write cycle is not finished, and the MCU enters sleep mode before the OCR2UB bit returns to zero, the device will never receive a Compare Match interrupt, and the MCU will not wake up.