Gruppe 2.3: Anzeige

Einführung

Wir, die Anzeigegruppe, haben uns für 4 7-Segment-Anzeigen entschieden, da es für die Ausgabe von Zeit (4 Ziffer), Datum (4 Ziffer) und Temperatur (4 Ziffer) ausreicht. Dazu haben wir noch 2 Punkte (LEDs) zwischen Ziffer 2 und 3, die bei der Zeitanzeige im Sekundentakt blinken. Außerdem gibt es noch eine LED, die anzeigt ob der Wecker an oder aus ist. Die Daten für die Anzeige und Betriebsspannung gelangen an uns von der Uhr-Gruppe über eine SPI-Verbindung, so brauchen wir keine Verbindung zum Gesamtbus und können unsere Platine bequemer an der Oberfläche des Gehäuses positionieren. Um die Daten auslesen und verarbeiten zu können brauchen wir einen Mikrocontroller. Bei dessen Wahl haben wir uns für ATmega32 von Atmel entschieden.

Schaltplan

Um die vier 7-Segment-Anzeigen anzusteuern bräuchte man 8 mal 4 Ausgangsleitungen vom Mikrocontroller, so viel steht uns aber nicht zur Verfügung. Darum haben wir uns für die Anwendung von Multiplexing entschieden. So werden nur 8+4 Pins benötigt. Wie man aus der Abbildung sieht, benutzen wir zwischen der Vorsorgungsspannung und den Anzeigen 8 pnp-Transistoren um die einzelnen Segmente innerhalb von Anzeigen anzusteuern und 4 npn-Transistoren um die gerade leuchtende Anzeige auszuwählen indem wir die gemeinsame Kathode von der jeweiligen Anzeige mit Masse verbinden. Außerdem befinden sich in der Schaltung Vorwiderstände für jede Anzeige und jedes Segment, deren Berechnung im nächsten Abschnitt beschrieben wird. Da der interne Oszillator von ATmega32 viel zu ungenau zur Darstellung der Zeit ist, benutzen wir noch einen externen Quarz, der mit einer Frequenz von 10MHz schwingt.
Während der Testphase haben wir bemerkt, dass die pnp-Transistoren (BC327), die wir benutzt haben, erst bei einer Basis-Emmiter-Spannung im Bereich zwischen 0 und -0,7V sperren. Das konnte mit der oben beschrieben Schaltung nicht erreicht werden, da ATmega32 an Ausgänge maximal 5V Spannung anlegen kann. Darum haben wir uns entschieden Zener-Dioden zu benutzen und diese, wie im Schaltplan dargestellt in die Schaltung zu integrieren. Hierfür wurden Zener-Dioden mit einer Durchlassspannung von 8,3V verwendet. So liegen an der Basis immer 11,3V (wegen der 12V am Emmiter) und wenn man den entsprechenden Pin des Mikrocontrollers mit 5V belegt, fallen an der Zener-Diode 6,3V ab. Das reicht nicht zum durchschalten, so sperrt sie. Wenn aber am Ausgang des Mikrocontrollers 0V anliegen fällt über der Diode eine Spannung von 11,3V was definitiv zum Durchschalten ausreicht und es fließt ein negativer Strom in die Basis des pnp-Transistors rein. So kann dieser auch die Betriebsspannung auf Kollektor durchschalten.

 

Schaltplan der Hauptplatine

Schaltplan der Hauptplatine

AnzeigeLayout

 

Multiplexing

Da ein Mensch nur 24 Bilder pro Sekunde erkennen kann, benutzen wir für Multiplexing eine Frequenz von 4883Hz (Timer0 von ATmega32 (8 bit) und ein Prescaler von 8). Man hätte auch eine kleinere Frequenz nehmen können, aber dann sieht man z.B. in Bewegung, dass das Bild nicht komplett ist. Das Multiplexen funktioniert so, dass jede einzelne Anzeige nur ein Viertel (Duty Cycle von 25%) von der Gesamtperiode (2ms) leuchtet. Somit muss alle 0,5ms ein npn-Transistor umgeschaltet werden und auf der 8-Bit Leitung (PORT A von Mikrocontroller) neue Informationen (Ziffer) anliegen. Die Anzeigen werden so schnell umgeschaltet, dass ein Mensch es nicht mit bloßem Auge erkennen kann und es aussieht, als ob alle 4 gleichzeitig an wären.
Mit Multiplexing sind auch einige Probleme verbunden: z.B. abhängig davon, wie viele Segmente an sind, muss unterschiedlicher Strom durch den npn-Transistor fließen, damit die Helligkeit von jedem Segment immer gleich bleibt. Somit variiert der Strom im Bereich von 20mA bis $8\times20mA$. Dementsprechend müssen die npn-Transistoren so gewählt werden, dass sie den maximalen Strom durchlassen können. Darum haben wir uns für BC337 entschieden mit 800mA max. Kollektorstrom.
Da wir vergleichsweise viel Strom brauchen, nutzen wir zwei Leitungen a 12V zwischen denen der Strom unterteilt werden kann.

Dimensionierung

Jedes Segment von den Anzeigen muss mit 7,4V betrieben werden (Punkt mit 3,7V), darum reicht die 5V-Spannung (Spannung für Mikrocontroller) nicht aus und wir greifen auf die höhere 12V-Spannung zu. Nun muss diese mithilfe von Vorwiderständen geteilt werden (7,4V für das Segment und 4,6V für den Widerstand). Die LEDs in jedem Segment verkraften maximal 30mA Gleichstrom, wir entschieden uns aber für 20mA, da bei der Stromstärke sie hell genug leuchten. Somit erhalten wir folgende Gleichung um Vorwiderstände vor Segmenten zu bestimmen R = 230Ohm, bzw folgende Gleichung für den Widerstand vor „Punkt“: R = 415Ohm.
Einfachheitshalber entschieden wir uns für die nächstgrößeren verfügbaren Widerstände, nämlich 270 Ohm und 470Ohm entsprechend. Auch vor die LED, die den Zustand des Weckers anzeigen muss, schalten wir einen Vorwiderstand von 270Ohm. Außerdem verfügt die Schaltung über Pull-Up-Widerstand von 10kOhm für RESET-Leitung.
Damit kein Kurzschluss entsteht fügen wir auch Widerstände von 1kOhm vor jedem Transistor ein.

SPI

Da wir alle Daten von der Uhr-Gruppe über SPI seriell bekommen und diese vorerst im 8bit-Datenregister abgelegt werden müssen bestimmen wir wie viel Informationen uns auf einmal übergeben werden können. Immer stehen uns folgende Informationen zur Verfügung: ob der Wecker an oder aus ist (1 Bit) und in welchem Modus wir uns gerade befinden (3 Bits). Dann je nach Modus liegt eine der Folgenden Zahlen an: Zeit (11 Bits), Datum (9 Bits), Temperatur (6 Bits), Weckzeit (11 Bits). Somit entschieden wir uns für die grösstmögliche Bitzahl von 1+3+11=15 Bits. Das könnte man mit 2 Taktzyklen (2 mal 8 Bits) realisieren, aber angesichts der einfacheren Fehleranalyse reservieren wir die ersten beiden Bits jedes Datenwortes (8 Bit) für die Darstellung der Zyklusnummer (1, 2, 3 oder 4). So werden im Endeffekt alle Informationen in 4 Zyklen übertragen. Wie die einzelnen Daten innerhalb von gesendeten Wörtern verteilt sind, kann man der Tabelle 1 entnehmen. (Abkürzungen: WN – Wortnummer, m – Modus, H/D – Stunde/Tag, M – Minute/Monat, W – Wecker an/aus, C – Cursor)

 

Muster für die SPI-Datenübertragung

7.Bit 6.Bit 5.Bit 4.Bit 3.Bit 2.Bit 1.Bit 0.Bit
WN WN m m m m 0 0
WN WN H/D H/D H/D H/D H/D 0/D
WN WN M M M M M/0 M/0
WN WN W C C 0 0 0

Modi

Der Benutzer kann verschiedene Modi durchschalten. Diese sind Zeitanzeige, Datumanzeige, Weckzeitanzeige, Temperaturanzeige und die Einstellungen von Zeit, Datum und Weckzeit. Während die Zeit angezeigt wir blinkt ein Doppelpunkt zwischen Stunden und Minuten. Bei der Anzeige von Datum, trennt ein leuchtender Punkt den Tag vom Monat. Die Temperatur wird in Grad Celsius angezeigt. Während der Einstellung kann der Benutzer die Position des Cursors am Blinken der aktuell zu ändernden Anzeige erkennen. Unabhängig vom Modus leuchtet die LED, wenn der Wecker an ist.

Bauteilliste

1 ATMega 32A-PU
4 7-Segment-Anzeige, gem. Kathode
4 Kohleschichtwiderstand 1,1 kΩ
8 Metalloxydwiderstand 4,7 kΩ
8 PNP Transistor
4 NPN Transistor
1 Metallschichtwiderstand 10,2 kΩ
8 Metallschichtwiderstand 270 Ω
1 Metallschichtwiderstand 470 Ω
2 Elektrolytkondensator 22 pF
1 Elektrolytkondensator 100 nF
1 LED,3 mm,grün
1 Standardquarz, Grundton, 10,000000 MHz
1 Wannenstecker, 10-polig, gerade
1 Wannenstecker, 6-polig, gerade
Pavlo Gaiduk, Hamid Khodabakhshande, Helia Ordouei