Ahoj potřeboval bych poradit jestli nema někdo z vás zkušenosti se Sleep Modes “režimem spánku” u ATtiny13A, nejlepe v Assembleru.
Pokoušel jsem se na to přijit podle datesheetu ale nedaři se.
administrator: přejmenováno z "ATtiny13A"
Ahoj potřeboval bych poradit jestli nema někdo z vás zkušenosti se Sleep Modes “režimem spánku” u ATtiny13A, nejlepe v Assembleru.
Pokoušel jsem se na to přijit podle datesheetu ale nedaři se.
administrator: přejmenováno z "ATtiny13A"
Tady je příklad na power-down mód.
Probudí se nízkou úrovní na pinu INT0.
Jiný mód nastavíš změnou bitů SM1, SM0 podle tabulky “Sleep Mode Select”.
[code].cseg
.org 0
rjmp reset
.org INT0addr
reti
reset:
ldi r24, (1<<INT0)
out GIMSK, r24 ;enable INT0 interrupt
;set_sleep_mode(PWR_DOWN);
ldi r24, (1<<SM1)
out MCUCR, r24
sei ;enable global interrupt
mainloop:
;sleep_enable();
in r24, MCUCR
sbr r24, (1<<SE)
out MCUCR, r24
;sleep_cpu();
sleep
;sleep_disable() po probuzení
in r24, MCUCR
cbr r24, (1<<SE)
out MCUCR, r24
rjmp mainloop
[/code]
Používám u ATtiny13 (a nejenom u ní) StandBy mód v hlavní smyčce, protože v drtivé většině používám časovače a přerušení od nich. Často se jedná o refreshe LED nebo LCD displejů. Tím pádem periodicky (většinou minimálně 100x za sekundu) procesor probudím, obsloužím přerušení a projedu jeden cyklus hlavní smyčky programu. U bateriových aplikací používám StandBy v hlavní smyčce a k vypnutí pak PowerDown mód. Před uvedením do PowerDown vypínám displeje a piny. Nechávám jen Pull-up na INT pinu.