Mit einem Mikrocomputer
ATMEL AVR Tiny12V/Tiny12L wird eine kleine piepsende Schaltung aufgebaut.
Die Schaltung gibt mit
niedriger Geschwindigkeit Morsesignale ab; die Morsecodezeichen werden
schülerInnenspezifisch
programmiert, so dass jedeR
einen eigenen Text als Morse-Pieptöne hören kann.
Der Mikrocomputer ist in
minimaler Schaltung ausgeführt; es gibt nur einen Ein-Ausschalter zum
ruhigstellen.
Die Programmierung erfolgt
in Assembler mit einer Interruptroutine für einen gleichmäßigen Piepton (ca.
2,5 kHz).
Der Morsecode entsteht,
indem im Programm die Unterprogramme S, P, A in richtiger Reihenfolge mehrfach
aufgerufen werden.
S: Strich, lang; P:
Punkt, kurz; A: Abstand, lange Pause.
Als Lautsprecher wird ein Piezoelement
(ohne eigene Elektronik) genutzt, dass im Gegentakt an zwei Portpins des
Mikrocomputers
angeschlossen ist. Die
Stromversorgung erfolgt durch eine Lithium-Knopfzelle 3V mit einem
Abblock-Kondensator 220 nF.
Der Tiny12V ist wegen seines
erweiterten Versorgungsspannungsbereichs vorzuziehen.
Vorderseite
Rückseite
Als Basis dient eine
Lochrasterplatine mit Leiterstreifen, die an einer Seite eine
Leiterbahntrennung in fünf Streifen erhalten hat;
jenseits Pin 1 des
Mikrocomputers bis zum Schalter am Rand.
Durch geschickte Platzierung
der Bauteile entsteht die richtige Schaltung; es werden zwei Drahtbrücken
benötigt –
in eine davon wird der
Schalter eingeschleift.
>>Audiobeispiel mit
Zeichenkette NO BS<<
Schaltplan
Bauteilanordnung
von der Lötseite aus
gesehen.
Programmlisting
Hier wird der Morsecode für
die Zeichenkette NO BS ausgegeben.
Der Mikrocomputer arbeitet
mit internem Takt von ca. 1 MHz, alle 3 * 64 Takte wird der Interrupt durch
einen Timer ausgelöst.
; es soll port b 3 - 4 auf
pin 2 u 3 gemeinsam piepsen
.include "tn12def.inc"
.org 0x000
.def dauer = R18
;Registervariablen
innerhalb der INT-Routine
.def intcnt = R21
.def intfrei = R22
.def inttogg = R23
.def intflgs = R24
.def inttmp = R25
; Vektoren
rjmp reset
nop
nop
rjmp timint
nop
reti
.org 0x20
reset:
ldi
dauer, 0x18
out ddrb,dauer ; b3 b4 auf ausgang
ldi dauer, 0x00
out portb,dauer ; alles auf LOW
ldi dauer, 253
out tcnt0,dauer ; vorladen zaehler
ldi dauer, 0x03 ;3
out tccr0,dauer ; int
clock / 64
ldi dauer,
0x02
out timsk,dauer
; tim int ena
sei
; int enable
ldi inttogg, 0x10 ;
initiales Port-Muster
rjmp neu
timint: ; ISR fuer Timer
in intflgs, SREG ; flags sichern
ldi inttmp, 253 ; 253 (256 - 3 ! )
out tcnt0, inttmp ; vorladen zaehler
dec intcnt ; Zeitzaehler manipulieren
com inttogg ; ein-aus für piepsfrequenz
mov inttmp,inttogg
and
inttmp,intfrei ; piepen an aus
out
portb,inttmp
out
SREG,intflgs ; flags restore
reti
timwait: ; Verzoegerung ,
nutzt intcnt aus Timer-ISR
ldi intcnt,255
wait:
cpi
intcnt,0 ; intcnt wird in Timer ISR heruntergezaehlt
brne wait
ret
;
neu:
; HIER die calls fuer die
Morsezeichen
rcall s
rcall p
rcall a
rcall s
rcall s
rcall s
rcall a
rcall s
rcall p
rcall p
rcall p
rcall a
rcall p
rcall p
rcall p
rcall a
rcall
a
rcall a
rjmp neu
P:
ldi intfrei, 255
ldi dauer, 2
pl1:
rcall timwait
dec dauer
brne
pl1
ldi intfrei, 0
ldi dauer, 8
pl2:
rcall timwait
dec dauer
brne pl2
ret
S:
ldi intfrei,
255
ldi dauer, 10
sl1:
rcall timwait
dec
dauer
brne sl1
ldi intfrei, 0
ldi dauer, 8
sl2:
rcall timwait
dec dauer
brne sl2
ret
A:
ldi intfrei, 0
ldi dauer, 12
al1:
rcall timwait
dec dauer
brne
al1
ret