Pfad: Home => AVR-Übersicht => Anwendungen => DCF77-Empfänger => DCF Display serielle Signale
DCF77-Empfang Anwendungen von
AVR-Einchip-Prozessoren AT90S, ATtiny, ATmega und ATxmega
DCF77 Anzeige der seriellen Signale
Logo

6 DCF77 Display mit ATtiny24

Das Display als Anzeige Dieses Teil
  1. empfängt die seriellen Signale und zeigt sie auf einer LCD an,
  2. ist mit der ATtiny24-Experimental-Schaltung mit LCD aufgebaut, die einfach per sechspoligem Steckverbinder angekoppelt ist und eine vierzeilige LCD antreibt,
  3. verwendet die in LCD beschriebene Software lcd.inc, um die LCD anzusteuern, und
  4. empfängt serielle Signale vom ATtiny45-Controller und stellt sie in verschiedenen Formaten auf der LCD dar,
  5. hat ferner eine Sekundenanzeige, die aber einfach nur von 0 bis 59 zählt.
Sie kann als Uhr mit einem der hier vorgestellten Empfängern betrieben werden und zeigt Uhrzeit und Datum an sowie Statusinformationen des Empfängers.

6.1 Anschluss an den Empfänger

Mit einem sechsadrigen Flachbandkabel wird der Datenanschluss der ATtiny24-Experimentalschaltung mit dem Empfängercontroller verbunden:
  1. Der Clockausgang SCM des ATtiny45-Controllers wird mit PA0 der ATtiny25-Schaltung verbunden.
  2. Der Datenausgang SDM wird mit PA1 verbunden.
  3. Der VCC-Anschluss wird mit den +5V des Empfängers verbunden, so dass LCD-Modul und Empfänger aus derselben Spannungsquelle versorgt werden.
  4. Die beiden GND-Anschlüsse werden ebenfalls verbunden.
Alles weitere erledigt die Software des ATtiny24.

6.2 Anzeige

Anzeige beim Start Beim Start und ohne serielle Eingangssignale startet das Programm mit dieser Anzeige.

In Zeile 2 werden hinter Raw data: die eingehenden Rohdaten dargestellt. Das Format des ersten Zeichens (rRxH) ist ASCII, dann folgt rRxL in hexadezimalem Format. Hinter F: gibt es den PWM-Wert der Frequenzeinstellung in dreistelligem dezimalem Format.

Die eingehenden DCF77-Daten für die Zeit (Stunden und Minuten) folgen in Zeile 3. Die Sekunden sind intern erzeugt und laufen auch ohne DCF77-Signal. Hinter S: folgt der PWM-Wert der Signalabschwächung in 3-Digit-Dezimal-Format.

Zeile 4 bringt den Wochentag und das Datum sowie Signalfehlerkennzeichungen (hinter E:).

Erst mit eingehenden Signalen vom ATtiny45-Controller kommt Leben in diese Bude.

6.3 Software für den ATtiny24

Die Software kann als Assembler-Quellcode hier heruntergeladen oder im Browser hier angezeigt werden.

In den folgenden Kapiteln ist die Funktionsweise der Software näher dargestellt.

6.3.1 Empfang der seriellen Signale

Der serielle Empfang funktioniert folgendermaßen:
  1. Bei jedem Pegelwechsel an PA0 (serielles Clock-Signal) wird der PCINT0-Interrupt ausgelöst.
  2. Ist der PA0-Eingang nach dem Pegelwechsel High, dann ist ein Bit am Dateneingang abzuholen. Dieses wird in zwei Register (rSerialH:rSerialL) von Bit 0 her eingerollt. Die Anzahl empfangener Bits wird im Register rSerialBits abwärts gezählt. Erreicht der Zähler Null, werden die 16 Bits in das Registerpaar rRxH:rRxL kopiert und die Flagge bRxIn gesetzt. Außerdem wird der Time-Out-Zähler rSerialTO auf einen Anfangswert gesetzt.
  3. Außerhalb der PCINT-Routine erfolgt das Abwärtszählen des Time-Out-Zählers. Erreicht dieser Zähler Null, wird die Anzahl empfangener Bits auf den Anfangswert gesetzt, schon empfangene Bits werden damit verworfen.
Die weitere Verarbeitung der empfangenen 16 Bits in rRxH:rRxL erfolgt außerhalb der Interrupt-Service-Routine. Je nachdem welches ASCII-Zeichen in rRxH enthalten ist, werden die unteren Bits in rRxL unterschiedlich behandelt. Alle dazu nötigen Informationen stehen in der Tabelle PosTable::
  1. Jede Zeile der Tabelle beginnt mit dem betreffenden ASCII-Zeichen.
  2. Die beiden folgenden Bytes bezeichnen die Zeile und die Spalte auf der LCD, an der die nachfolgenden Operationen erfolgen sollen (0-basiert).
  3. Handelt es sich bei dem betreffenden Parameter um eine DCF77-Information, wird deren Position im SRAM-Puffer für Datum/Zeit als Versatzbyte angefügt. Handelt es sich nicht um DCF77-Informationen, wird der Wert 255 angefügt.
  4. Die Art der Anzeige kodiert das nächste Byte. Eine 0 gibt rRxL als ASCII-Zeichen aus, eine 1 als zweistellige Dezimalzahl, eine 2 als dreistellige Dezimalzahl, eine 3 als Wochentag (0 = Montag) und eine 4
  5. Die abschließende Null in jeder Zeile sorgt für eine geradzahlige Anzahl an Bytes.
  6. Die Tabelle endet mit zwei Nullen.
Erweiterungen der Tiny45-Controller-Software mit weiteren Parametern können in diese Struktur leicht eingearbeitet werden. Die Struktur kann auch 1:1 in andere Anzeige-Controller übernommen werden.

6.3.2 Sekundentakt und Schnittstellen-Time-Out

Als Sekundentakt wird der Timer TC0 verwendet. Er teilt das mit dem Prescaler durch 8 geteilte Clock-Signal von 1 MHz im CTC-Modus durch 125. Der Interrupt erfolgt daher nach 8 * 125 / 1.000.000 = 1 ms. Der Interrupt vermindert den Inhalt des Doppelregisters rSecH:rSecL um Eins. Erreicht dieses Null, wird die Flagge bSec gesetzt und das Doppelregister wieder mit 1.000 gestartet.

Bei gesetzter Flagge werden die Sekunden im SRAM erhöht (bei 60 wird wieder bei Null begonnen) und diese als 2-stellige Dezimalzahl an der Sekundenposition der LCD ausgegeben.

Gleichzeitig mit dem Millisekunden-Interrupt wird auch der Time-Out-Wert der seriellen Empfangsmaschinerie um Eins erniedrigt. Erreicht dieser nach 8 Millisekunden Null, ohne dass ein Bit eingegangen ist, wird die Anzahl empfangener Bits neu begonnen.

6.3.3 Debugging-Option

Um die Auswertung eingegangener serieller Signale im Simulator zu testen, gibt es zu Beginn noch den Debug-Schalter Debug_display. Steht dieser auf Yes wird die Bit-Kombination in cDebug_displayH und cDebug_displayL getestet. Der Debug-Schalter muss für die endgültige Version wieder auf No gestellt werden.

©2019 by http://www.avr-asm-tutorial.net