
Nützliche Programme im Spielecontroller 2018
Elektronik-Labor
Projekte
AVR
Tiny85
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