| Weitere Artikel aus dem Elo-Magazin |
Beispielprogramme für den Tiny13
von Lutz G.
Als Produkt-Feedback und Ideenaustausch zum Lernpaket Mikrocontroller möchte ich drei meiner Software-Lösungen vorstellen.
Die geringe Anschlusszahl des Attiny13 ist für mich dessen größter Nachteil und so habe ich mir Gedanken über die Ausgabe von Registerinhalten gemacht.
Ganzen Artikel lesen...

1. Zählerausgabe binär als Morseton: Bit clear = kurzer Ton, Bit gesetzt = langer Ton, Reihenfolge Bit 7 zu Bit 0, ggf. Verkürzung (z.B. Bit 3 bis 0)
Die Lösung funktioniert gut für einfachste oder spezielle Anwendungen: z.B. Anrufzähler-Abfrage, Klingelspeicher, mobile Datenausgabe. Als Demo-Beispiel habe ich eine Arbeitsversion für meinen Kreistrainings-Signalgeber im Zählumfang bis 15 (Fitnessübungen) beigefügt. Man gewöhnt sich an die Art der Ausgabe. Bei genannter Anwendung wollte ich bewusst kein Display einsetzen, was immer ablenkt. Durch den Verzicht auf verschiedene Tonhöhen lassen sich aktive Piezokapseln nutzen, außerdem ist die Software einfacher. Der Effekt lässt sich (optisch) schon mit dem Inhalt des Lernpaketes nachvollziehen.
2. Nutzung der Interface-Funktion für die Messwertausgabe, allerdings alltagstauglich im dekadischen System und mit Zahlen größer einem Byte. Es werden folgende Ausgaben über WrCOM an den PC gesendet: 1. High-Byte mit Zählumfang 256, 2. Low-Byte mit Zählumfang 100; 3. evtl. eine Null als Trennzeichen
So lässt sich die Zahl bequem wie gewohnt lesen. Nur bei Low-Byte unter 10 ist die Führungsnull (gedanklich) zu ergänzen, was aber keine Mühe macht. Der Messbereich bis 25599 (also 4,5-stellig) reicht gewöhnlich aus, jedoch lassen sich beliebig viele 100-Zähler ergänzen. Beiliegende Datei zeigt ein Anwendungsbeispiel mit reichlich erklärendem Kommentar.
3. Ein weiteres Anwendungsbeispiel für das Lernpaket bei nur minimalem Zusatzbauteilbedarf ist eine RAM-Lichtorgel. Dabei werden die zufälligen Start-Daten aus dem RAM als Bitmuster auf LED´s getaktet (evtl. RTS+DTR zuschalten). Ich habe 3 Kanäle getestet. Es ist schon eine Weile her, aber ich glaube, ein LED-Anschluss als dritter Kanal auf PB1 stört das Upload nicht.
Mich interessieren als Nächstes noch Sleep- und Watchdog-Funktion für minimalen Batteriestromverbrauch sowie maximaler Betriebszuverlässigkeit bei StandBy- oder Überwachungsaufgaben. Wenn nur die chronische Zeitnot nicht wäre ...
auf
PB4
.include
"tn13def.inc"
.def
Wert
=r16
.def
Bit
=r17
.def
Temp1
=r18
.def
Temp2
=r19
.def
Temp3
=r20
.def
UPWa1
=r21
.def
UPWa2
=r22
.def
UPWa3
=r23
.def
Count
=r24rjmp
AnfangAnfang:

Sbi
ddrb,4
Ldi
Wert,0
;StartwertNeu:

Rcall
Morsen
Ldi
Temp1,10
;Zeit
zwischen
AusgabenPause:

Rcall
Warten
Dec
Temp1
Brne
Pause
Inc
Wert
Rjmp
NeuMorsen:

Ldi
Bit,4
;Anzahl
Bits
Mov
Temp1,WertSchleife:

Sbi
portb,4
Rcall
Warten
Mov
Temp2,Temp1
Andi
Temp2,0x08
;Maske
(abh.
von
Anzahl
Bits)
Breq
Kurz
Rcall
Warten
Rcall
Warten
Rcall
WartenKurz:

Cbi
portb,4
Rcall
Warten
Lsl
Temp1
Dec
Bit
Brne
Schleife
retWarten:


Ldi
UPWa1,250W1:

Ldi
UPWa2,250W2:

Dec
UPWa2
Brne
W2
Dec
UPWa1
Brne
W1
ret
für
DDR-Uhrenschaltkreis
U114/U124
zur
;Frequenzbestimmung
von
Quarzen/Oszillatoren/Schwingkreisen;
;orginal
Einsatz
eines
4,19
MHz-Quarzes,
Arbeitsbereich
etwa
;100
kHz
bis
10
MHz
(Funkbereich!);23-stufiger,
binärer
Frequenzteiler,
symmetrische
Motorausgänge,
;versetzte
0,5
Hz-Ausgangssignale,
Betriebsspannung
1,2
bis
1,7
V;Literatur:
electronica
215,
Einsatzbeispiele
für
CMOS-Schaltkreise,
;Klaus
Schlenzig;bei
anderen
IC´s
(z.B.
2x
CD4060):
Messbereich
prüfen
(hier
ca.
0,1
;bis
255,99
sek),
evtl.
einfachere
Ergänzungsschaltung;Ergänzungsschaltung:
UCC-Reduzierung
auf
1,5
V,
Pegelanpassung
von
;(einem)
Motorausgang
auf
PB3
mit
Transistor,
evtl.
LED-Kontrolle;Messung
einer
halben
Periodendauer
(HINWEIS:
symmetrischer
Ausgangstakt
;erforderlich,
andernfalls
Programm
anpassen!);mögliche
Programm-Erweiterung:
Überlaufanzeige
256
sek
auf
PB4;
;Auswertung
mit
dem
Taschenrechner
(erste
Teilmessung
verwerfen):
;Teilerfaktor
4.194.304
aus
Speicher
geteilt
durch
;erste
Ausgabezahl
+
Komma-Eingabe
+
zweite
Ausgabezahl
(Führungsnull
;bei
0-9
ergänzen),
Ergebnis
=
Frequenz
in
Hz
.include
"tn13def.inc"
.def
sicher
=
r04
.def
temp
=
r16
.def
time
=
r17
;Teiler-Register
auf
0,01
sek
.def
hsek
=
r18
;Hundertstelsekunden
(max.
Zählumfang
100)
.def
sek
=
r19
;Sekunden
.def
A

=
r20
.def
Delay
=
r21
.def
Count
=
r22
;Port
B
.equ
TXD
=
1
.equ
RXD
=
2
rjmp
Anfang
.org
0x0003

rjmp
TIM0_OVF

;Timer0
Overflow
Anfang:

cbi
ddrb,3

;Datenrichtung
sbi
portb,3
;PullUp-Vorwiderstand
ldi
temp,2

;Start
mit
Vorteiler
/
8
out
TCCR0B,temp
ldi
temp,2
out
TIMSK0,temp
;Timer
Interrupt
freigebenNeu:

clr
time
clr
hsek
clr
sekAus:

sbis
pinb,3
rjmp
Aus
sei

;Globaler
Interrupt
frei

Ein:

sbic
pinb,3
rjmp
Ein
cli
ldi
A,0
rcall
WrCOM
;führende
Trenn-Null
mov
A,sek
rcall
WrCOM
;Sekunden
mov
A,hsek
rcall
WrCOM
;Hundertstelsekunden
ldi
A,0
rcall
WrCOM
;abschließende
Trenn-Null
rjmp
NeuTIM0_OVF:


;Timer
Interrupt
in
sicher,SREG

ldi
temp,106

out
TCNT0,temp
;Zählumfang
150
bis
Overflow
=
0,001
sek
inc
time
;Teiler-Register
cpi
time,10
;teilt
auf
0,01
sek
brlo
TIM0_ende
clr
time
inc
hsek
cpi
hsek,100
;max.
Zählumfang
0
bis
99
brlo
TIM0_ende
inc
sek
clr
hsekTIM0_ende:

out
SREG,sicher
retiWrCOM:

sbi
portb,TXD
;Senden
(aus
Lernpaket-Datei
einkopieren)
ldi
Delay,38
D4:

dec
Delay
brne
D4
ldi
Count,8L2:

sbrc
A,0
rjmp
OFF
nop
rjmp
ONON
:
sbi
portb,TXD
rjmp
BitDOFF:
cbi
portb,TXD
rjmp
BitDBitD:
ldi
Delay,38
D5:

dec
Delay
brne
D5
lsr
A
dec
Count
brne
L2
cbi
PORTB,TXD
ldi
Delay,38
D6:

dec
Delay
brne
D6
ret
ASCII-Ausgabe
von Lutz G.
Hier eine Erweiterung des Programms „Frequenz" aus dem Lernpaket Mikrocontroller mit einer Dezimal-Ausgabe in ASCII. Die Umwandlung der 2-Byte-Frequenzwerte in eine 5-stellige BCD-Zahl ist einfach und überschaubar.
Downlaod: Frequenzmesser.zip
Auszug aus dem Programm:

Clr
BCD4
Clr
BCD3
Clr
BCD2
Clr
BCD1
Clr
BCD0Weiter:

Cpi
freqlow,0
Brne
Abziehen
Cpi
freqhigh,0
Breq
Schluss
Dec
freqhighAbziehen:

Dec
freqlow
Inc
BCD0
Cpi
BCD0,10
Brlo
Weiter
Clr
BCD0
Inc
BCD1
Cpi
BCD1,10
Brlo
Weiter
Clr
BCD1
Inc
BCD2
Cpi
BCD2,10
Brlo
Weiter
Clr
BCD2
Inc
BCD3
Cpi
BCD3,10
Brlo
Weiter
Clr
BCD3
Inc
BCD4
Rjmp
WeiterSchluss:

retAusgabe:

Ldi
Wert,48
Ldi
A,32
Rcall
WrCOM
Mov
A,BCD4
Add
A,Wert
Rcall
WrCOM
Mov
A,BCD3
Add
A,Wert
Rcall
WrCOM
Ldi
A,46
Rcall
WrCOM
Mov
A,BCD2
Add
A,Wert
Rcall
WrCOM
Mov
A,BCD1
Add
A,Wert
Rcall
WrCOM
Mov
A,BCD0
Add
A,Wert
Rcall
WrCOM
Ldi
A,32
Rcall
WrCOM
Ldi
A,72
Rcall
WrCOM
Ldi
A,122
Rcall
WrCOM
Ldi
A,32
Rcall
WrCOM
Ret











