Nützliche Programme im Spielecontroller 2018    


Elektronik-Labor   Projekte   AVR  Tiny85




Video: https://youtu.be/RPZUUhmBFFI


Der Mikrocontroller HT46F47 im Spielecontroller 2018 enthielt nicht nur  die eigentlichen Spiele, sondern auch einige Zusatzprogramme, die im Elektronik-Labor oder für spezielle Geräte nützlich werden können. Eine Übersicht findet man in den Lösungen im Kalender-Wettbewerb. Um diese Anwendungen dauerhaft nutzen zu können, habe ich den Controller mit einer Fassung auf eine Platine gelötet. Der Aufbau entspricht weitgehend den typischen Spielen im Kalender.

Achtung Verwechselungsgefahr! Der HT46F47 wurde auch schon für die Tastenprogrammierbare Steuerung und für den Spielekalender 2017 verwendet. Diese beiden Controller enthalten diese Zusatzprogramme nicht. Außerdem wurde die Firmware-Version 2017 auch für eine englische Ausgabe des Spielekalenders und für das Conrad-Paket Retro-Games verwendet. Ein Spielekalender 2019 ist in Arbeit, aber er wird wieder die Firmware von 2017 verwenden. Wer unsicher ist, welche Version auf dem Tisch liegt, kann folgendes untersuchen: Man drückt auf Reset und beobachtet die vier LEDs am oberen Rand. Nur in der Spieleversion 18 wurden die Pullup-Widerstände für diese Pins eingeschaltet. man sieht deshalb ein schwaches Leuchten an jeder der LEDs.

Als Ersatzteil und für eigene Anwendungen hat die Firma Modul-Bus den Spielecontroller 2018 mit in den Shop aufgenommen: www.ak-modul-bus.de/stat/ht46f47e_mit_spielecomputer_firmware_201.html
 




Die einzelnen Spiele werden durch einen Spannungsteiler mit zwei Widerständen am Pin 8 ausgewählt.  Sie sind hier nicht nötig, weil alle Zusatzprogramme mit GND oder VCC am Pin 8 gestartet werden. Die fünf Tasten bleiben unverändert. Nur die LED am Pin 18 wurde fest verbunden, eine LED am PWM-Ausgang an Pin 9 ist abschaltbar über einen Jumper angeschlossen, weil sie in manchen Anwendungen nerven kann. Genauso ist der Piezo-Schallgeber zwar fest mit der Platine verschraubt, aber nur über einen Jumper an Pin 1 gelegt.  Die fest angelötete Li-Batterie mit 3 V (ausgebaut aus einem Funk-Rauchmelder) wird ebenfalls über einen Jumper eingeschaltet.




Ein Jumper zwischen Pin 8 und Pin 9 schaltet die Auswahlspannung an GND. Ein zweiter Jumper zwischen Pin 8 und Pin 7 kann gesteckt werden, um die Spannung am AD-Eingang über den Pullup von Pin 4/Pin7 an VCC zu legen und damit andere Programme zu starten.  In andern Anwendungen dienen die beiden Pinne als Eingang für den zweiten AD-Kanal z.B. zur Nutzung eines Bauteiletesters.

Der erste Test

Pin8 wird gegen Pin 9 (GND) gejumpert und die Batterie eingeschaltet. Nun läuft das erste Spieleprogramm. Die LED an Pin 18 blinkt. Wenn man den Piezo-Jumper schließt, hört man eine unterbrochene Tonfolge. Damit weiß man, dass alles korrekt läuft, aber es wurde noch keines der Zusatzprogramme gestartet.

Ein Druck auf Reset-Taster oben rechts zeigt, dass die gelbe LED schwach leuchtet. Das bestätigt noch einmal, dass der korrekte Controller eingesetzt wurde.  Nun kann man auf einen der unteren Taster drücken und zusätzlich kurz Reset betätigen.  Damit startet man eines der Zusatzprogramme. Der folgende Ausschnitt aus der Firmware zeigt die Auswahl der Zusatzprogramme:

if (u<10){ 								//GND
if (start_key == 0) pro18(); //Tongenerator
if (start_key == 1) pro3(0); //VCO aufwaerts
if (start_key == 2) pro17(); //Morsen
if (start_key == 3) pro1b(); //Wuerfel
pro1(); //8 Bit Zähler Tag 2...7
}
if (u>250){ //VCC
if (start_key == 0) pro6b(); //Entspannungslicht
if (start_key == 3) pro16(); //Mini klavier

Anwendung des VCO als Bauteiletester

Mit der zweiten Taste von links startet man den VCO. Ein Blick auf den Quelltext zeigt, was dahinter steckt. Der Tongenerator liegt am Port PA3 (= Pin 1) und wird eingeschaltet, indem der Port gesetzt wird. Die Initialisierung der Tonausgabe wurde schon vorher erledigt. In einer Endlosschleife wird der analoge Eingang ADC1 mit einer Auflösung von 8 Bit gelesen. Das Ergebnis in t wird an den Timer übergeben und bildet dann das Teilerverhältnis zur Erzeugung des Tons. Praktisch wird hier die Taktfrequenz erst durch einen Vorteiler und dann durch 255-t dividiert. Daraus folgt: Die gleiche Funktion wird an anderer Stelle mit dem Übergabeparameter 1 als Lügendetektor gestartet, was die Tonübertragung umkehrt.

Zusätzlich wird t auch an den PWM-Ausgang übergeben, der völlig unabhängig von der Tonausgabe ist. Man kann daher auch ein PWM-Signal über eine Eingangsspannung steuern. Ein Poti an AD1, ein Anschluss an Pin 10, fertig ist die universell einsetzbare PWM-Steuerung. Dazu war nur ein zusätzlicher Befehl im Programm nötig. Das musste also sein, denn das Ziel war ja, aus den letzten paar freien Bytes noch möglichst viel Nutzen zu ziehen.

void pro3 (byte p){ //Tonhoehe ueber ADC1 
byte t;
_pa3=1;
while (1){
t=adc(1);
if (p) t= 255-t; //Invertiert
_tmr=t;
_pwm=t;
mydelay(2);
}
}

Der VCO wird in den Spielen als Musikinstrument und für den Lügendetektor verwendet. Dabei ist der ADC-Eingang 1 hochohmig. Beim Lügendetektor wird ein externer Pillup mit 470 k verwendet. Auf der Platine  ist der Taster 3 (von links)  so eingelötet. dass die Pinne 4 und 7 des Controllers permanent verbunden sind. Für Pin 4 ist über die Fuse-Einstellungen ein interner Pullup eingeschaltet, der nun auch den AD-Eigang hoch zieht. Der Pullup hat ca. 30 kOhm. Bei offenem Anschluss liegt der Eingang daher an VCC. Der VCO erzeugt die unhörbare höchste Frequenz von 72 kHz. Mit einem Druck auf S3 schließt man den Eingang gegen GND kurz und erhält die Frequenz 73 kHz /256 = 285 Hz. Mit zwei Messkabeln können nun Widerstände zwischen 1 k und 100 k und auch andere  Bauteile getestet werden (siehe Video https://youtu.be/RPZUUhmBFFI).



Taktfrequenzmessung des HT46F47

Der nicht verwendete Pin Osc2 kann verwendet werden um die aktuelle Taktfrequenz zu messen. Man muss dazu nur einen externen Pullup anschließen und erhält dann ein Signal mit 25% kurzen Impulsen und einer Frequenz von einem Viertel der Taktrate, die wiederum von Widerstand an Osc1 bestimmt wird. Hier wurden 1,166 MHz gemessen, der Controller läuft also aktuell mit 4,664 MHz.  Die tiefste VCO-Frequenz ergibt sich mit 4664 kHz /64/256 =  284,6 Hz.



Das Signal lässt sich mit einem Mittelwellenradio oberhalb 1,1 MHz abhören. Dabei kann man gewisse Schwankungen und eine Art Frequenzmodulation in Abhängigkeit vom gerade aktiven Programm erkennen.


Signalgenerator und PWM-Steuerung


Im Elektronik-Labor benötigt man oft eine stabile Signalquelle einstellbarerer Frequenz. Sie wurde deshalb hier in den Zusatzprogrammen untergebracht. Und weil der Aufwand gering war, steuert das gleiche Programm auch gleich eine PWM-Ausgabe.

void pro18 (void){ //Tongenerator
o=1;
_pa3 = 1;
while(1){
if (_s1==0) o++;
if (_s4==0) o--;
_tmr=o;
_pwm=o;
mydelay(3);
}
}

Mit der Taste 1 wird das Programm gestartet, sie dient aber zugleich auch zur Erhöhung der Frequenz. Der Frequenzumfang beträgt auch hier wieder 285 Hz bis ca. 73 kHz. Die Taste 4 verringert die Frequenz. Der Rechteckgenerator dient als Signalquelle für verschiedene Messungen und für Tests an Verstärkern, Filtern, Lautsprechern usw.

Gleichzeitig wird auch der PWM-Ausgang zwischen 0% und 100% eingestellt.  Mit einem Tiefpassfilter am PWM-Ausgang könnt man eine einstellbare Gleichspannung gewinnen. Andere Anwendungen des PWM-Signals sind Motorsteuerungen oder die Steuerung eines Lüfters.




Eine weitere Anwendung des Programms ist die Steuerung der eigenen Taktfrequenz. Ein Tiefpassfilter (10 k und 100 µF)  liefert eine einstellbare Gleichspannung, die über 100 k den Pin Osc2 steuert. Damit ändert man die interne Taktfrequenz. Ein Viertel dieser Frequenz erscheint an Osc1. Damit erhält man einen über S1 und S2 einstellbaren HF-Generator von 900 kHz bis 1,6 MHz. Mit weniger als 100 k könnte man den Umfang bei Bedarf noch vergrößern.



Elektronik-Labor   Projekte   AVR  Tiny85