ATtiny202 Infrarot-Telegraphie
Für Morse-Übungskurse im Amateurfunk-Club habe ich eine
Übertragungsstrecke mit Infrarotlicht aufgebaut. Der Empfänger besteht
aus einem integrierten IR-Empfänger TSOP31236 für 36-kHz-Signale. Ein
Piezo-Schallwandler wird direkt angeschlossen. Damit kann man
Infrarot-Fernbedienungen testen und das Störumfeld beurteilen. Wenn zum
Beispiel Leuchtstoffröhren im Raum sind, hört man ein unregelmäßiges
Knistern.
Der Sender soll nun so arbeiten, dass er einen hörbaren Ton auf das
36-kHz-Signal aufmoduliert, das dann am Empfänger hörbar wird. Versuche
mit einem Signalgenerator und eine IR-Sendediode haben gezeigt, dass
optimale Empfangsergebnisse erzielt werden, wenn die 36-kHz-Impulse
sehr kurz sind, und man nur kurze Sequenzen aus ca. 10 Impulsen sendet.
Das Modulationssignal sollte also kein symmetrisches Rechteck sein,
sondern aus einer Folge kurzer Impulse bestehen.
Eine gute Morsetaste ist nicht leicht zu finden oder zu bauen. Deshalb
soll hier ein kapazitiver Berührungssensor verwendet werden. Das
Arbeitsprinzip ist einfach. Der Port wird aktiv low geschaltet und
damit entladen. Für eine Messung wird er in den Eingangszustand mit
internem Pullup umgeschaltet. Der Controller misst dann die Zeit, bis
der Eingangszustand high gelesen wird. Normalerweise dauert das nicht
mal eine Mikrosekunde. Bei einer Berührung steigt jedoch die Kapazität,
und es wird eine größere Verzögerung gemessen. Das entspricht einer
gedrückten Morsetaste.
So gut wie jeder kleine Mikrocontroller kann diese Aufgaben übernehmen.
Den ATtiny202 habe ich deshalb gewählt, weil er über seinen UPDI-Pin
programmiert werden kann und dazu nur ein extrem einfaches
Programmiergerät braucht. Es besteht aus einem USB-Seriell-Wandler und
einem einzelnen Widerstand.
//IRCW202, Touch PA1, IR-LED PA3
#include <Arduino.h>
char t=0;
void setup() {
PORTA.DIRSET = 0x08; //Ausgang PA3
PORTA.DIRSET = 0x02; //Ausgang PA1
PORTA.PIN1CTRL = 0x08; //Pullup PA1
}
void loop() {
t=0;
PORTA.DIRCLR = 0x02;
while(!(VPORTA.IN & 0x02)){
t++;
}
PORTA.DIRSET = 0x02;
if (t>1){
for(char n=0; n<10; n++){
PORTA.OUTSET = 0x08;
delayMicroseconds (3);
PORTA.OUTCLR = 0x08;
delayMicroseconds (21);
}
delay(1);
}
}
Die Software wurde mit Visual Studio Code und PlatformIO im
Arduino-Framework entwickelt. Das kompilierte Programm firmware.hex
kann mit dem Tool pymcuprog.exe unverändert auch in den ATtiny402
gebrannt werden. Größe und Form der Sensorfläche kann experimentell
ermittelt werden. Beim Musteraufbau hat es sich bewährt, die
Sensorkontakte mit Tesafilm zu isolieren.