AT90S8515PDIP

AVR-Microcontroller
im Ham-Shack

ATMEL Controller

deutschenglish
deutsche Seiten englisch pages

Startseite

AVR-Projekte

APRS-
Telemetrie-
Interface

APRS-
Thermometer

GPS-Simulator

AVR-Kreis

AVR-Programmierer

AVR-Megaprog

RCEN-Blower

Morsetasten     FM-Keyer
    Microbug
    Nanobug
    Picobug


Amateurfunk

DARC-OV R01

Clubstn. DL0DX

Relais DB0SJ

DL-Contest Journal


Schule

Kombiampel

     

Das APRS-Thermometer

Digi von vorne

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 Thermometer

Ein 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.
Download des Datenblattes für das Modul.

Temperaturmodul

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 Schaltung

Die 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.

Schaltbild

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 Aufbau

Die 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.

Platine Temeraturmodul im Gehäuse

 

Die Stromversorgung

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:

  • Das rote, +5V, mit der roten 2,3mm Buchse
  • Das daneben liegende schwarze, 0V, mit der schwarzen 2,3mm Buchse
  • Das gelbe, +12V, mit der roten 4mm Buchse
  • Das andere schwarze, 0V, mit der schwarzen 4mm Buchse
Das andere Kabelende wird mit einem Stromversorgungsstrang für die Platten 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.

Thermometerinterface

Das Interface auf der Rückseite des Digi-Rechners

Die Software

Die 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.

Protokoll Temperatur-Modul
Serielles Protokoll des Temperatur-Moduls

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.

DIGI_NED protokoll
Das DIGI_NED-Protokoll

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 Einstellungen

Um 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:
Sende alle 60 Minuten auf allen APRS-Ports die Daten des Druckerports LPT1 mit 8 Bit als Daten des ersten analog/digital-Wandlers über den bei DIGI_DEST eingetragenen Pfad.

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:
Der Messwert ist eine Temperatur
Maßeinheit Grad Celsius
Auswertungsgleichung T = 0*x²+0,1*x+0 (T : Temperatur, x : Messwert). Die Thermometerschaltung liefert Werte zwischen 0 und 255. Mit der Winter-Formel werden sie umgerechnet auf den Bereich 0°C bis 25,5°C. Die Sommer-Formel, T = 0*x²+0,1*x+10 (T : Temperatur, x : Messwert) liefert Werte zwischen 10°C und 35,5°C. Näheres zur Auswertungsgleichung in der APRS-Referenz.
Die letzte Zeile ist nur der Vollständigkeit halber da, sie hat bei der Analogmessung keine Bedeutung.

Das Aussenden der Datei ist bei DK5JG-2 eingeschaltet, Eintrag:

send: 60 all DIGI_DEST digi_tlm.ini

Zum Lesen der Temperatur einfach die Anfrage

tlm a1

an den Digi DK5JG-2 senden.

Er wird z.B. mit

Temp. 21.3 deg.C

antworten, je nach Temperatur in der Umgebung des Digipeaters.

Der Sendepfad ist allerdings nur kurz. Deshalb ist der Digi nur aus geringer Entfernung zu empfangen.

Download

Die 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".
Dos-Version des Quelltextes, mit Winzip auspacken.

Zaehler

 





zur Startseite Zur Startseite
nach oben nach oben
mailto Burkhard John
5.7.2006