Programme und Tipps zum ATtiny13
Felix Irmscher hat die folgenden Programme entwickelt:
Programmauszug:
TIM0_OVF:
;Timer-ITR für Ton-/Pausenlänge
in Sicher_ITR,SREG
out TCNT0,Preload
dec Laenge
TIM0_ENDE:
out SREG,Sicher_ITR
reti
;----------------------------------------------------------
MELODIE:
;"Guten Abend, gut' Nacht"
.db fis4,t8,fis4,t8,a4,t4p,fis4,t8,fis4,t4,a4,t4
.db pause,t4,fis4,t8,link,0,a4,t8,d5,t4,cis5,t4p,h4,t8
.db h4,t4,link,0,a4,t4,e4,t8,link,0,fis4,t8,g4,t4
.db e4,t4,e4,t8,link,0,fis4,t8,g4,t4,pause,t4,e4,t8
.db link,0,g4,t8,cis5,t8,link,0,h4,t8,a4,t4,cis5,t4
.db d5,t4,pause,t4,d4,t8,d4,t8,d5,t2,h4,t8,g4,t8,a4,t2
.db fis4,t8,d4,t8,g4,t4,a4,t4,h4,t4,a4,t2,d4,t8
.db d4,t8,d5,t2,h4,t8,g4,t8
.db a4,t2,fis4,t8,d4,t8,g4,t4,fis4,t4,e4,t4,d4,t2
.db ende,ende
Das Melodie-Modul lässt sich mittels .db mit Noten füllen. Taktänderungen,
Pausen und Haltebögen (verbundene Noten)
sind möglich. Nötig ist nur ein Piezo-Transducer an PB3.
Programmauszug:
;----------------------------------------------------------
COUNTER: ;zählt die 4033 hoch
;Überträgt HeartBeat auf Display
in Sicher,SREG
sbi portb,2 ;Reset für alle 4033
nop
;ggf. wieder
weg
cbi portb,2
cpi HeartBeat,25 ;Anzeigegrenzen für HeartBeat
brlo ENDE_COUNTER ;falls zu gross/klein:
cpi HeartBeat,230 ;Anzeige von Null
brsh ENDE_COUNTER
LOOP_1:
sbi portb,1
;je einen
Zähltakt übertragen
nop
;ggf. wieder weg
cbi portb,1
dec HeartBeat
brne LOOP_1
ENDE_COUNTER:
out SREG,Sicher ;SREG zurück
ret
;----------------------------------------------------------
DIVISION_5400: ;Eigenes Divisionsprogramm
;durch n-fache Substraktion
in Sicher,SREG ;SREG sichern
clr HeartBeat ;HeartBeat <- 0
clr t_30_h
;t_30_h <-
0
ldi j,0x15
;0x1518
(=5400) in Divident
mov Divident_h,j ;(Divisor ist t_30_h:t_30)
ldi j,0x18
mov Divident_l,j
tst t_30
;if t_30=0 -> keine Division !
breq ENDE_DIVI
LOOP_DIVI:
cp Divident_l,t_30
cpc Divident_h,t_30_h ;Divident kann nicht mehr geteilt
brlo ENDE_DIVI ;werden (Divident < Divisor)
sub Divident_l,t_30 ;Divident <- Divdent - Divisor
sbc Divident_h,t_30_h
inc HeartBeat ;HeartBeat <- HeartBeat + 1
rjmp LOOP_DIVI
ENDE_DIVI:
out SREG,Sicher ;SREG zurück
ret
;----------------------------------------------------------
Das Herzfrequenzmessgerät hat als Takteingang hier nur einen Taster. Den Differenzverstärker müsste man dann noch selbst entwerfen. Die Ausgabe erfolgt über drei kaskadierte CMOS 4033 mit drei LED-Anzeigen. Die ICs lassen sich sehr schnell und einfach hochzählen. Zwischenspeicherung ist nicht notwendig. Vor der nächsten Anzeigesequenz wird dann einfach ein Reset ausgelöst. Als Ausgabe wäre auch gut das Unterprogramm WRCOM geeignet. Gemessen wird das Zeitintervall von drei Herzschlägen und dann entsprechend umgerechnet.
Programmauszug:
;----------------------------------------------------------
TIM0_OVF: ;Oszillator an PB3
in Sicher_ITR,SREG ;SREG sichern
DEC_kk:
ldi ii,1
dec kk
cp kk,ii
brsh OSZILLIEREN
ldi ii,10
mov kk,ii
ldi ii,1
cp Down,ii
;momentan
hoch/runtergezählt ?
breq RUNTER
HOCH:
ldi ii,150
cp jj,ii ;ganz oben auf 150 ?
brsh WIEDER_RUNTER
inc jj
rjmp OSZILLIEREN
WIEDER_RUNTER:
ldi ii,1
mov Down,ii
rjmp OSZILLIEREN
RUNTER:
ldi ii,20
cp jj,ii
;ganz unten auf 20 ?
brlo WIEDER_HOCH
dec jj
rjmp OSZILLIEREN
WIEDER_HOCH:
ldi ii,0
mov Down,ii
rjmp OSZILLIEREN
OSZILLIEREN:
mov ii,jj
WAIT_ITR:
nop
dec ii
brne WAIT_ITR
sbic portb,3
rjmp PIEP_AUS
PIEP_EIN:
sbi portb,3
rjmp ENDE_ITR
PIEP_AUS:
cbi portb,3
ENDE_ITR:
out SREG,Sicher_ITR ;SREG zurück
reti
;----------------------------------------------------------
Die Sirene arbeitet als Interrupt. So kann man beispielsweise ein Alarmanlagenprogramm ohne Unterbrechung weiterlaufen lassen, während die Sirene an ist. Auch hier ist ein Piezo-Transducer notwendig.
Es wurde ein Modul selbst gebaut, mit dem Vorteil, auch PB0 bis PB2 zu nutzen. Als Multiplexer dient ein einfacher 4xUM-Schalter. Hier werden PB0,PB1,PB2 und VCC umgeschaltet zwischen RS232 und Steckboard/Batterie
Die Spannungsregelung 7805 ist fliegend angeschraubt. Es besteht die Möglichkeit, auch ohne PC zu arbeiten, da mit Batterien entweder
4,5V oder - mit entsprechendem zusätzlichem Spannungsregler 7805 - 9V für eine
stabilisierte VCC angelegt werden können.