Sleep ATMega16
2009-04-29 by Gmail
I am working on on a system to record temperature on a flash memory at a programmed rate. As there is nothing to be done between samples (1 Sec- 15 Mins) and it is battery powered I want it to sleep between samples. I am using Mega 16, A/D MCP3550 on Spi, running on 3.6864 Mhz Crystal. The first step I did was to read from A/d and send it by uart to check readings, it was ok. When I started to introduce sleep, I got zeros received by uart! even the number of bytes sent. So I conclude that the problem is when waking after the sleep, is there any thing that I missed or settings to be done so that I get it work as I want it? Code Bellow. Thanks, Moataz Hussein ;///////////////// ; Timer2 overflow ;///////////////// Timer2_Ovf: clr temp ; Disable sleep out mcucr,temp dec temp1 ; Loops counter brne hh ldi temp1, 225 ; Reset Counter value to 225 when done hh: ldi Temp,LOW(Sec1) ; After interupt completed go back to Sec1 push Temp ldi Temp,HIGH(Sec1) push Temp reti ;///////////////// ; Main ;///////////////// Main_sample: rcall sample ; Read from A/d And send by UART sei ldi temp, 0b01000000 out timsk, temp Ldi Temp, 0b00000100 ; Prescaller 64 out tccr2, temp ldi temp1, 225 ; No of loops to get 1 Sec TMRLOOP: ldi temp,0b01010000 ; Enable sleep, mode ; out mcucr,temp sleep Rjmp TMRloop Sec1: Ldi temp, 225 cpse temp, temp1 rjmp tmrloop Rjmp Main_sample [Non-text portions of this message have been removed]