ATtiny13A: Zkušenosti se Sleep Modes (režimem spánku)

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.

:arrow_right: 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.