Modellbahn-Platine/HT46F47umprogrammieren

von Hermann Nieder                  
Elektronik-Labor  Projekte   Holtek

 

Nachdem ich einige Zeit mit der Platine und den Bauteilen aus einem Lernpaket Modellbahn experimentiert hatte, wollte ich den Mikrocontroller darauf nun auch selbst programmieren. Ich hatte mir zuvor alle Beiträge von Burkhard Kainka zum Mikrocontroller HT46F47 von Holtek genau angesehen und mir schließlich auch ein EIC-300 gekauft, mit dem ich die Neu-Programmierung bewerkstelligen wollte.


Vorbereitende Lötarbeiten auf der Platine

Vor der  eigentlichen Programmierung nahm ich auf der Platine aus dem oben erwähnten Lernpaket noch einige Änderungen vor. Zunächst versah ich den Spannungsregler mit einem Kühlkörper aus einem U-förmigen Stück Aluminiumblech. Darauf lötete ich eine zweipolige Anschlussklemme für die Verbindungsleitungen zur Spannungsversorgung an.

 

An Stelle der Stiftleiste für die Jumper steckt nun eine zweireihige Buchsenleiste in der Platine, an der mir ohne sonstige Änderungen die  Pins PB1, PB2 und PB3 des HT46F47 und rechts daneben jeweils ein Masseanschluss zur Verfügung stehen. An den Rand des kleinen Lötfeldes auf der Platine lötete ich neben  einer 3-poligen einreihigen Buchsenleiste, deren Kontakte auf der Unterseite mit dem Minuspol (Masse) der Platine verbunden wurden, eine weitere als Anschluss für die spätere Programmierung des HT46F47. Von  ihr führen dünne isolierte Drähte zu den Pins des Mikrocontrollers. Die Adapterleiste im Bild dient zum Einstecken der Programmierleitung am EIC-300. Die fertige Platine befestigte ich schließlich mit zwei Schrauben auf einer kleinen rechteckigen Sperrholzplatte. Ab sofort ist es mir möglich, den HT46F47 selbst in Assembler oder auch in C zu programmieren.

Ich hatte vorher auf den Internetseiten www.holtek.com die Entwicklungsumgebung HT-IDE3000 sowie die Software für einen EIC-300 heruntergeladen sowie einige PDF-Dateien mit Anwendungsbeispielen für Mikrocontroller von Holtek.. Burkhard Kainka hatte auf seinen Internetseiten bereits im vergangenen Jahr  in Beiträgen die Vorgehensweise bei der Programmierung eines HT46F47 erläutert und dazu einfache Beispiele gebracht, zu denen man  dort auch die Quelltexte herunterladen kann. Daran konnte ich mich  bei meinen ersten „Gehversuchen“ in der Programmierung eines Holtek-Controllers orientieren.

Nachdem ich in den  „Configuration options“ der Programmiersoftware den Oszillator des HT46F47 auf „RC mode“ und WDT auf „DISABLE“ eingestellt hatte, konnte ich den Mikrocontroller auf der Platine des oben erwähnten Lernpakets  neu programmieren und darauf das Programm in ihm zu starten.

 

Zwei Programmbeispiele in C für den HT46F47

 

Die gelben Leuchtdioden im Bild blinken beim Einschalten der Spannungsversorgung. Die Taktfrequenz lässt sich mit dem Trimmpozenziometer auf der Platine des Lernpakets Modellbahn einstellen. Die Anoden  der Leuchtdioden sind jeweils über einen Vorwiderstand   an einen der Port-Pins Pa0 –  Pa6 angeschlossen, während ihre Katoden alle an Masse liegen. Die Anoden der beiden nebeneinander angeordneten Exemplare liegen gemeinsam (Parallelschaltung) an Pin Pa5. In die Zuleitung aller Leuchtdioden zum Minuspol ist ein Widerstand von 330 Ohm eingefügt, um die Helligkeit des blinkenden Pfeils zu verringern.

Die folgenden Zeilen sind ein Auszug aus dem Programmlisting dazu:

 ...
void main(){

safeguard_init();

_pac = 0; //set port A to output port
_pa = 0; //zero port A (all light on)
_eadi = 0; //Kein Interupt
_acsr = 1; //AD-Clock = 1/8

while (1)
{

_adcr = 8; //nur B0 als ADC0, AdC0 gewaehlt
_start=0;
_start=1; //AD-Start
_start=0;
while (_eocb == 1);
u = _adrh; // Aufloesung 8 Bit
u=255-u;
// Division durch 16
u=u/16; // bzw. u=(u>>4);
// Wert von u legt Ein- und Auszustand der
// LEDs fest
_pa=0b01111111; //Pfeil einschalten
mydelay(u);
_pa=0b00000000; //Pfeil ausschalten
mydelay(u);
}
}
...

 

 

Das Programm für  ein Lauflicht mit 8 Leuchtdioden  wie im Bild  bzw. ein abwechselndes Blinken von einigen von ihnen ist etwas  umfangreicher als das oben beschriebene. Mit einem  Jumper kann man im Hauptprogramm eines der folgenden 4 Unterprogramme auswählen:

Die  Anoden der Leuchtdioden sind jeweils über einen Vorwiderstand auf der Platine des oben erwähnten Lernpakets an einen der Pins Pa0 – Pa7(bzw. L1 - L8) des Mikrocontrollers angeschlossen, wobei  ihre Katoden alle mit dem Minuspol der Schaltung(Masse) verbunden sind. Die Taktfrequenz lässt sich mit dem Trimmpotenziometer  einstellen.

Dies hier ist ein Auszug aus dem Programmlisting:

...
void Rechtslauf()
{
_pa=0b10000000;
mydelay(u);
for(n=0;n<7;n++)
{
_pa=_pa>>1;
mydelay(u);
}
_pa=0b00000000;
mydelay(u);
}

...
void main(){

safeguard_init();

_pac = 0; //set port A to output port
_pa = 0; //zero port A (all light on)
_eadi = 0; //Kein Interupt
_acsr = 1; //AD-Clock = 1/8


while (1)
{

_adcr = 8; //nur B0 als ADC0, AdC0 gewaehlt
_start=0;
_start=1; //AD-Start
_start=0;
while (_eocb == 1);
u = _adrh; //Aufloesung 8 Bit
u=255-u;
u=(u>>4);
// Der Wert von u bestimmt ueber mydelay(u)
// jeweils die Einschaltzeit.
pb = (_pb >> 1) & 7;
if (pb == 7)
{
Blink1();
}
if (pb == 6)
{
Rechtslauf();
}
if (pb == 5)
{
Linkslauf();
}
if (pb == 3)
{
Blink2();
}
}
}

Mikrocontroller-Dateien zum Beitrag herunterladen: HT_LP3.zip


Elektronik-Labor  Projekte   Holtek