![]() |
AVR-Microcontroller |
|
|
Das APRS-Thermometer
Der DIGI_NED APRS Digipeater DK5JG-2 (Foto -->) steht in einem abgetrennten Raum mit unregelmäßiger Heizung. Zur Kontrolle wollte ich die Temperatur in diesem Raum messen. Also musste eine Möglichkeit her, die Temperatur am Digi zu messen, möglichst ohne das Shack zu verlassen. Die Telemetrie von DIGI_NED bot sich für die Übertragung an, zumal die Software schon auf dem System lief. Das ThermometerEin Temperatur-Zeit-Modul der Firma Conrad-Electronic,
Bestellnummer 195588, misst schon seit Jahren in meinem Shack die Temperatur.
Es hat einen seriellen Datenausgang für die Temperaturdaten.
Selbstverständlich passt das serielle Interface des Thermometers nicht zum Telemetrieinterface von DIGI_NED. Zur Decodierung des seriellen Datenstroms aus dem Thermometer eignet sich gut ein kleiner Microcontroller vom Typ AT90S1200 der Firma Atmel. Er übernimmt auch das Multiplexen der 8 Bit Daten, damit DIGI_NED sie lesen kann. Es entstand die folgende kleine Schaltung. Die SchaltungDie beiden Transistoren auf der linken Seite passen den Ausgangspegel des Moduls an den TTL-Pegel des Controllers an, das Modul wird mit einer 1,5V Batterie betrieben. Die positiven Impulse auf dem Data-Pin bzw. dem Clock-Pin des Moduls schalten den zugehörigen Transistor durch und erzeugen damit einen TTL-0-Impuls am Kollektor und an den Eingangspinnen des Controllers.
Der Controller kommt mit minimaler externer Beschaltung aus, nur ein Quarz mit den beiden Kondensatoren C1 und C2 sowie eine kleine Reset-Schaltung aus R1 und C5. Die Quarzfrequenz kann im Bereich 2MHz bis 8MHz liegen. Sie spielt für die Funktion der Schaltung keine Rolle. die Kondenstatoren C3 und C4 sind Stützkondensatoren für die Stromversorgung. Die Ausgänge PB0 bis PB3 sind mit den Eingangs-Steuerleitungen der Druckerschnittstelle des PCs verbunden. (PB0: Pin 13, PB1: Pin 12, PB2: Pin 11, PB3: Pin 10 - siehe DIGI_NED Dokumentation) Das Strobe-Signal, Pin 1, der Schnittstelle ist mit dem Pin PD2 verbunden. Der AufbauDie Schaltung ist auf einer kleinen Platine montiert, die mit dem 25-poligen Sub-D-Stecker direkt auf die Druckerschnittstelle des PC gesteckt wird. Sie kann aber genauso gut auf einer Lochraster-Platine aufgebaut werden. Bei meinem Temperaturmodul sind die beiden Transistoren mit den Widerständen schon in das Modulgehäuse eingebaut, deshalb sind sie nicht auf der Platine.
Die Stromversorgung
Ein kleines Problem stellt die Stromversorgung des Controllers dar. Ursprünglich wollte ich ihn aus den Datenpins der Druckerschnittstelle über eine Reihe von Dioden versorgen. Leider waren auf diese Art nur ca. 2,5V Spannung erreichbar. Dies ist zu wenig für den Controller. Der Platz und die unbenutzten Löcher auf der Musterplatine zeugen von dem Versuch. Ein externes Steckernetzteil wollte ich nicht einsetzen. Der PC hält genau die passenden Spannungen mit hinreichender Stromstärke bereit, man muss sie nur heraus holen. Dazu habe ich vier Löcher in ein Slotblech gebohrt, für zwei 4mm Buchsen und zwei 2,3mm Buchsen. Von einem Verlängerungskabel für die Stromversorgung der Plattenlaufwerke habe ich den Steckerteil abgeschnitten und die Kabel mit den vier Buchsen verbunden:
Parallel zu den Buchsen, 5V und 12V, ist jeweils ein 100nF Kondensator geschaltet, um HF-Reste aus dem PC weg zu filtern. Dem gleichen Zweck dient der Ferrit-Halbschalen-Kern um die Kabel. Mit einem Oszilloskop sollte man prüfen, ob die Spannungen hinreichend frei sind von Brumm- oder HF-Überlagerungen, maximal einige Millivolt. An der Controller-Platine hängt ein Kabel mit einem roten (+) und einem schwarzen (-) 2,3mm Stecker. Sie werden mit den Buchsen verbunden. Damit ist die 5V Stromversorgung sichergestellt. Über diesen Betriebsspannungs-Ausgang versorge ich ausserdem den Transceiver des Digipeaters. Der PC ist bis auf das Mainboard und das Diskettenlaufwerk zum Booten leer. Deshalb stehen die ca. 8A, die das Netzteil des PCs bei 12V liefert, fast vollständig für andere Zwecke zur Verfügung. Der Transceiver braucht etwa 2,5A bei Sendung. Diese Last verkraftet das Netzteil ohne Probleme. Keine Garantie, dass das bei allen PC-Netzteilen so ist. Bitte sehr sorgfältig mit den Spannungen umgehen, es darf keinen Kurzschluss geben! Für Schäden übernehme ich keine Haftung.
Das Interface auf der Rückseite des Digi-Rechners Die SoftwareDie Grafik zeigt das serielle Übertragunsprotokoll des Temperatur-Moduls. Der erste Impuls des Clock-Signals ist verlängert, dann kommen 12 kurze Clock-Impulse. Das erste Datenbit gibt positive oder negative Temperaturen an. Dieses Bit wird in der Software überlesen. Es folgen dann nacheinander die Zehner-, die Einer- und die Zehntelstelle der Temperatur in Grad Celsius als BCD-Zahlen.
Das Programm wartet so lange, bis ein verlängerter Clock-Impuls kommt. Bei jeder der folgenden abfallenden Flanken des Clock-Signals wird das zugehörige Datenbit eingelesen und in ein 16 Bit Schieberegister geschoben. Dadurch entstehen drei Nibbles mit BCD-Zahlen, in denen die Temperatur codiert ist. Durch Multiplikation/Addition 10er*100 + 1er*10 + 0,1er*1 entsteht eine 8 Bit Binärzahl. Es lassen sich also Temperaturen von 0°C bis 25,5°C darstellen. Höhere Temperaturen waren bei der Entwicklung wegen der Jahreszeit, im Winter, nicht zu erwarten. Über 25,5°C geht es wieder bei 0° weiter. Im Sommer wird 100 von der Binärzahl subtrahiert, kleine Änderung im Quelltext, und anschliessend über die APRS-Gleichungen wieder addiert, siehe unten. Das ergibt dann einen Messbereich von 10°C bis 35.5°C. Mit etwas Mathematik lässt sich der Messbereich beliebig verschieben und strecken. Negative Temperaturen können nicht dargestellt werden. Das ist nicht nötig, weil der Digipeater im Haus steht. Der Start eines Clock-Impulses wird an einem externen Interrupt erkannt. Dazu dient der Timer-Interrupt. Der Timer wird bei einer steigenden Flanke am Eingang T0 von -1 auf 0 hoch gezählt und löst daraufhin den Interrupt aus. DIGI_NED liest den Eingangswert der Druckerschnittstelle in zwei Teilen im Multiplexbetrieb ein. Zur Unterscheidung wird das Strobe-Signal umgeschaltet. Zunächst wird Strobe auf "1" geschaltet, danach folgt das Einlesen der Datenbits B1 - B4. Dann wird Strobe wieder auf "0" geschaltet und die restlichen Datenbits B5 - B8 werden eingelesen.
Die Software gibt nach einer positiven Flanke des Strobe-Signals das höherwertige Nibble des Ergebnisses aus, nach einer negativen Flanke das niederwertige Nibble. Ein externer Interrupt entsprechender Richtung sichert schnellste Reaktion auf die Anforderung durch den PC. DIGI_NED EinstellungenUm das Telemetriesystem von DIGI_NED einzurichten sind einige Eintragungen vorzunehmen in der Datei: digi_ned.ini Wenn die Telemtriewerte als Bake ausgesendet werden sollen, muss der Eintrag "telemetry:" vorbereitet sein. Bei DK5JG-2 ist eingetragen: telemetry: 60 all lpt1_8 DIGI_DEST Das heißt: Zur Formatierung der Telemetriewerte kann man die Datei digi_tlm.ini verwenden. Sie wird aktiviert mit dem Eintrag: tele_info: digi_tlm.ini Die Datei enthält im Winter folgende Einträge: :DK5JG-2 :PARM.Temp. :DK5JG-2 :UNIT.deg.C :DK5JG-2 :EQNS.0,0.1,0 :DK5JG-2 :BITS.11111111,DIGI_NED Telemetry Die Datei enthält im Sommer folgende Einträge: :DK5JG-2 :PARM.Temp. :DK5JG-2 :UNIT.deg.C :DK5JG-2 :EQNS.0,0.1,10 :DK5JG-2 :BITS.11111111,DIGI_NED Telemetry Also: Das Aussenden der Datei ist bei DK5JG-2 eingeschaltet, Eintrag: send: 60 all DIGI_DEST digi_tlm.ini
DownloadDie Software für das Interface ist frei, unterliegt aber der GNU Public License. Wegen der unterschiedlichen Dateiformate in Linux/Unix und der DOS-Welt gibt es zwei Dateien. Die Texte selber sind identisch. Linux/Unix-Version des Quelltextes,
auspacken mit: "tar xzf thermos_linux.tgz".
|