Programmiereung des Mikrocontrollers
HT46F47E TPSFür das Programmieren des Mikrocontrollers HT46F47E werden lediglich zwei Tasten benötigt. Es sind die Tasten S1 und S2.
Die dritte Taste S3, Reset, wird benötigt, um in den Programmiermodus des Controllers zu gelangen. Mit vier Leuchtdioden, die an die
Ausgänge des Controllers angeschlossen werden, werden die Eingaben visualisiert. Um die Programmierung durchführen zu können, wird
der Mikrocontroller wie folgt verschaltet:
Programmierungs - Grundschaltung
Auf einem Steckbrett könnte die Schaltung wie folgt aussehen:
Schaltung auf Steckbrett
Die Anordnung der Leuchtdioden ist dabei nicht zufällig. Die Befehle und zugehörige Daten werden über die vier LEDs binär
angezeigt. Dabei hat jede Leuchtdiode eine andere Wertigkeit. Die D1 hat den Wert 1, die D2 den Wert 2, die D3 den Wert 4 und
schließlich D4 den Wert 8. Bei Eingabe der Zahl 7 würden dann D3, D2 und D1 aufleuchten (4+2+1).
Programme eingebenEs soll folgendes Programm in den Mikrocontroller eingegeben werden:
CC 31 71 54 29 90
Die Funktionalität: Beim Betätigen der Taste S1 wird die Variable C um 1 erhöht. Der aktuelle Wert der Variable
wird binär mithilfe der Leuchtdioden D1 bis D4 angezeigt. Das Programm mit Adressen und Kommentaren:
000 CC Überspringe den folgenden Befehl, wenn S1 betätigt wird.
001 31 Springe -1
002 71 Führe die Operation A = A +1 durch
003 54 Übertrage den Wert von A auf die digitalen Ausgänge
004 29 Warte 1 s.
004 90 Springe zurück auf die Adresse 0
Um das Programm einzugeben muss Folgendes getippt werden:
Programmiermodus aktivieren:
S2 ein
S3 ein
S3 aus
S2 nach ca. 1 s aus
Programm Eingabe (Mit S1 werden die Daten eingegeben, mit S2 erfolgt die Speicherung):
13xS1 / 1xS2 / 13xS1 / 1xS2
4xS1 / 1xS2 / 2xS1 / 1xS2
8xS1 / 1xS2 / 2xS1 / 1xS2
6xS1 / 1xS2 / 5xS1 / 1xS2
3xS1 / 1xS2 / 10xS1 / 1xS2
10xS1 / 1xS2 / 1xS1 / 1XS2
Programmiermodus verlassen:
S3 ein
S3 aus
Das Programm wird gestartet, nachdem man die Taste S1 gedrückt hat.
Programme lesenMan kann durch das vorhandene Programm problemlos scrollen und es ansehen. Dazu aktiviert man zuerst den
Programmierungsmodus (wie oben beschrieben). Anschließend scrollt man mit der Taste S2 durch das ganze Programm. Die aktuellen
Programm-Werte (Befehle und Parameter) werden mithilfe der Leuchtdioden binär nacheinander angezeigt.
Programme ändernEin vorhandenes Programm lässt sich leicht ändern. Zunächst aktiviert man den Programmiermodus (wie oben beschrieben)
und scrollt mit der Taste S2 bis zu der Stelle, wo Änderung stattfinden soll. Mit der Taste S1 verändert man den Befehl oder die Daten.
Anschließend wird die Änderung mit S2 gespeichert.
Programme eingeben mit Arduino
Arduino Nano
Arduino - Kurzeinführung
Arduino - Versuche
Bei längeren Programmen kann sich die Tastenprogrammierung ziemlich mühevoll erweisen. Alternativ kann man die
Programmierung des HT46F47E mithilfe des Arduino durchführen. Der Vorteil bei der Lösung ist der Ausschluss von Tippfehlern. Zu diesem
Zweck wird die oben abgebildete Grundschaltung um Arduino, einen Taster und eine Leuchtdiode erweitert. Mit dem Taster wird der
Programmierungsvorgang gestartet, die zusätzliche Leuchtdiode leuchtet während der Programmierung auf. Die Schaltung sieht dann wie
folgt aus:
Schaltung: Programmierung mit Arduino
Aufgebaute Schaltung mit Arduino
Das Lade-Programm (Arduino)
// ----------------------------------------------------------
// HT46F47E Programmierung
// Arduino Nano, IDE 1.8.13
// ----------------------------------------------------------
String TPS_Programm = "CC 31 71 54 29 90" ; // Programm - Listing
int S1_Taste = 2; // HT46F47E Eingabe Taste
int S2_Taste = 3; // HT46F47E Speichern Taste
int S3_Taste = 4; // HT46F47E Reset Taste
int Start_Taste = 5; // Arduino Start
int LED = 10;
int S1; // Zählvariable
int Time = 500;
void setup() {
pinMode (S1_Taste, OUTPUT);
pinMode (S2_Taste, OUTPUT);
pinMode (S3_Taste, OUTPUT);
pinMode (LED, OUTPUT);
pinMode (Start_Taste, INPUT_PULLUP);
}
// Daten Übertragen
void Senden () {
for (int j=0; j < S1; j++) {
digitalWrite(S1_Taste, LOW);
delay (Time);
digitalWrite(S1_Taste, HIGH);
delay (Time);
}
digitalWrite(S2_Taste, LOW);
delay (Time);
digitalWrite(S2_Taste, HIGH);
}
void loop() {
digitalWrite(S1_Taste, HIGH);
digitalWrite(S2_Taste, HIGH);
digitalWrite(S3_Taste, HIGH);
digitalWrite(LED, LOW);
if (digitalRead( Start_Taste) == LOW) { // Übertragung starten
digitalWrite(LED, HIGH); // Anzeige LED ein
digitalWrite(S2_Taste, LOW); // Programmierung-Modus Ein
digitalWrite(S3_Taste, LOW);
delay (Time);
digitalWrite(S3_Taste, HIGH);
delay(1000);
digitalWrite(S2_Taste, HIGH);
// Programm übertragen
for (int i=0; i < TPS_Programm.length(); i++) {
char Zeichen = TPS_Programm [i];
switch (Zeichen) {
case '0': { S1 = 1; Senden(); break; }
case '1': { S1 = 2; Senden(); break; }
case '2': { S1 = 3; Senden(); break; }
case '3': { S1 = 4; Senden(); break; }
case '4': { S1 = 5; Senden(); break; }
case '5': { S1 = 6; Senden(); break; }
case '6': { S1 = 7; Senden(); break; }
case '7': { S1 = 8; Senden(); break; }
case '8': { S1 = 9; Senden(); break; }
case '9': { S1 = 10; Senden(); break; }
case 'A': { S1 = 11; Senden(); break; }
case 'B': { S1 = 12; Senden(); break; }
case 'C': { S1 = 13; Senden(); break; }
case 'D': { S1 = 14; Senden(); break; }
case 'E': { S1 = 15; Senden(); break; }
case 'F': { S1 = 16; Senden(); break; }
}
}
}
}
Das Listing des HT46F47E Programms wird vor der Programmierung als String der Variable „TPS_Programm“ zugewiesen.
Hier wird Listing eingefügt.
Nach der Programmierung soll Arduino aus der Schaltung entfernt werden. Bei Betätigen der Tasten S1, S2 oder S3 können
sonst seine Ausgänge beschädigt werden.
Google-Suche auf MEINE-SCHALTUNG.de :
|
|