Heute bildet die eigene Homepage in Internet so eine Art "virtuelle Duftmarke". Bei Funkamateuren gab es in der guten alten Zeit einen ähnlichen Drang, mit automatisch betriebenen Stationen (Repeater oder Funkbaken) eine vergleichbare "Duftmarke" zu setzen. Er wurde allerdings reglementiert (man benötigte für unbemannten Betrieb eine Sondergenehmigung) und war technisch recht aufwenig, da die erforderliche Ablaufsteuerung und der Morse- Rufzeichengeber ein wahres "TTL-Grab" bildeten. Inzwischen ist das sehr einfach geworden; selbst mit einem Attiny13 lässt sich erstaunlich viel "anstellen".
Ein effizientes Verfahren, Morsezeichen zu codieren, fand sich im WWW, es ist schon mehr als 10 Jahre alt und wurde von mehreren Autoren aufgegriffen; die Umsetzung erfolgte damals in Assembler auf PIC-Mikrocontrollern. Eine kompakte Realisierung ist aber auch in Bascom auf einem AVR möglich.
Prinzip der Codierung:
- 1 Byte pro Zeichen, niederwertiges Bit zuerst
- hat das Bit den Wert 0: Morsepunkt (dit)
- hat das Bit den Wert 1: Morsestrich (dah)
- da Morsezeichen unterschiedlich lang sind, ist ein Ende- Zeichen erforderlich; es ist ebenfalls ein 1 - Bit
- Beispiel Morsezeichen "a" (dit dah): &B00000110
- Beispiel Morsezeichen "9" (dah dah dah dah dit): &B00101111
- Auslesen der codierten Zeichen: niederwertigstes Bit auslesen, Byte um 1 Stelle nach rechts schieben, niederwertigstes Bit auslesen. Ist der Wert des gesamten Bytes nur noch 1, ist das Zeichen komplett.
realisierte Varianten
- eine Bake, die 5 sec. Dauerton, anschließend max. 52 Zeichen Text aussendet und für 8 sec pausiert
- eine Bake, die 5 sec. Dauerton, anschließend max. 104 Zeichen Text aussendet und für konfigurierbare Zeit pausiert
- eine Bake, die max. 46 Zeichen Text aussendet, dann zwei analoge Spannungswerte und den Status eines Alarmkontakts
Hardware
Die Platine im Titelbild ist die Hardware für die Varianten 1 und 2 und dient nur als Anregung; nicht benötigte Schaltungsteile können weggelassen werden. An den NF- Ausgang muss noch ein Poti oder ein Spannungsteiler angeschlossen werden, dessen Dimensionierung vom eingesetzten Sender bzw. Funkgerät abhängt.

Der Attiny13 ist für folgende Signale beschaltet:
Ein NF-Signal an Pin5 (PB0/OC2A); es wird über einen Schutzwiderstand von 10 kOhm zur Weiterleitung an den NF-Eingang eines Senders bereitgestellt; ein Piezo-Buzzer dient als Mithörkontrolle. Ein parallel zur NF getaktetes Schaltsignal an Pin2 (PB3) wird durch Q1 invertiert und passt so zum Telegrafieanschluss üblicher Amateurfunkgeräte. Soll das Sendegerät nach jedem Zyklus abgeschaltet und vor Beginn wieder eingeschaltet werden, ist das mit der Schaltstufe für +12V und ca. 1 A an Pin3 (PB4) möglich. Das Layout- Programm EAGLE ist zwar nicht für das Design von Streifenleitungs-Platinen gedacht; lässt sich aber so weit "hinfummeln", dass eine Vorlage für eine Streifenleitungsplatine angedeutet wird)

Diese Schaltung entspricht Variante 3. Zwei Spannungsteiler 1:9 aus 82 kOhm und 10 kOhm an PB2/ADC1 und PB4/ADC2 teilen 0...10 V auf 0...1,1 V herunter (1,1 V ist der interne Referenzwert des ADC); an PB1 liegt ein Anschluss für einen Schalter, der an Masse geht. Wird er geschlossen und der so jeweilige Pin auf Masse gezogen, wird dieser Status als Alarm gemeldet. Die Eingänge sind als Schutz gegen HF- Einstrahlung jeweils mit Kondensatoren abgeblockt. Auch hier wieder ein Vorschlag für die Anordnung auf Streifenleitungs-Platine.

Software
Die Bascom-Listings sind ausführlich kommentiert; daher nur ein paar Anmerkungen:
Variante 1 lässt noch viel Platz im Flash, Engpass für die Länge des Bakentextes ist das SRAM von lediglich 64 Byte. Der Bakentext muss komplett ins SRAM kopiert werden; da die sonstigen Variablen auch noch einige Bytes abzwacken, ist daher bei etwas über 50 Zeichen Schluss. Zwischen den Aussendungen geht der Attiny jeweils kurz in Powerdown, wird aber nach max. 8 sec durch einen Watchdog-Reset geweckt.
Das EEPROM ist zwar ungenutzt, aber durch die Franzis- Programmiersoftware MicroISP.exe nicht direkt beschreibbar. In Variante 2 wird daher ein zweiter Bakentext auch zunächst im Flash (also im Programmspeicher) abgelegt und bei Neustart des Programms als erstes ins SRAM und von dort ins EEPROM kopiert. Anschließend wird der erste Bakentext ins SRAM kopiert. Nun können beide abgerufen werden.
Die Pause zwischen den Aussendungen ist in dieser Variante 2 konfigurierbar. Da der Timer bereits belegt ist, wird der Watchdog wird für den Interrupt- Betrieb konfiguriert und löst alle 8 sec. einen Interrupt aus. Diese werden in einer Zählschleife gezählt und bei Überschreiten eines Grenzwerts wird in die Baken- Routine verzweigt.
Variante 3 gibt einen Bakentext aus und misst anschließend jeweils die Spannung an PB2/ADC1 und PB4/ADC2. Der Wert wird auf 2 Stellen umgerechnet und gesendet. Dann wird der Eingang PB1 abgefragt. Er liegt durch den internen Pullup auf High. Wird er durch den externen Schaltkontakt auf Masse gezogen, wird eine Alarmmeldung angehängt.
Ich habe mal versucht, Variante 2 und 3 zu kombinieren und so die interne Hardware des Attiny vollständig zu nutzen - Flash, SRAM und EEPROM, ADC, Watchdog und alle I/Os - aber das Flash war immer ein paar Prozent zu klein :-)
Downloads:
Software
Platinen
Literaur: Lernpaket Mikrocontroller-Technik mit Bascom
Neue Software
Bei den alten Versionen hatte ich die Speichertexte aus den Data- Zeilen erst in ein Feld (Array) ins SRAM kopiert und dort weiterbearbeitet. Das knappe SRAM war jedoch ein lästiger Flaschenhals. Viel praktischer ist es, die Speichertexte direkt aus den Data- Zeilen zu lesen. Mit dem Befehl "Restore" wird der Zeiger zunächst auf den Anfang des Data- Blocks gesetzt und mit jedem "Read"- Vorgang wird das jeweils nächste Byte gelesen. Das Programm Tiny-Morse-beacon3.bas kann nun einen deutlich längeren Text auslesen (bis zu etwa 540 Bytes!), geht dann in Powerdown und wird nach 8 sec. durch einen Watchdog- Reset wieder aufgeweckt.
Das Programm Tiny-Morse-Beacon3-adc.bas fragt wie die alte Version zusätzlich drei Eingangspins ab und fügt dynamisch zwei Analogwerte und einen Zustand in den Text ein. Der Texte wurde aufgeteilt: Message3 ist der Haupttext, Message 1 enthält nur die Zahlen von 0 ....9 und Message 2 die verbindenden Textelemente zwischen den Messwerten. Auch hier werden die Texte aus Message3 direkt aus den Data- Zeilen gelesen. Die Ziffern der Analogwerte werden durch die Funktion "Lookup(N,Message2)" in Morsebytes umgewandelt; die verbindenden Textelemente stehen in Message2. Message1 kann nun etwa 50 Bytes lang sein, dann ist das Flash voll. Soll es mehr Text sein, kann der Watchdog- Aufruf durch einen simplen Wait- Befehl ersetzt werden, dann sind knapp 130 Bytes "drin".
Download: Bascom-Quelltexte