Pfad: Home => AVR-DE => Anwendungen => Expertimentell => Sehr grosse Uhr   This page in english: Flag EN Logo
Sehr-grosse-uhr-Logo AVR-Anwendungen

Sehr grosse Uhr mit Sieben-Segment-Anzeige


Entwicklungsprojekt! Unfertig! Ungetestet! Software erst partiell fertig und noch in Entwicklung!

Sehr grosse Uhr mit riesiger Sieben-Segment-Anzeige

Das Folgende ist hier geplant:
  1. Zwölf große 7-Segment-Anzeigen zeigen das Datum und die Uhrzeit:
  2. Jedes Segment ist aus vier weißen 10-mm-LEDs aufgebaut, die Trennzeichen : für die Zeit blinken im Sekundenrhythmus, das Trennzeichen für das Datum ist in der deutschen Version ein ., in der englischen ein Schrägstrich.
  3. Das Datum und die Uhrzeit können
  4. Sehr stabile und verlässliche Zeit, sogar ohne DCF77, da mit einem 32,768 kHz-Quarz getaktet.
  5. Schönes, ansprechendes Design, z. B. mit gefärbtem Acrylglas, als Frontplatte und mit riesiger Rückwand aus Acryl.
Die Zeichnungen sind als LibreOffice-Draw-Dateien hier, die Design-Zeichnungen sind in der Datei hier und die Berechnungen in der LibreOffice-Calc-Datei hier verfügbar.

Top Display Hardware Aufbau Verwendung Software Algorithmen

1 Die Anzeige

Die Anzeige gibt es in zwei Versionen: entweder mit deutschem oder mit englischem Format.

Die obere Zeile mit sechs Anzeigen zeigt den Tag, den Monat und das Jahr, getrennt mit einem Punkt (deutsches Format) oder den Monat, den Tag und das Jahr, getrennt mit einem Schrägstrich (englisches Format). Bei beiden Versionen zeigt die untere Zeile die Stunde, die Minute und die Sekunde an, jeweils getrennt mittels Doppelpunkt.

Die beiden Ziffern der Zahlen wechseln in einem Multiplextakt: die Zehner werden von einem Anodentreiber eingeschaltet (A10), danach die Einer mit einem weiteren Anodentreiber (A1). Die sieben oder acht Kathoden der Zehner- und Einer-Ziffer sind miteinander verbunden und, jeweils zusammen mit den unteren beiden Ziffern, entweder an einen 16-poligen Steckverbinder geführt. In einer anderen Variante haben die vier Ziffern der beiden Reihen jeweils eine gemeinsame Schaltung aus zwei 74HC373-Speichern und 16 transistorierten Kathodentreibern und sind mit der Kontrollerplatine mittels 20-poligem Flachkabel verbunden. In diesem Fall sind an den Steckern auch noch die zwei Betriebsspannungs-Pins sowie der Latch-Enable (LE) und der Output-Enable (OE) zu den beiden 74HC373 verfügbar.

Die beiden folgenden Unterkapitel zeigen die DE- und die EN-Version im Detail.

1.1 Die DE-Version

Die DE-Version Das ist die DE-Version. Das Zeitformat ist TT.MM.JJ, das Trennzeichen ein Punkt. Beide Punkte sind zusammen verschaltet, die fehlenden zwei LEDs werden durch einen Dummy-Widerstand ersetzt (um den Kathoden-Konstantstrom-Treiber-Transistor thermisch zu entlasten).

1.2 Die EN-Version

Die EN-Version Das ist die englische Version. Das Anzeigeformat ist hier MM/TT/JJ, das Trennzeichen besteht aus jeweils vier LEDs. Die jeweils zwei LEDs beim Trennzeichen der Zeit sind zusammengeschaltet. Die englische Version braucht daher keinen Dummy-Widerstand.

2 Hardware

2.1 Controller mit 16-poligen Kathoden-Verbindern

Das Schaltbild ist zweigeteilt, weil es etwas zu groß wäre:
  1. der Controller-Teil mit allen peripheren Gerätschaften sowie die beiden 8-Bit-Ports, und
  2. die Speicher und Kathodentreiber, hier für das Jahr und die Sekunden (die beiden Tag/Stunden- und Monat/Minuten-Schaltungen sind bis auf die LE-Leitung identisch).

2.1.1 Controller-Teil

Schaltbild des Controller-Teils Das ist der Controller-Teil. Die folgenden externen Komponenten sind:

2.1.2 Speicher und Kathodentreiber

Speicher- und Kathodentreiber Schaltbild Das zeigt die Schaltung der Speicher und der Kathodentreiber für die Jahres- und Sekunden-Anzeige. Die beiden Speicher sind an die Ports PC und PD angeschlossen, sie speichern die beiden Zehnerziffern in der ersten Multiplex-Periode und die beiden Einer-Ziffern in der zweiten Periode. Die beiden 74HC373-Speicher treiben die 16 Kathoden-Konstantstrom-Transistoren, die jeweils an die 16-poligen Steckverbinder führen.

2.2 Controller mit 20-poliger Verbindung zu den Displays

Jeweils vier Displayziffern können auch mit zwei 8-Bit-Speichern und 16 Kathodentreibern ausgestattet werden. Die Verbindung zur Controllerplatine erfolgt dann mit 20-adrigem Flachband. Diese Variante wird im Folgenden beschrieben.

2.2.1 Controller-Tewil

Schaltbild der sehr großen Uhr Dies ist das Schaltbild des Controller-Teils mit den drei Verbindern zum Display. Die Module der Displays sind im nächsten Kapitel beschrieben.

Der Controller ist mit den bereits oben beschriebenen externen Komponenten verbunden. Nur die drei 20-poligen Steckverbinder sind gesondert.

2.2 Multiplexer-Speicher und Kathodentreiber

Schaltbild eines Display-Moduls Dies ist das Schaltbild für das Modul der Tages- und Stunden-Anzeige. Nur die Tages-Anzeige ist eingezeichnet, die Stunden-Anzeige geht in gleicher Wiese an die unteren Pins des 20-poligen Steckers. Dabei aber beachten, dass bei dem die Reihenfolge umgekehrt ist.

Alle Widerstandswerte sind für die 40-mA-Version und für 3,3 V Betriebsspannung ausgelegt. Für niedrigere Ströme sollte das Tabellenblatt Drivers konsultiert werden.

Die Module für die Monate/Minuten und Jahre/Sekunden sind identisch und unterscheiden sich nur durch die Latch-Enable-Leitungen. Sind am Kathodentreiber Bit 7 keine Segmente angeschlossen, macht das wegen der Vorwiderstände an der Basis des Transistors nichts aus.

2.3 LED-Ströme und -Spannungen

LED-Spannungen in Abhängigkeit vom Strom Duch die Wahl des Emitterwiderstands kann der Strom durch die LEDs beeinflusst werden. Der Strom kann zwischen 0 und 40 mA betragen. Effektiv liegt der durchschnittliche Strom dann bei 75% des eingestellten Stroms, da die Anodentreiber für 25% der Zeit abgeschaltet sind (während des Beschreibens der 74HC373 im aktiven Zeitschritt des Multiplexens).

Man beachte auch, dass der ungünstigste Fall, dass alle sieben Segmente eingeschaltet sind, bei Zeit und Datum nur sehr selten vorkommen. Und wenn, dann nur bei einer einzigen der beiden Ziffern. In der LibreOffice-Calc-Datei hier ist für alle Zeiten eines Tages sekundengenau und für alle Tage zwischen dem 1.1.2023 und dem 31.12.2059 ermittelt, welche Maximalanzahl und welche durchschnittliche Anzahl an Segmenten an ist (Vorsicht, die Datei hat 7,2 MB Größe und lädt sehr langsam). Das Ergebnis ist, dass von den 12*7 = 84 Segmenten maximal nur 41,5 und durchschnittlich nur 31,1 Segmente an sind (zuzüglich noch ein Segment für den Datumstrenner und ein halbes Segment für den Zeittrenner). Unter Berücksichtigung dieser Umstände habe ich den urspr&uunmLmglich vorgesehenen 36VA-Transformator letzten Endes durch einen 25VA ersetzt.

Bitte beachten, dass höhere Ströme auch nicht unbedingt zu mehr Helligkeit, allenfalls zu höheren thermischen Belastungen der LEDs führen.

Die Stromeinstellung beeinflusst natürlich auch die LED-Spannung. Im Berechnungsblatt habe ich die in der Darstellung angegebene Funktion zum Berechnen der Spannung der LEDs verwendet. Da jeweils vier LEDs gestapelt sind, hat das Einfluss auf die erforderliche Mindestspannung und wirkt sich auf die Tranformator-Auswahl aus.

LED-Spannungen Lieferung 2 Nach dem Erhalt von mehr als 300 LL-LEDs habe ich deren Spannungsverlauf ebenfalls ausgemessen. Mit dem Ergebnis, dass deren Spannungen etwas niedriger sind als die der ersten Lieferung. Das gibt etwas höhere Spannungen an der CE-Strecke der Kathoden-Konstantstrom-Treiber-Transistoren. Die Unterschiede sind aber nicht dramatisch.

LED-Strom bei verschiedenen Vorwärtsspannungen Und hier die umgekehrte Funktion, da es nicht ganz trivial ist, aus y = a * x2 + b * x + c das Ganze nach x aufzulösen.

Die Funktion kann man dazu benutzen, um die Folgen von Unterspannungen bei den LEDs auszurechnen. Kriegen die LEDs bei Überstrom-Bedingungen weniger Spannung, z. B. nur 0,2 Volt weniger (pro LED dann 50 mV weniger), dann kann man daraus den verringerten LED-Strom ermitteln. Es sind dann statt 35,8 mA nur 32,9 mA. Allerdings verringert sich durch den verkleinerten LED-Strom auch die Emitterspannung des BC547 um etwa 0,2 Volt, so dass sich dieser Verlust in etwa wieder ausgleicht. Ich habe daher darauf verzichtet, die Verhältnisse in einer ellenlangen Formel zu simulieren, da es eh nichts bringt: die Auslegung ist genügend robust, dass sie selbst Unterspannungen wegfängt.

2.3 Stromversorgung für 40 mA LED-Strom

Stromversorgung Schaltbild für 36VA Bei Strömen von 40 mA beläuft kann der gesamte Stromverbrauch aus einem 2x15V/25VA-Trafo gedeckt werden. Das hier zeigt das Schaltbild.

Wenn Du mit niedrigeren Strömen Vorlieb nehmen möchtest, kannst Du einen kleineren Trafo nehmen. Nur die Trafo-Parameter, die Sicherung und die Ströme sind anders. Konfiguriere das alles mit dem Rechenblatt Drivers (Anleitung siehe unten unter Konfiguration).

Spannungen der 25VA-Stromversorgung bei maximaler Last Das ist die Stromversorgung für 25VA unter maximaler Last. Die Mindestspannung von 16,42 V trifft ziemlich exakt das Minimum der Ladekurve, während das Maximum der Ladekurve genug Platz lässt, damit sich der BC547 beim Stromregeln austoben kann (zwei Volt Platz für die Kollektor-Emitter-Strecke).

Spannungen der 25VA-Stromversorgung bei durchschnittlicher Last Das ist die Stromversorgung für 25VA unter durchschnittlicher Last (1,22 A). Die Mindestspannung von 17,1 V lässt dem BC547 genug - aber nicht viel zu viel - Platz, um den Strom zu regeln.

Spannungen der 25VA-Stromversorgung bei sehr kleiner Last Das ist die 25VA-Versorgung bei einer Last durch zwei beleuchtete Segmente, alle anderen sind aus. Daraus ergibt sich das Maximum der thermischen Last der Kathodentreiber im ungünstigsten Fall.

Spannungen der 36VA-Stromversorgung ohne Last Und das ist die 25VA-Stromversorgung bei Null-Last. Das bestimmt die maximale Spannung am Elko. Bitte beachten, dass kleinere Trafos höhere Null-Last-Spannungen haben, aber keine überschreitet die hier verwendete 35V-Schranke, ist aber sehr nah an den 25V, die ein kleinerer Elko verträgt.

2.4 Konfigurieren anderer Auslegungen

Konfigurierung der Treiber mit einer Tabellenkalkulation Mit dieser Tabellenkalkulation hier (Tabellenblatt "Drivers") lassen sich alle Parameter, die möglich und sinnvoll sind, in den grün hinterlegten Feldern einstellen. Diese Änderungen werden im Folgenden näher beschrieben.

2.4.1 Andere LED-Ströme

Konfigurieren der Konstantstrom-Treiber Zu jeweils zwei Ziffern gehören bis zu acht Kathodentreiber. Diese werden vom Speicherausgang des HC373-Latches ein- und ausgeschaltet und bestimmen den Strom durch die vier gestapelten LEDs. Insgesamt brauchen 6 Zahlen mit jeweils acht Segmenten 48 Konstantstrom-Treiber.

Jeder Treiber besteht aus
  1. einem Transistor BC547,
  2. seinem Basiswiderstand RCB, der den Strom in die Basis limitiert, wenn keine LED angeschlossen ist und Strom zieht, sowie
  3. einem Emitterwiderstand RCE, der den Strom durch die LEDs bestimmt.
Die grundlegenden Auslegungsparameter, die hier verstellt werden können, sind: Dieser Teil der Tabellenkalkulation
  1. berechnet den Emitter-Widerstand RCE aus der Betriebsspannung, dem LED-Strom und der Basis-Emitter-Spannung UBE, und
  2. wählt einen nahe gelegenen Widerstand aus der E12- oder E24-Reihe aus (wenn du als Widerstand ein Netzwerk verwendest, ist E12 die bessere Wahl, weil es E24-Netzwerke nicht zu kaufen gibt), und
  3. berechnet den Basis-Widerstand RCB, und
  4. wählt den nächst-niedrigen Widerstand dieser Reihe aus, und
  5. lässt es zu, diesen Basiswiderstand individuell auszuwählen (so gibt es die 820Ω bei Reichelt nicht als Widerstandsnetzwerk), und
  6. berechnet den Gesamtstrom, den der 74HC373 im ungünstigsten Fall liefern muss, wenn keines der Segmente angeschlossen ist (dieser Gesamtstrom muss unterhalb von 50 mA bleiben, sagt das Datenblatt, aber Obacht: sind keine der LEDs angeschlossen, beläuft sich der Betriebsstrom auf das Sechsfache, was den kleinen Spannungsregler total überfordern dürfte), und
  7. berechnet die thermische Leistung des BC547 aus seinem VCE und dem tatsächlichen LED-Strom, und
  8. berechnet die thermische Leistung der Emitterwiderstände im Widerstands-Netzwerk, und
  9. berechnet, nach Auswahl des Datumsformats, die Anzahl an Transistoren und LEDs, und
  10. berechnet im Falle der deutschen Variante den Dummy-Widerstand, der die beiden fehlenden LEDs des Datumstrenners ersetzt.

2.4.2 Konfigurieren des Transformators

Konfigurieren des Transformators Konfigurieren der Transformertypen Diese zwei Teile des Rechenblatts ermöglichen die Auswahl des Transformators.

Die Mindestleistung des Transformators ergibt sich aus dem realen LED-Strom, der Anzahl an Segmenten und der Trafospannung. Als Trafospannung wurde hier 2x15V ausgewählt, da das für vier gestapelte LEDs ziemlich genau ausreicht.

Aus der Mindestleistung wählt die Software den passenden nächstgrößeren Trafo aus. Der kann durch Eingabe kleiner (besser nicht) oder größer (schon besser) ausgewählt werden. Für den ausgewählten Trafo werden die Spannungen bei Minimal- und bei Volllast aus der Tabelle auf der rechten Seite entnommen.

Die erforderliche Mindestspannung Vamin berücksichtigt folgende Parameter: Die erforderliche Leistung ergibt sich aus der Maximalzahl der gleichzeitig eingeschalteten Segmente, zuzüglich der beiden Trennersegmente, dem realen LED-Strom und den 15V des Trafos.

Eine weiter wichtige Eingangsgröße ist der Anteil, zu dem die Anodentreiber eingeschaltet sind. Während des Schreibens in die 74HC373 sind die Anodentreiber ausgeschaltet, und bei 32,768kHz Taktfrequenz nimmt das schon einen erklecklichen Teil der Gesamtzeit ein. Wer mit einem Quarz höherer Frequenz arbeiten will, trägt hier stattdessen 99% ein.

Die Maximalzahl der eingeschalteten Segmente ergibt sich aus einer separaten Tabellenkalkulation hier (Vorsicht, sehr grosse Tabelle), da es den 88.88.88, 88:88:88 praktisch nicht gibt und beim 08.08.28 um 08:08:08 Uhr das eine oder andere Segment ausgeschaltet bleibt. Es ist auch noch der Durchnittswert angegeben.

In jedem Fall ist ein 2x15V-Typ erforderlich, weil die Mindestspannungen zwischen 16 und 17V liegen.

Die Characterika des ausgewählten Transformators in Bezug auf gelieferte Spannungen werden aus der Tabelle rechts kopiert.

2.4.3 Konfigurieren der beiden Anodentreiber

Konfigurieren der Anodentreiber So werden die Anodentreiber konfiguriert. Der Anodenstrom wird durch die Vorwärtsverstärkung des BD440 geteilt und das ergibt den Basisstrom. Aus der Mindestspannung des Netzteils bei Voll-Last ergibt sich der maximale Basis-Widerstand des BD440, um diesen in die Sättigung zu bringen. Die nächstniedrige Widerstandsgröße wird ausgewählt und deren Leistung berechnet. Aus dem erforderlichen Basisstrom des BD440 und der Verwärtsverstärkung des BC547 ergibt sich dessen Basiswiderstand. Die thermischen Leistungen beider Transistoren sind sehr gering, weil beide in der Sättigung betrieben werden.

Spannungskaskade der LEDs So verteilen sich im Default-Fall die Spannungen auf die vier gestapelten LEDs und die beiden CE-Strecken.

2.4.4 Die E12- und E24-Widerstandsreihe

Diese sind Teil dieses Tabellenblatts (weiter rechts). Diese erlaubt es, für einen errechneten Widerstandswert aus der betreffenden Widerstandsreihe mit der Tabellenblattfunktion SVERWEIS Diese beiden Tabellen sind auch für andere Anwendungen verwendbar und können kopiert und in andere Tabellen eingefügt werden.

Top Display Hardware Aufbau Verwendung Software Algorithmen

3 Aufbau

3.1 Design der Uhr

Design der grossen Uhr Wegen ihrer sehr unterschiedlichen Größe sind diese Zeichnungen in einer separaten LibreOffice-Draw-Datei hier.

Das zeigt das ganze Ausmaß der Uhr. Wenn Du es kleiner magst, nur zu (man kann auch ohne weiteres 5- oder 3-mm-LEDs ohne jede Änderung verwenden, nur ein wenig Herumspielen an dem Draw-File macht alles möglich und sehr einfach). Nur wenn man statt der 10-mm-LEDs 2-mA-Stromspar-LEDs einsetzen will, muss man auch ein wenig die Ströme und Widerstände umkonfigurieren.

Alle folgenden Teile der Uhr sind für die Druckerausgabe auf DIN-A4 optimiert. Die gifs mit 0,5 cm Rand oben, rechts, unten und links ausdrucken und hinter die Acrylscheibe legen, dann kann man die Bohrlöcher für die LEDs und die Befestigungsteile auf der Rückwand bequem markieren.

Insgesamt braucht man folgende Acrylglaszuschnitte:
  1. 8 Stück 210 * 297 mm,
  2. 4 Stück 310 * 297 mm,
  3. 1 Stück 1.460 * 650 mm.

3.1.1 Design einer Ziffer

Design einer Ziffer Dies ist das Design für eine Ziffer. Beim Klicken auf dieses verkleinerte Bild öffnet sich die Originalgröße (oder mit Rechtsklick herunterladen). Das Original kann auch als Vorlage zum Platzieren der Bohrlöcher verwendet werden.

3.1.2 Design für Punkt oder Schrägstrich

Design der Ziffer mit Schrägstrich Das ist das Design für den angeschlossenem Punkt oder Schrägstrich. Das Bild hier rechtsbündig unterlegen. Für den Punkt einfach die drei oberen Löcher auslassen.

3.1.3 Design der Ziffer mit Doppelpunkt

Design der Ziffer mit Doppelpunkt Dasselbe nur mit Doppelpunkt für die Zeit.

3.1.4 LED-Verdrahtung

Verdrahtung der Ziffern-LEDs So schließt man alle LEDs einer Ziffer zusammen. Die Anoden werden optimalerweise kreuzweise zusammengeschaltet und an A10 (Zehner) oder A1 (Einer) geführt.

Die Anoden der einzelnen Segment-LEDs werden jeweils zur Kathode der nächsthöheren LED geführt, die Kathoden a bis f werden zwischen Einern und Zehnern verbunden und kommen entweder an den 16-poligen Steckverbinder oder an die Kollektoren der Kathoden-Treiber-Transistoren.

3.2 Aufbau auf Lochraster-Platine

Komponentenplatzierung auf einer 160x100 mm Platine Dies ist ein Vorschlag zur Platzierung aller Komponenten auf einer Rasterplatine mit 160x100 mm. Wer Trafonetzteil und Controller/Treiber-Platine separat haben will, kann einfach einen senkrechten Strich einziehen. Auch ein 35Va-Trafo passt auf den hier verfügbaren Platz.

Der Controller mit seinen Bauteilen, die zwei BC547-Anodentreiber-Transistoren und der ISP6-Stecker sind an der Unterseite platziert. Die zwei BD440-Anoden-Treiber sind hingegen in der Nähe des Elkos oben platziert, zusammen mit dem Elko und den beiden Leistungs-Gleichrichter-Dioden. Der LP2950-Regler und seine zwei Tantal-Elkos sind hier nicht eingezeichnet, sie können neben dem Elko platziert werden. Aus unerfindlichen Abgründen ist beim Umwandeln in Bitmap-Format die 10µH-Drossel verschwunden.

Die HC373 haben jeweils zwei Widerstandsnetzwerke direkt neben ihren Pins 2 bis 19.

Die Emitter-Widerstands-Netzwerke und die BC547 für die Konstantstrom-Treiber sind neben den HC373 platziert, die Kollektoren der unteren acht Treiber-Transistoren sind direkt mit den danebenliegenden 16-poligen Steckern verbunden. Das sieht im Schaltbild etwas anders aus, aber wirkt sich nur auf die Verdrahtung an den Ziffern aus.

Bitte auch beachten, dass die 16-poligen Stecker 16-fach den LED-Strom treiben müssen, in unserem Fall daher 16 * 40 mA = 640 mA. Es macht daher Sinn, die Common-Anschlüsse der sechs Widerstandsnetzwerke für die Emitter-Widerstände mit besonders dickem Draht direkt an den Minus-Pol des Elkos zu führen.

3.3 Teile-Liste

Teile-Liste der sehr grossen Uhr Dies ist die komplette Teile-Liste, mit Preisen von Reichelt (wo sinnvoll).

Komponenten mit 5% oder mehr Anteil an den Gesamtkosten sind rot hinterlegt. Erstaunlich ist, dass der Mikrocontroller und die sechs HC373 nicht dazu gehören. Die Plexiglaszuschnitte (Ziffernplatten, Rückwand), die man im Baumarkt passend zugeschnitten kriegt, haben den höchsten Anteil von rund 50% der Gesamtkosten.

Für die vielen LEDs gibt es auch die eine oder andere billigere Quelle, aber die haben vielleicht eine etwas andere Spannungs-Strom-Kennlinie. Ausprobieren hilft da weiter!

Top Display Hardware Aufbau Verwendung Software Algorithmen

4 Betrieb

Die einzigen Komponenten, die betriebsmäßig gebraucht werden, sind die drei Tasten K1 bis K3.

Wenn die Taste K1 zuerst gedrückt wird, beginnt die Kurzzeit-Verstellung. K2 erhöht dann die Sekunden, K3 vermindert sie. Erneutes Drücken von K1 beendet die Kurzzeit-Verstellung.

Wenn die Taste K2 zuerst gedrückt wird, können alle Datums- und Zeit-Einstellungen nacheinander vorgenommen werden. In diesem Fall blinken die jeweils einzustellenden Zahlen. Die Taste K2 wechselt zur nächsten Zahl, die Taste K1 zur vorherigen. Bei der Taste K3 wird die aktuelle Einstellung übernommen. Die Zahlen können mit dem Potentiometer eingestellt werden.

Mit einem angeschlossenen und funktionierenden DCF77-Empfänger hat man diese Mühsal nicht: nur einfach zwei Minuten lang warten, und schon stimmt's.

4 Software

Eine vorläufige Version der Software in Assembler-Format gibt es hier. Bitte beachten, dass diese Version nur das Multiplexen, die Zeit- und Datums-Routinen und die AD-Wandlung beherrscht. Die Tastenfunktionen und der DCF77-Empfang gehen noch nicht. Bitte mit Vorsicht verwenden und ab und zu hier vorbeischauen, ob es eine neue Version gibt!

Top Display Hardware Aufbau Verwendung Software Algorithmen

5 Algorithmen

5.1 Die Uhrzeit- und Datumsfunktionen

Struktur von Datum und Zeit im SRAM Erhöhen der Zeit um eine Sekunde Dies hier links ist die Struktur, mit der Datum und Uhrzeit im SRAM gespeichert sind. Um auf alle Bytes dieser Struktur bequem und schnell zugreifen zu können, wird das Registerpaar Y auf deren Beginn gesetzt, so dass die Bytes mit LDD/STD-Instruktionen und einem Versatz d gelesen und geschrieben werden können. Dazu sind im DSEG Versatzkonstanten definiert, deren Namen mit d beginnen und im Falle der Zeiger auf Multiplexlokationen mit Mux und, bei Datums- und Zeitbytes, das Byte mit zwei Buchstaben bezeichnen.

Diese Struktur ist übrigens vom verwendeten Datumsformat unabhängig, dessen Kodierung erfolgt beim Beschreiben der Speicher beim Multiplexen.

Rechts ist das Flussdiagramm zur Erhöhung von Zeit und Datum um jeweils eine Sekunde abgebildet. Nacheinander werden Sekunden, Minuten, Stunden, Tage, Monate und Jahre um Eins erhöht und durch Vergleich mit dem betreffenden Ende-Kriterium (Sekunden/Minuten = 60, Stunden = 24, Tage = 29/30/31/32 (je nach Monat/Jahr), Monate = 13, Jahre = 100) entschieden, ob die Erhöhung auf die jeweils höhere Kategorie überläuft. Alle geänderten Bytes werden durch Aufruf der Umwandlungsroutine Binär-zu-Siebensegment entsprechend in ihre Multiplex-Kodierung umgewandelt und zur Anzeige im sMux-Speicherbereich abgelegt.

Die Routinen zur Umwandlung in Multiplex-Format und die Ermittlung der Tage des Monats sind hier nicht abgebildet, sie können dem Quellcode entnommen werden.

5.2 Die OC0A-Interrupt-Service-Routine zum Multiplexen

Flussdiagramm der OC0A-Interrupt-Service-Routine zum Multiplexen Dies ist die Routine, die für das Multiplexen der Anzeige sorgt. Sie ist an den Timer TC0 angebunden, der mit 32.768 Hz getaktet wird und beim Erreichen von 128 Takten zurückgesetzt wird. Das erfolgt alle 3,9 Milli-Sekunden.

Die Routine beginnt mit dem Sichern des Statusregisters und dem Abwärtszählen des Registers rSec. Erreicht dieses Null, wird die Flagge bSec gesetzt. Dies bewirkt, dass außerhalb der Interrupt-Service-Routine die Uhrzeit und das Datum um eine Sekunde erhöht wird und die Byte-Zähler in das Sieben-Segment-Format umgewandelt werden.

Ist das Bit 0 von rSec Eins, werden die Zehner in die Speicher geschrieben (rechte Seite im Diagramm). Dazu wird zuerst der Anodentreiber A1 ausgeschaltet, dann werden die Zehner paarweise auf die Ports C und D geschrieben und die Latch-Enable-Pins kurz aktiviert. Am Ende wird der Anodentreiber A10 aktiviert, das Statusregister wiederhergestellt und die Routine mit RETI verlassen.

In rot sind die vergangenen Taktzyklen gezählt. Insgesamt werden 52 oder 53 Taktzyklen verbraucht. Das sind 41,4% der 36.768 Taktzyklen pro Sekunde.

Die Anodentreiber werden bei beiden Verzweigungen für 32 Taktzyklen abgeschaltet. Diese Abschaltdauer macht 25% der Gesamtzeit aus. Das bedeutet, dass eine mit 40 mA angetriebene LED nur für 75% der Zeit tatsächlich angetrieben wird. Tatsächlich sind das im Schnitt nur 30 mA. Da beim Multiplexen ohnehin jede Anode nur für die halbe Zeit aktiv ist, ergibt sich ein durchschnittlicher Strom von 15 mA. Beides ist beim Trafo-Konfigurieren berücksichtigt.

Top Display Hardware Aufbau Verwendung Software Algorithmen


Lob, Tadel, Fehlermeldungen, Genöle und Geschimpfe oder Spam bitte per Email an mich (info und die Web-URL-Adresse), ich freue mich über alle Arten von Rückmeldungen.

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