Pfad: Home => AVR-DE => Anwendungen => Experimentell = > Abwärtszähler   This page in english: Flag EN Logo
Abwaertszaehler AVR-Anwendungen

Abwärtszähler mit ATmega324PA


Experimentell! Unerprobt! Unvollständig!

Ein 10-Minuten-Abwärtszähler mit ATmega324PA

1 Beschreibung

Hier ist ein Zähler/Timer beschrieben, der mit drei Siebensegment-Anzeigen entweder abwärts oder - nach Schließen eines angeschlossenen Schalters - auch aufwärts zählt. Die maximal einstellbare Zeit beträgt 10 Minuten.

Der Controller arbeitet mit einem Uhrenquarz, so dass die Zeiten sehr exakt eingehalten werden. An die Start-/Stop-Eingänge können auch externe Schaltquellen angeschaltet werden. Nach Ablauf der Zeit stellt sich diese wieder auf die beiden Potentiometer ein, so dass der Start wieder mit der Start-Taste beginnen kann.

Die Schaltung besitzt eine audiovisuelle Benachrichtigung über LEDs und einen Lautsprecher.

Der Quellcode ist hier frei verfügbar und kann an eigene Anwendungen angepasst werden.

Schaltbilder und Flussdigramme gibt es als LibreOffice-Draw-Datei hier, Berechnungen als Calc-Datei hier.

Seitenanfang Beschreibung Hardware Aufbau Software

2 Hardware

Beschrieben ist hier die Schaltung selbst, die Auslegung der Widerstände hier sowie das erforderliche Netzteil hier.

2.1 Controller

Schaltbild des Abwaertszaehlers Das ist das Schaltbild.

Die drei Siebensegment-Anzeigen sind über stromkontrollierende Widerstände direkt an die Ports B, C und D des Controllers angeschlossen. Verwendbar sind Gemeinsame-Kathoden- oder Gemeinsame-Anoden-Anzeigen, die Konfiguration erfolgt in der Software. Der Anschluss der Kathoden oder der Anoden an die Betriebsspannung ist für beide Typen eingezeichnet.

Der Controller wird mit einem 32,768 kHz-Quarz getaktet. Das ist für die Aufgabenstellung völlig ausreichend und lastet den Controller zu maximal 20% aus.

An den Port A sind alle Bedienelemente angeschlossen:
  1. An den Pins PA0 (ADC0) und PA1 (ADC1) sind zwei Potentiometer angeschlossen, mit denen die gewünschte Zeit eingestellt werden kann. Wer das lieber mag, kann an PA0 (ADC0) auch ein 10-Gang-Potentiometer anschließen, muss dann aber die Software ein wenig umbauen.
  2. Am Pin PA2 ist der Lautsprecher über einen Gleichstrom-trennenden Elko angeschlossen, er gibt nach Ablauf der eingestellten Zeit einen Alarmton ab, dessen Tonhöhe in der Software zwischen 1 und 15.000 Hz eingestellt werden kann. Der Ton kann mit der Stoptaste abgeschaltet werden.
  3. An den Pins PA3 und PA4 sind eine grüne und eine rote LED angeschlossen, die bei laufendem Zähler im Wechsel blinken.
  4. Am Pin PA5 ist der Aufwärtsschalter angeschlossen. Ist der Schalter geschlossen, dann zählt der Zähler von Null an aufwärts bis zur eingestellten Zeit. Im offenen Zustand zählt er abwärts bis Null.
  5. An den Pins PA6 und PA7 sind die Stop- und die Start-Taste angeschlossen.
  6. Die Betriebsspannungsanschlüsse für den Controller und für den AD-Wandler (über eine Drossel) können mit Spannungen zwischen 2,7 bis 5,25 Volt arbeiten. Da die 7-Segment-LEDs ebenfalls mit dieser Spannung arbeiten, sollte die Spannung stabilisiert sein und die LED-Widerstände sollten auf den gewünschten LED-Strom eingestellt sein.
  7. Die ISP6-Schnittstelle erlaubt die Programmierung des Controllers in der fertigen Schaltung. Die entsprechenden Anschlüsse sind mit den Bezeichnungen am Controller zu verbinden.


Seitenanfang Beschreibung Hardware Aufbau Software

2.2 Auslegung der Widerstände

Auslegung der LEDs und Widerstaende Die Auslegung der Widerstände R und Rp erfolgt mit Hilfe der Tabellenkalkulation. Diese berücksichtigt
  1. den eingestellten Soll-Strom der LEDs (separat für Strichsegmente und Punkte),
  2. die gewählte Betriebsspannung (hier: 3,3 Volt),
  3. die Vorwärtsspannung der Segmente und der Punkte beim gewählten Strom, abhängig von der LED-Farbe,
  4. den geschätzten Spannungsverlust der CMOS-Ausgänge bei diesem Strom (hier: 0,225 Volt für die Striche bzw. 0,122 Volt für Punkte).
Die Widerstände Rled und Rled-p werden automatisch aus der E24-Tabelle ausgewählt, die weiter rechts in der Tabelle zu finden ist.

Die Auslegung der LED-Widerstände ist nicht ganz trivial, weil bei 3,3 Volt Betriebsspannung relativ kleine Spannungsdifferenzen vorliegen.

Bei Auswahl der grünen LEDs, wie im abgebildeten Fall, in Zelle F4 und bei sehr niedriger Betriebsspannung von 2,7 Volt in Zelle D4 kann es durchaus sein, dass die Ausgangsspannung an den LED-Ports gar nicht ausreicht, um die LEDs zu treiben. Hier ist es ziemlich knapp.

Aus der Annahme, dass bei der ersten und dritten Anzeige alle sieben Segmente und bei der zweiten maximal sechs Segmente an sind, sowie alle drei Punkte der Anzeigen und die beiden mittleren LED (grün und rot) an sind, errechnet sich der Gesamtstrom, den der ATmega324PA leisten muss, in Zelle H17. Dessen GND- und VCC-Pin darf maximal 200 mA Strom ziehen. Überschreitet der Strom 200 mA, wird diese Zelle rot.

Trafo-Auswahl fuer den Abwaertszaehler Die Siebensegment-Anzeigen brauchen alle zusammen etwa 150 bis 200 mA. Daher ist es keine gute Idee, die Schaltung aus zwei 1,5 Volt-Batterien zu betreiben. Nur 3,7 Volt-Lithium-Akkus liefern über längere Zeit solche hohen Ströme. Ich habe daher für den Dauerbetrieb ein Trafo-Netzteil vorgesehen.

Aus dem Gesamtstrom, zuzüglich des Betriebsstroms des Spannungsreglers und des Prozessors ergibt sich die Leistung des Netzteiltrafos. Aus den kommerziell verfügbaren Trafos mit 2 * 6 Volt (bei Betriebsspannungen ab 4,5 Volt 2 * 7,5 Volt) wird mit einem Sicherheitsabstand von 10% die Trafoleistung in den letzten abgebildeten Zeilen ermittelt.

Bei 3,3 Volt Betriebsspannung ist ein 2*6Volt/1,5VA-Trafo ausreichend. Ein 1VA-Trafo ginge im Durchschnitt gerade auch noch, würde aber im Maximalfall kurzzeitig überlastet werden. Nur wenn man den LED-Strom auf 5 mA herabsetzt, reicht ein 1VA-Trafo auch im Maximalfall aus.

Die Vorwaertsspannung von roten LED-Segmenten Dies hier ist die Herleitung der quadratischen Gleichung zur Berechnung der Vorwärtsspannung von roten Segment-LEDs zwischen 2 und 33 mA Betriebsstrom.

Die Vorwaertsspannung von gruenen LED-Segmenten Grüne LED-Segmente haben eine deutlich höhere Vorwärtsspannung als rote. Für grüne LEDs muss der Vorwiderstand daher deutlich niedriger ausgelegt sein.

Spannungsverlust von AVR-Portausgaengen bei gemeinsamer Anode Bei der Schaltung mit gemeinsamer Anode treibt der AVR-Ausgangspin die Spannung auf Low, um die LED anzumachen. Abhängig vom LED-Strom bleibt dabei eine Restspannung, die zu einer Verringerung des Stroms sorgen würden. Bei dem hier gewählten LED-Strom von 7 mA sind das immerhin 0,225 Volt.

Bei dem hier interessierenden Strombereich zwischen 0 und 15 mA ist der Spannungsverlust etwa linear mit dem Strom. Er kann also mit der Gleichung Vdrop = a * I (mA) + b ermittelt werden. Bei 5 V Betriebsspannung ist der Spannungsverlust auch bei höheren Strömen (bis 40 mA) noch linear. Bei 3,3 Volt steigt der Spannungsverlust oberhalb von 20 mA überproportional an und es muss eine quadratische Gleichung der Form Vdrop = a * I2 + b * I + c verwendet werden.

Spannungsverlust von AVR-Portausgaengen bei gemeinsamer Kathode Geringfügig anders ist der Spannungsverlust bei der Schaltung der LEDs mit gemeinsamer Kathode. Der Spannungsverlust ist geringfügig höher.
Seitenanfang Beschreibung Hardware Aufbau Software

2.3 Auslegung der Anzeigen

Auswahl einer kleinen gruenen Anzeige Das ist eine der Möglichkeiten, eine Anzeige anzuschließen. Hier ist es eine kleine grüne. Die Anschlussfolge für Segment a bis g und den Punkt geht in der Draufsicht und von unten her betrachtet so wie im Bild. Diese Anzeige hat Gemeinsame Kathoden-Anschlßsse.

Größere Anzeigen haben ihre Anzeigen nicht links und rechts, sondern oben und unten.

Soll die Anzeige Gemeinsame Anoden-Anschlüsse haben, muss die Software entsprechend umgestellt werden (siehe das Kapitel Software).
Seitenanfang Beschreibung Hardware Aufbau Software

2.4 Stromversorgung

Schaltbild des Netzteils fuer den Abwaertszaehler Das ist das Netzteil für den Abwärtszähler.

Das Netzteil ist für 3,3 Volt Betriebsspannung und für einen Segmentstrom von ca. 9 mA ausgelegt. Aufgrund der vielen Segmente, die maximal eingeschaltet sein können, ergibt sich ein so hoher Strombedarf, dass das Netzteil bis zu 210 mA liefern muss.

Netzteil-Spannung beim 2*6V/1,8VA-Trafo bei Maximallast Dies ist der Spannungsverlauf beim 1,5VA-Netzteil unter einer Last von 210 mA. Mit Maximallast besteht genügend Abstand für den Spannungsregler. Ohne angeschlossene Last bleibt die Elkospannung deutlich unterhalb von 16 Volt, was für die Spannungsfestigkeit des Elkos von Bedeutung ist.

Seitenanfang Beschreibung Hardware Aufbau Software

3 Aufbau

3.1 Aufbau Controller und Anzeige

Aufbau des Zaehlers auf Lochraster So passen alle Bauteile auf eine 80x50mm Lochraster-Platine. Die Bedienelemente sind über einen 10-Pin-Steckverbinder angeschlossen.

Anschluss der externen Komponenten So wird das Flachkabel aufgetrennt und mit den externen Komponenten verdrahtet.

3.2 Aufbau des Netzteils

Aufbau des Netzteils in einer Plastikschachtel Aufbau des Netzteils So ist das Netzteil in einer passenden Plastikschachtel aufgebaut. Es kann mit einem Netzteil-Stecker auch für andere Schaltungen mit 3,3 V und 0,24 A eingesetzt werden.

3.3 Teileliste

Teileliste fuer den Abwaertszaehler Das sind alle Einzelteile, die man dafür so braucht. Nur wenige Teile haben 10% und mehr Anteil an den Gesamtkosten. Nicht ganz billig, das Ganze, aber: da hat man halt was ganz Eigenes.

Seitenanfang Beschreibung Hardware Aufbau Software

4 Software

Die Software gibt es als Assembler-Quellcode zum Download. Die Ansteuerung der Siebensegment-Anzeigen ist hier näher erläutert. Einige Flussdiagramme gibt es hier.

4.1 Assembler-Quellcode

Den Assembler-Quellcode gibt es hier zum Download. Die Software ist noch nicht erprobt!

Die Software belegt nur wenige Prozent des verfügbaren Speicherraums.

Wenn Du es brauchst: mit dieser Software kann der korrekte Aufbau der Siebensegment-Anzeigen getest werden: test_down-count.asm. Diese Software zählt am ausgewählten Port (PORTB, PORTC oder PORTD) von 0 bis F. Die Software benutzt nur den Timer-Interrupt zum Zählen.

Seitenanfang Beschreibung Hardware Aufbau Software

4.2 Fuse-Einstellungen

Die Originaleinstellungen der Fuses fabrikfrisch Fabrikfrisch ist der ATmega324PA auf den internen 8-MHz-RC-Oszillator als Taktquelle eingestellt und CLKPR teilt diese Frequenz durch 8 (mit der CKDIV8-Fuse).

Das Auslesen der Signatur bei 1 MHz Takt Weil sich das Studio 4.19 weigert, mit weniger als 5 kHz den Programmspeicher zu beschreiben, beschreibt man den Flash-Speicher zuerst bei der Default-Frequenz von 1 MHz. Ist der Speicher beschrieben, kann die Umstellung auf den externen Quarz erfolgen. Das macht man güstigerweise in drei Stufen:
  1. Loeschen der CKDIV8- und JTAG-Fuses Stufe 1: Das Löschen der CKDIV8- und der JTAG-Fuse. Das sollte auf jeden Fall zuerst und vor jeder Fuse-Umstellung auf den Quarz gemacht werden.
  2. Umstellen der ISP-Taktfrequenz Stufe 2: Umstellen der ISP-Frequenz auf 4 kHz. Mit dieser niedrigen Frequenz kann der Prozessor auf 32,768 kHz umgestellt werden, ohne dass es zum Crash kommt.
  3. Umstellen der Takt-Fuses Stufe 3: Umstellen der Taktfrequenz-Fuse auf den externen Quarz. Das kommt dann auf jeden Fall ganz zuletzt.
Muss man das Programm ändern und frisch einspielen, dann geht man diese Dreierreihe wieder rückwärts durch, also 3-2-1. Anders riskiert man Chaos.

Seitenanfang Beschreibung Hardware Aufbau Software

4.2 Sieben-Segment-Ansteuerung

Die Einstellung der Sieben-Segment-Anzeigen erfolgt in der Sektion "Adjustable constants" des Quellcodes. Die Konstante "cAnode" muss für Anzeigen mit Gemeinsamer Anode auf Eins gesetzt werden, bei Gemeinsamer Kathode bleibt sie auf Null.

Siebensegment-Codes fuer die Ziffern 0 bis 9 Die Siebensegment-Anzeigen zeigen Ziffern mittels Tabellen-Codes an. Die entsprechenden Codes sind in der Tabelle "7seg" hergeleitet und in Hexadezimalformat im Quellcode als Tabellen abgelegt.

Die Tabellencodes werden mit der Instruktion LPM aus der Tabelle abgelesen. Die Z-Adresse in der Tabelle wird durch Addieren der anzuzeigenden Ziffer auf das betreffende Zeichen eingestellt.

Man beachte, dass die Punkt-Bits 7 default-mäßig aus sind (Gemeinsame Kathode = Null, Gemeinsame Anode = Eins). Die p-Bits blinken beim Zeiteinstellen (Digit 1) bzw. beim Abwärtszählen (Digit 3) zusammen mit der grünen bzw. der roten LED.

Seitenanfang Beschreibung Hardware Aufbau Software

4.3 Flussdiagramme

4.3.1 ADC-Flussdiagramm

Flussdiagramm des ADC-Complete-Interrupts Das ist der Ablauf beim ADC-Complete-Interrupt.

Zuerst wird durch Lesen des ADMUX-Ports ermittelt, on ADC0 oder ADC1 gemessen wurden. War es ADC0 (linker Ast), dann wird das Ergebnis in das Minutenregister gelesen und als nächstes Kanal ADC1 nach ADMUX geschrieben und der ADC erneut gestartet.

War es ADC1 (rechter Ast), wird das Ergebnis in das Sekundenregister gelesen, als nächstes Kanal ADC0 in ADMUX geschrieben und der ADC mit der nächsten Messung gestartet. Außerdem wird die bAdc-Flagge gesetzt, damit beide Messungen außerhalb der Interrupt-Service-Routine ausgewertet werden.

Das Timing der ADC-Messungen ist in der LibreOffice-Calc-Datei in der "adc"-Tabelle vorgenommen. Beide Äste dauern 22 Taktzyklen lang, bei 32,768 kHz sind das 671 µs. Die beiden Messungen werden mit einer Frequenz von 5,82 Hz abgeschlossen, falls der Zähler gerade nicht tickt, wird das Messergebnis anschließend auf der Anzeige dargestellt.

Seitenanfang Beschreibung Hardware Aufbau Software

4.3.2 PCINT-Flussdiagramm

Flussdiagramm des PCINT-Interrupts Die beiden Taster "Start" und "Stop" lösen bei Betätigung den PCINT des Ports A aus. Dies hier ist das Flussdiagramm des PCINTs.

Je nachdem, ob der Zähler gerade zählt (bRun = 1) oder nicht (bRun = 0), wird die jeweils andere Taste abgefragt. Ist diese betätigt, dann wird das Zählen gestartet (rechter Ast) bzw. gestoppt (linker Ast). Da beide Voränge ohne Tastenklappern vor sich gehen, kann auf den Einsatz von Timern zur Prellunterdrückung verzichtet werden.

Ist bRun = 0, die Taste Start nicht gedrückt und die Taste Stop gedrückt, dann wird der Lautsprecher-Interrupt abgeschaltet, damit nach dem Alarm endlich wieder Stille einkehrt.

Seitenanfang Beschreibung Hardware Aufbau Software


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