Im folgenden Beispiel zeige ich, wie ein alter Sharp Pocket Computer aus den 1980er Jahren als Eingabegerät für Arduino Projekte genutzt werden kann.
Ich verwende dazu den damals sehr weit verbreiteten und heute gebraucht noch immer erhältlichen Sharp PC-1401.
Geeignete funktionierende Geräte mit Abnützungserscheinungen oder Displayfehlern sind bei ebay um wenige Euro zu haben, gut erhaltene Rechner werden zu Sammlerpreisen gehandelt.
Es lassen sich mit untenstehendem Basic-Programm alle 76 Tasten des PC-1401 abfragen und für Arduino Projekte verwenden.
- Tastencodes siehe Tastaturmatrix des Sharp PC-1401
Beim ersten Aufruf muß das BASIC Programm mit RUN gestartet werden, damit das Maschinenprogramm in den Speicher geladen wird (Dauer 6 Sekunden).
Weitere Aufrufe können mit DEF A erfolgen. Das Programm startet mit einem Piepton (BEEP 1).
Ein Tastendruck wird durch einen kurzen Piepston im Pocket Computer und ein Blinken der Info-LED (D13) am Arduino angezeigt.
Die Datenübertragung erfolgt über Pin 4 (Busy) und Pin 5 (Dout) der Schnittstelle des Pocket Computers zu den Digitaleingängen D9 und D8 am Arduino.
Über Dout wird der eigentliche Tastencode seriell übertragen, ein HIGH auf der Leitung Busy dient zur Anzeige gültiger Daten.
An externer Beschaltung sind lediglich zwei pull-down Widerstände und eine Verbindung von GND zu Pin 3 erforderlich.
Im Arduino Beispielprogramm wird die Tasten-Eingabe über die Arduino Hardware (Micro bzw. UNO) am Serial-Monitor der Arduino-IDE ausgegeben.
Im Anschluß folgen Ergänzungen für das Arduino Beispielprogramm mit dem auch das benötigte BASIC Programm vom Arduino mittels CLOAD in den Sharp PC-1401 geladen werden kann.
Man erspart sich so nicht nur das mühsame Eintippen des BASIC Programms in den Pocket Computer, sondern es können auch Geräte mit stark beschädigtem Display verwendet werden.
Die wenigen nötigen Eingaben schafft man auch im Blindflug.
Dazu wird der Digitalausgang D7 des Arduino mit Pin 6 (Port Xi) des Pocket Computers verbunden. Über D19 (A5) wird eine Status LED angesteuert, die während der Übertragung des BASIC Programms leuchtet.
Die Übertragung dauert ca. 9 Sekunden und wird durch Drücken eines Tasters gestartet, der GND mit D17 (A3) des Arduino verbindet.
Zuvor muß am Sharp Pocket Computer im Run-Mode der Befehl CLOAD eingegeben und die ENTER Taste gedrückt werden.
void loop() {if (digitalRead(Btn1) == LOW) CSAVE(); // Basic Programm an Sharp PC-1401, Port-Xi senden
...} // Ende loop
Ergänzung der neuen Prozeduren CSAVE, sendbit und pulseout:
void CSAVE() { // Basic Programm an Sharp PC-1401, Port-Xi sendenSerial.println();Serial.print("CSAVE Beginn ... ");digitalWrite(StatusLED, HIGH);delay(500);// Syncing an Xi:for (int x = 0; x < 125; x++) sendbit(1);// 125 High Bits (= 1000 kurze Pulse) an Xi sendensendbit(0);// 1 Low Bit (=4 lange Pulse) an Xi senden// Header an Xi senden:for (int x = 0; x < headersize; x++) {for (int y = 0; x < 4; y++) sendbit(bitRead(DATA_HEADER[x], y));
sendbit(1);
sendbit(0);for (int y = 4; x < 8; y++) sendbit(bitRead(DATA_HEADER[x], y));
sendbit(1);
sendbit(1);
sendbit(0);
}// Programm an Xi senden:for (int x = 0; x < basicsize; x++) {for (int y = 4; y < 8; y++) sendbit(bitRead(DATA_BASIC[x], y));
sendbit(1);
sendbit(0);for (int y = 0; y < 4; y++) sendbit(bitRead(DATA_BASIC[x], y));
sendbit(1);
sendbit(1);
sendbit(0);
}// Letzte Pruefsumme an Xi senden:for (int y = 4; y < 8; y++) sendbit(bitRead(DATA_CHK, y));
sendbit(1);
sendbit(0);for (int y = 0; y < 4; y++) sendbit(bitRead(DATA_CHK, y));
sendbit(1);
sendbit(1);
sendbit(1);
sendbit(1);
digitalWrite(StatusLED, LOW);Serial.println("Ende");Serial.println();
}void sendbit(int b) {if (b == 1) { // Bit = 1for (int z = 0; z < 8; z++) pulseout(pulse8); // 8 kurze Pulse = HIGH}if (b == 0) { // Bit = 0for (int z = 0; z < 4; z++) pulseout(pulse4); // 4 lange Pulse = LOW}
}void pulseout(int d) {digitalWrite(OUT_Xi, HIGH);delayMicroseconds(d);digitalWrite(OUT_Xi, LOW);delayMicroseconds(d);
}