Match Display - die universelle Spielanzeige



Abbildung 1: Match Display - fertig & komplett


Badmintonspielen im Einzel ist zu anstrengend, um sich auch noch den Spielstand merken zu können. Diese Erkenntnis war der Startschuss zum folgenden Bastelprojekt das eine auf Badminton zugeschnittene, aber universell verwendbare Spielanzeige zum Inhalt hat.

Wie in jedem Projekt wurden zuerst einmal die Anforderungen aufgestellt. Im Fall der Spielanzeige waren das folgende :

  1. Anzeige des Spielstands bis 99:99 über 4 7-Segment-LED-Anzeigen

  2. Weiterschaltung des Spielstands über 2kanalige drahtlose Fernbedienung mit 2 Tasten über eine Entfernung von mindestens 5m zwischen Sender und MatchDisplay

  3. Tasterhandling : einzelnen Taster einmal drücken = Inkrement / zweimal drücken = Dekrement

  4. Der eingebaute Energiespeicher kann über das Match Display geladen werden

  5. Ladezustandsanzeige über die 7 Segment Anzeigen

  6. Die Spielanzeige soll leicht transportierbar sein

  7. Die Betriebsdauer ohne Netzanschluss soll mindestens 1.5h betragen

  8. Die Anzeige soll auch aus 5m Abstand noch problemlos erkennbar sein

  9. Die drahtlose Fernbedienung muss ohne Bewegungseinschränkung von einem der Spieler tragbar sein

Aus diesen Anforderungen wurden die folgenden Designentscheidungen abgeleitet :

  1. Match Display wird über einen 12V-Blei-Gel-Akku versorgt

  2. Messung der Lade- und Akkuspannung über 2 ADCs des Microcontrollers

  3. LED-Anzeige wird im Multiplexverfahren angesteuert wobei immer nur ein aktives Segment eines Digits gleichzeitig angesteuert wird

  4. Die Zeitscheibe zur Ansteuerung eines einzelnen Segmentes beträgt 1ms

  5. Nach 28ms sind alle Einzelsegmente der 4 Anzeigen durchlaufen

  6. Die 1ms-Zeitscheiben werden über einen 1ms-HW-Timer-IRQ erzeugt

  7. Als Microcontroller wird das Elektor-R8/C13-Modul eingesetzt

  8. Einsatz eines 4kanaligen Funktaschensenders auf 868MHz-Sendefrequenz

Hardwareaufbau

Das Match Display wurde in folgende HW-Blöcke eingeteilt.



Abbildung 2: HW-Blockeinteilung



Als Anzeige wurde eine 7-Segmentanzeige SA40-19SRWA von Kingbright mit einer Ziffernhöhe von 100mm ausgesucht (siehe [1]). Bei dieser Anzeige bestehen die einzelnen Anzeigelemente nicht mehr aus Einzel-LED's sondern aus mehreren parallel und seriell verschalteten LED's. Die mininmale Flussspannung für ein normales Anzeigelement (außer dem Dezimalpunkt) beträgt maximal 10V. Damit bot sich eine direkte Versorgung der Anzeigesegmente aus dem 12V-Akku an.

Die Treiberschaltung wurde aus [2] übernommen. Im Gegensatz zur dortigen Lösung werden die Treiber aber direkt vom Microcontroller ohne Zwischenschaltung eines Dekoderbausteins angesteuert. Bedingt durch die Größe der 7-Segmentanzeigen wurden diese über eine extra große Lochrasterplatine (233 x 160 mm) verdrahtet.


Abbildung 3: Schaltung der Anzeigeplatine


Die Schaltung der Anzeigeplatine ist im folgenden Bild dargestellt.

Allerdings erwies sich auch diese Lochrasterplatine als zu klein für die Anzeigen. Für die obere Pinreihe musste deshalb ein Stück Lochrasterplatine angestückelt werden. Um die mechanische Stabilität dieses Aufbaus schon in der Experimentierphase zu gewährleisten, wurde die Anzeigeplatine samt der Anzeige selbst, bereits am Anfang in die obere Halbschale des benutzten Plastikgehäuses eingebaut. Da es leider nicht möglich war ein Plastikgehäuse bestehend aus symmetrischen Halbschalen zu bekommen, das entweder komplett aus Plexiglas besteht oder idealerweise eine Plexiglasoberschale besitzt, wurde es nötig großflächige Ausschnitte in die Gehäuseoberschale zu sägen. Über die stehengebliebenen Stege oben, mittig und unten wurde zum einen die Anzeigeplatine mit dem Gehäuse verschraubt und zum anderen eine Plexiglasabdeckung mit doppelseitigem Klebeband fixiert. Die Verdrahtung der Anzeige erfolgte gemäß der geplanten Muliplexansteuerung mit einer Parallelschaltung aller Segmentkatoden. Die gemeinsame Anode aller Segmente einer Anzeige wurde ebenfalls auf den Kabelanschluss SV1 der Anzeigeplatine verbunden. Damit ergibt sich eine Leitungsanzahl von 11 (7 Segmente aller 4 Anzeigen, 4 Auswahlleitungen der jeweilig aktiven Anzeige). Der Dezimalpunkt der Anzeigen wird nicht benutzt und darum auch nicht verdrahtet.

Trotz dieser Einschränkung auf der Anzeigeplatine ist aber ein separater Treiber für den Dezimalpunkt auf der Steuerplatine vorgesehen.

Im folgenden Bild ist die in Eagle entworfene Steuerplatine zu sehen:


Abbildung 4: Steuerplatine bestückt


Für die beiden seriellen Schnittstellen des R8C13-Moduls wurde jeweils ein Pegelwandler von TTL auf RS-232 vorgesehen. Zum Einsatz kam ein bewährter MAX232. Aufgrund der beengten Platzverhältnisse hier allerdings in SMD-Bauform (SO16-Gehäuse). Die Außenbeschaltung entspricht der Applikationsempfehlung von Maxim.

Für die Ladung des Akkus wird ein externes Netzteil, das eine einstellbare Konstantspannung liefert vorgesehen. Im Match Display wird lediglich eine Schaltung bestehend aus D1, D2, R13, R14, R15 integriert, die es erlaubt den Ladezustand des Akkus zu überwachen. Um ein extern angeschlossenes Ladegerät sicher erkennen zu können war es nötig, in Reihe liegende Dioden zu integrieren (D1, D2). Die Messung des Ladestromes geschieht über den Messshunt R13.

Die Ladeüberwachungsschaltung wurde wie folgt ausgelegt :

  1. Maximaler Ladestrom ist 20% der Akkukapazität. Mit einer Akkukapazität von 1.2Ah ergibt sich damit ein Strom von 240mA.

  2. Die Akkuspannung im entladenen Zustand wird mit 10.5V angenommen.

  3. Die Flußspannung von D1 und D2 liegt bei 0.7V.

  4. Die Akkuspannung im voll geladenen Zustand beträgt 13.5V.

  5. Der Ladestrom im voll geladenen Zustand wird mit 1/100 der Akkukapazität angenommen. Mit einer Akkukapazität von 1.2Ah ergibt sich damit ein Strom von 12mA.

  6. Im entladenen Zustand ergibt sich damit UCharger = 0.7V + 0.24A R13 + 10.5V.

  7. Im voll aufgeladenen Zustand ergibt sich UCharger = 0.7V + 0.012A R13 + 10.5V.

Daraus ergibt sich, dass das externe Ladegerät eine konstante Spannung von 14.36V bei einem maximalen Strom von 240mA liefern muss. Der Widertsand R13 ergibt sich zu 13Ω, gewählt wird 12Ω. Über die 2 ADC-Eingänge AN0 und AN1 wird die Akkuspannung und die Ladespannung gemessen.

Das verwendete 4kanalige FS20-Empfangsmodul ELV besteht aus einem 868MHz-Funkempfangsteil und einem eigenen Microcontroller, der Fernbedienungscodes speichert und über 4 Open-Collectorstufen nachfolgende Verbraucher schaltet. Natürlich wäre es auch möglich gewesen ausschließlich das 868MHz-Funkempfangsteil einzusetzen und es über die serielle Schnittstelle mit dem R8C13 zu verbinden. Allerdings ist die Stromaufnahme des Controllers im FS20-Empfangsmodul so klein und der Formfaktor des kompletten Moduls ebenso, so dass sich dieser Zusatzaufwand nicht lohnte. Zwei der 4 Open-Collectorausgänge wurden an die interruptfähigen R8C13-Eingänge INT0 und INT1 angeschlossen. Das FS20-Empfangsmodul wurde auf den vorhandenen 4-Kanal-Tastensender programmiert, es kam der 4-Kanal-Modus zum Einsatz.

Bei diesem Modus schaltet eine Betätigung auf einem der 4 Tasten des Senders einen Ausgang um. Damit entspricht eine Tasterbetätigung einem beliebigen Zustandswechsel (L==>H oder H==>L). Die Interrupteingänge müssen damit sowohl auf fallende als auch auf steigende Flanken reagieren. Die Festlegung dieses Modus' wird ebenfalls im EEPROM des FS20-Empfangsmoduls gespeichert. Die Open-Collector-Ausgänge des Moduls werden ohne externe Pull-Up-Widerstände mit den Interrupteingängen des R8C13 verbunden, es werden die internen Pull-Up-Widerstände des Controllers konfiguriert.

Für die Erzeugung der 5V-Versorgungsspannung des R8C13 und des FS20 Empfangsmoduls kam ein 7805-Festspannungsregler zum Einsatz.

Die komplette Schaltung der Steuerplatine findet sich in folgendem Bild:


Abbildung 5: Schaltung Steuerplatine



Stückliste :

Menge Bez. Bauteil,Wert Best.-nr.
4 C1,C2,C3,C4 1µ,25V  
2 C5,C6 10µ,25V  
2 D1,D2 SY320  
1 IC1 Dual-In-Line Socket DIL32  
1 IC2 MAX232SO  
1 IC3 7805  
4 J1,J2,J3,J4 Flachstecker für Printmontage Breite 4.75mm FS-R 4,75
(Reichelt)
1 LED1 LED ϕ5mm, gelb  
4 Q1,Q2,Q5,Q9 BD236  
12 Q3,Q4,Q7,Q8,Q10,Q11,Q12,Q13,Q14,Q15,Q16,Q17 BC337  
4 R1,R2,R3,R4 2k2  
8 R5,R6,R7,R8,R9,R10,R11,R12 150R  
1 R13 12R,5W 5W AXIAL 12
(Reichelt)
2 R14,R15 100k,Präzisionspotentiometer 25Gänge stehend 64W-100K
(Reichelt)
1 R16 1k  
1 R17 10k  
4 RN1,RN2,RN3,RN4 2k2,SIL8,SIL-RESISTOR SIL8-4 2.2k
(Reichelt)
1 S1 M9040P, TOGGLE SWITCH AS500APC
(Reichelt)
1 S2 Taster Taster 9903
(Reichelt)
1 SV1 Wanne26p  
1 SV2 MA09-1,PIN-HEADER  
1 SV3 MA03-1,PIN-HEADER  
2 X1,X2 F09VP,SUB-D D-SUB BU 09TL
(Reichelt)
1   Elektor-Evalboard R8C13 EVB R8C13
(Reichelt)
4   Kingbright SA40-19SRWA 6836810
(ELV)
1   4-Tasten-Handsender FS20S4 6857564
(ELV)
1   4kanaliger Funkempfänger FS20SM4 6846119
(ELV)
1   Blei-Gel-Akku, 12V, 1.2Ah, FM1213 70-270 427
(Pollin)
1   Gehäuse, Polystyrol grau 15S8JSGYPBK 522695
(Conrad)


Die Potentiometer R14 und R15 wurden so eingestellt, dass ¼ der zu vermessenden Spannung (Ladegerät und Akku) am ADC-Eingang des R8C13 ansteht.

Unter folgendem Link findet sich ein ZIP-Archiv mit den Eagle-Daten für Anzeige- und Steuerplatine des MatchDisplay (Link).

Mechanischer Aufbau

Wie bereits oben erwähnt wurde zuerst die Anzeigeplatine in die vordere Gehäuseschale eingebaut. Die Steuerplatine und das FS20-Empfangsmodul wurden auf eine Sperrholzplatte geschraubt, die ihrerseits auf den 2 herausstehenden M3-Schrauben der Befestigung der Anzeigeplatine sitzt. Im hinteren Teil des Gehäuses ist der 12V-Blei-Gel-Akku befestigt, der auf der unteren Seitenwand steht und seitlich und von oben mit Winkeln an der hinteren Gehäuseschale fixiert ist. Um ein Herausfallen des Akkus nach vorn zu verhindern ist auf der Akkuseitenwand ein Stück Schaumstoff mit doppelseitigem Klebeband fixiert. Auf der linken Seite der hinteren Gehäusehalbschale befindet sich der Ein/Aus-Schalter des MatchDisplay, auf der rechten Seite ist eine 6.3mm Klinkenbuchse für den Anschluss des Ladegerätes eingebaut. Alle elektrischen Verbindungen zwischen Akku, Ladebuchse, Schalter und Steuerplatine sind über Litzen realisiert. An Akku und Steuerplatine sind Flachstecker an die Litzen gelötet, die Ladebuchse und der Ein/Aus-Schalter sind direkt an die Litzen gelötet.



Abbildung 6: Mechanischer Aufbau innen komplett





Die Software

Die SW wurde komplett in C geschrieben. Als Entwicklungsumgebung kam die HEW von Renesas zum Einsatz, die auch in Elektor 12.2005 vorgestellt und per CD verteilt wurde. Getrennt nach Funktionsblöcken wurde die SW über Quelldateien für ADC's, externe Interrupts, HW-Timer und Displaytreiber verteilt. Aufgrund der Komplexität der Displayansteuerung im Multiplexverfahren wurde der Treiber in 1 hardwarenahe und 1 hardwarefernere Schicht in 2 Quellkodedateien getrennt. Zusätzlich gibt es noch das Mainfile, was die Initialisierungsfunktionen aufruft und anschließend in die endlos abgearbeitete Main Loop springt, die die Haupt-Statemachine realisiert und die angezeigten Inhalte steuert. Für eine leichtere Lesbarkeit des Codes wurden alle Definitionen im Quellcode symbolisch angelegt. Die durchlaufenen States, samt Übergangsbedingungen sind in Abbildung 7 dargestellt.

Über folgenden Link kann die aktuellste Firmware (Version : 0614) des MatchDisplay inklusive der Quellkodes als HEW-Umgebung heruntergeladen werden (Link).

Die aktuelle Firmware des MatchDisplay berücksichtigt die „alte“ Zählweise (siehe [3]) im Badmintonspiel. Damit kann ein Spieler mit 15 Punkten ein Spiel gewinnen. Wenn ein Spielstand von 14:14 erreicht wird, verlängert sich das Spiel bis der erste Spieler 17 Punkte erreicht hat.


Die Anzeigeinhalte bei den verschiedenen Modi sind die folgenden :

  1. revisionState : Anzeige der Revision der Controllerfirmware im Format

wobei 8 für den Monat August und 14 für den Tag steht. Der Modus wird 5s nach Einschalten automatisch verlassen.

  1. gameDisplayState : Anzeige des aktuellen Punktestandes in einem Spiel. Die führenden Nullen werden ausgeblendet. Wird verlassen wenn das Spiel nach dem aktuellen Stand beendet ist z.B. ein Spieler 15 Punkte hat und der andere mindestens 2 Punkte weniger.

  2. matchDisplayState: Anzeige der bereits gewonnenen Spiele mit dem Anfangsbuchstaben des Spielers davor mit für Andreas und für Stefan. Wird auf beliebigen Tastendruck hin verlassen.

Anzeige z.B.

  1. battEmptyState: Anzeige von

als Indikation, dass der Akku leer ist und geladen werden muss.

  1. chargeState: Anzeige von

und einem Prozentwert der über das Steigen der Akkuspannung versucht einen linearen Ladezustand darzustellen. Wechselt normalerweise am Ladeende nach fullState.

  1. fullState: Anzeige von

zeigt den voll geladenen Zustand des Akkus und wird über das Abziehen des Ladegerätes verlassen.


Die Main-Function bildet folgende Haupt-Statemachine ab, die die indizierten Inhalte darstellt.


























Abbildung 7: Flussdiagramm Haupt-Statemachine

Erweiterungen

Im Sinne einer vorhandenen großformatigen numerischen Anzeige mit 4 Stellen die portabel und netzunabhängig eingesetzt werden kann, sind viele weitere Einsatzmöglichkeiten denkbar wie z.B.:

  1. Eine Spielstandsanzeige für Tennis

  2. Eine Spielstandsanzeige für Tischtennis

  3. Eine Spielstandsanzeige für Fuß-, Basket- oder Handball

  4. Eine großformatige Stoppuhr für beliebige Zeitanzeigen


Das der Autor nur im Badminton aktiv ist, wurde keiner dieser Einsatzmöglichkeiten weiter verfolgt und es bleibt der Kreativität der Leser überlassen weitere Anwendungen zu finden und zu realisieren.

Quellen

1: Kingbright : Datenblatt SA40

2: S. Hühn : Multiuhr

3: Wikipedia : Badmintonregeln