Forum: Mikrocontroller und Digitale Elektronik Bedienpanel "automatisieren"


von c.nc (Gast)


Lesenswert?

Hallo,

ich hab hier eine Maschine mit einem Bedienpanel mit 22 Tastern 
(vermutlich in einer 5x5 Matrix, hab das aber noch nicht evaluiert) und 
einem 4x16LCD (HD47780/kompatibel, betrieben im 8-Bit Modus).

Nun würde ich gerne Dinge, die akutell per Hand über das Bedienpanel 
gemacht werden, automatisieren. Dazu brauche ich die Möglichkeit, von 
meiner Steuerungssoftware Buttons zu drücken und das Display 
"abzulesen".

Optimalerweise läuft das parallell zum Panel, d.h. Handbedienung sollte 
weiterhin möglich sein.

Wie geht man hier am besten vor? Hat jemand hier sowas schon gemacht?

Folgendes hab ich mir bisher dazu überlegt:
* Microconroller??? (irgenwas mit DIP Bauform)
* Verbindung zum Steuerungs-PC über USB, Anwendung dockt über libusb an?
* Taster ansteurn über ein paar 4066
* Abgreifen der HD47780 Pins direkt parallel zum Panel?!?
* Emulation des HD47780 auf dem Microconroller mit einem 64byte 
"framebuffer", der via USB ausgelsen werden kann.

Bin für alle Tips, Hinweise und Links dankbar!

von Stefan F. (Gast)


Lesenswert?

Was du da vor hast setzt voraus, dass du für jede mögliche Situation 
ganz genau weißt, was wo auf dem Display erscheint und welche Tasten 
wann wie lange betätigt werden müssen.

Du musst wohl zuerst den Display-Controller nachbilden, nur dass er 
seine Ausgabe in einen RAM Puffer schreibt (statt LCD).

Die Tastendrücke kann man mit Optokopplern simulieren.

Auf jeden Fall brauchst du dazu einen Mikrocontroller. Den würde ich 
aber nur als Schnittstelle zum Gerät verwenden, entsprechend deinem 
"Framebuffer über USB" Ansatz.

Die eigentliche Programmlogik kannst du bequemer auf einem Raspberry pi 
oder PC implementieren - zumindest für den Anfang.

Muss das denn wirklich so gemacht werden? Gibt es wirklich keinen 
einfacheren Weg? Lohnt sich der hohe Aufwand?

von c.nc (Gast)


Lesenswert?

Hallo Stefan,

> Was du da vor hast setzt voraus, dass du für jede mögliche Situation
> ganz genau weißt, was wo auf dem Display erscheint und welche Tasten
> wann wie lange betätigt werden müssen.

Ja, das ist klar. Das parsen der Anzeige (bzw. des Framebuffers) in der 
PC Anwendung sollte kein Problem darstellen.

> Du musst wohl zuerst den Display-Controller nachbilden, nur dass er
> seine Ausgabe in einen RAM Puffer schreibt (statt LCD).

genau das war meine Idee: Ein Microcontroller liest die Daten mit, 
emuliert den HD4770 "Befehlssatz" und schreibt das Ergebnis in einen 64 
Byte Puffer im RAM. Der Bufferinhalt sollte dan "auf der anderen Seite" 
des Controllers via USB einem PC zugänglich sein.
Was mich mehr interessiert: kann ich die Input Ports eines - sagen wir 
mal - ATmega64 direkt an die Pins des HD47780 andocken und dort immer 
bei fallender Flanke am Enable D0 bis D7 lesen oder stelle ich mir das 
zu einfach vor? (Sorry, ich hab mehr Ahnung von Software als von 
Hardware :-) )

> Die Tastendrücke kann man mit Optokopplern simulieren.

OK, wg. ganvalischer Trennung? Oder tuns auch ein paar MC4066?

> Auf jeden Fall brauchst du dazu einen Mikrocontroller. Den würde ich
> aber nur als Schnittstelle zum Gerät verwenden, entsprechend deinem
> "Framebuffer über USB" Ansatz.
>
> Die eigentliche Programmlogik kannst du bequemer auf einem Raspberry pi
> oder PC implementieren - zumindest für den Anfang.

Ja, das da ein Microconroller sitzen muss, ist klar. Am PC brauche ich 
dann nur die möglichkeit, beliebige Tastendrücke zu simulieren und den 
Framebuffer des LCDs zu lesen.

> Muss das denn wirklich so gemacht werden? Gibt es wirklich keinen
> einfacheren Weg? Lohnt sich der hohe Aufwand?

Mir fällt nichts besseres/einfacheres ein.
Lohnt sich der Aufwand? Tja das kann man differenziert sehen :-)

Kurz zum Background: es handelt sich um eine alte Graviermaschine/CNC 
Fräse. Der würde ich gerne ein paar neue "Tricks" beibringen 
(automatische Nullpunkt erkennung / optische Abtastung der 
Werkstückgrenzen etc.). Dazu habe ich neben der Spindel eine Kamera 
montiert. Leider ist die Steuerung der Maschine etwas "unflexibel", so 
Dinge wie 0-Punkt-Einstellung oder auslesen der aktuellen Koordinaten 
etc. geht nur per Hand - zumindest hab ich bisher keine andere 
Möglichkeit gefunden.

von Stefan F. (Gast)


Lesenswert?

c.nc schrieb:
> Was mich mehr interessiert: kann ich die Input Ports eines - sagen wir
> mal - ATmega64 direkt an die Pins des HD47780 andocken und dort immer
> bei fallender Flanke am Enable D0 bis D7 lesen oder stelle ich mir das
> zu einfach vor?

Ja.

von Stefan F. (Gast)


Lesenswert?

c.nc schrieb:
> OK, wg. ganvalischer Trennung?

Ja.

> Oder tuns auch ein paar MC4066?

Vielleicht, kommt auf die Schaltung an.

Wenn es eine 5x5 Matrix ist und du nicht mehrere Tasten gleichzeitig 
drücken musst, würden 10 Optokoppler/Analogschalter genügen:
1
Reihe                       Spalte
2
3
1-----o_o---+        +---o_o-----1
4
            |        |
5
2-----o_o---+        +---o_o-----2
6
            |        |
7
3-----o_o---+--------+---o_o-----3
8
            |        |
9
4-----o_o---+        +---o_o-----4
10
            |        |
11
5-----o_o---+        +---o_o-----5

Das könnte man mit zwei CD4051 sogar noch kompakter machen.

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Tastendrücke würde ich mit Reed-Relais (gibts mit 5V/10mA Spule) 
parallel zu den Original-Tasten realiseren (die bleiben dann auch 
bedienbar). Reed-Relais sind Polaritäts-Unabhängig und robuster als 
Optokoppler (wer weiss schon, was sich der ursprüngliche Entwickler da 
so ausgedach hat).
Diese dann wiederum an einem seriellen Portexpander (z.B. per SPI) vom 
MC aus steuern. So man kommt recht einfach und gut nachvollziehbar zum 
Ziel.

: Bearbeitet durch User
von Dennis H. (c-logic) Benutzerseite


Lesenswert?

wie redet die Bedienbox mit der Maschine ?

von c.nc (Gast)


Lesenswert?

Hallo Stefan,

> Wenn es eine 5x5 Matrix ist und du nicht mehrere Tasten gleichzeitig
> drücken musst, würden 10 Optokoppler/Analogschalter genügen:

ja, ist 5x5. Mehre gleichzeitig wäre schon gut (dann könnte meine 
Software X- und Y-Achse gleichzeitig bewegen, was das Zeitdauer der 
Vermessung verkürzen würde), ist aber kein KO-Kriterium

> Reihe                       Spalte
>
> 1-----o_o---+        +---o_o-----1
>             |        |
> 2-----o_o---+        +---o_o-----2
>             |        |
> 3-----o_o---+--------+---o_o-----3
>             |        |
> 4-----o_o---+        +---o_o-----4
>             |        |
> 5-----o_o---+        +---o_o-----5
>
> Das könnte man mit zwei CD4051 sogar noch kompakter machen.

OK, der 4051 ist mir bisher nicht über den Weg gelaufen - aber das 
scheint ein guter Kandidat zu sein.

Wenn ich mir das ansehe, brauche ich einen MC mit:
* 9 Inputs für das LCD (8 Daten + Enable)
* 8 Outputs für die beiden CD4051
* USB

ähm, eigentlich ein Job für einen Arduino Nano?!?

von c.nc (Gast)


Lesenswert?

Dennis H. schrieb:

> wie redet die Bedienbox mit der Maschine ?

Die Bedienbox ist dumm, da ist nur das 44780, 22 Taster und etwas 
Kleinvieh (Kondensatoren, Dioden) drin, sonst nichts "aktives". Hängt 
über ein 25(?) poliges Kabel an der Steuerung dran.

von c.nc (Gast)


Lesenswert?

c.nc schrieb:

> Wenn ich mir das ansehe, brauche ich einen MC mit:
> * 9 Inputs für das LCD (8 Daten + Enable)
[...]
> ähm, eigentlich ein Job für einen Arduino Nano?!?

Hm.. ich hab mir das wohl etwas zu einfach vorgestellt. Wenn ich mir 
diese beiden Threads ansehe:

https://www.avrfreaks.net/forum/hd44780-emulator
https://forum.arduino.cc/index.php?topic=203399.0

könnte ich mir vorstellen, dass das Timing etwas tricky wird. Ich werds 
mal einfach ganz naiv probieren.
Aber für denn Fall, das ich die 8 Datenbits nach einer fallenden Flanke 
auf E Hardwaremässig buffern will/muss: wäre da ein 74LS373 ein 
passender Stein?

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

der 44780 könnte aber auch 4bit-Anbindung haben

von c.nc (Gast)


Lesenswert?

Dennis H. schrieb:

> der 44780 könnte aber auch 4bit-Anbindung haben

Da D0 bis D7 verdrahtet sind, gehe ich davon aus das das Display im 8bit 
Modus betrieben wird.

von Stefan F. (Gast)


Lesenswert?

c.nc schrieb:
> eigentlich ein Job für einen Arduino Nano?!?

ja

c.nc schrieb:
> könnte ich mir vorstellen, dass das Timing etwas tricky wird. Ich werds
> mal einfach ganz naiv probieren.

Darauf wollte ich auch hinweisen. Ich bin nicht sicher, ob der Arduino 
schnell genug ist. Wenn nicht, würde ich einen STM32 versuchen.

Das schöne beim Arduino Nano ist, dass er für USB einen eigenen Chip hat 
so dass die USB Kommunikation dein Timing wenig stört.

c.nc schrieb:
> Aber für denn Fall, das ich die 8 Datenbits nach einer fallenden Flanke
> auf E Hardwaremässig buffern will/muss: wäre da ein 74LS373 ein
> passender Stein?

Ja. Das würde ich aber zu vermeiden versuchen. Denn wenn du die Daten 
nicht schnell genug während des E-Impulses lesen kannst und das mit 
einem Puffer umgehst, bekommst du womöglich mit dem nächsten Byte 
Probleme das danach kommt.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Haste mal 'n Foto ? Gehen die Leitungen an einen Microcontroller ?

von Stefan F. (Gast)


Lesenswert?

Dennis H. schrieb:
> Gehen die Leitungen an einen Microcontroller ?

Wohin denn sonst?

von c.nc (Gast)


Lesenswert?

Dennis H. schrieb:
> Gehen die Leitungen an einen Microcontroller ?

an das Mainboard der Steuerung. Da sind u.a. zwei NECV33a CPUs drauf, 
ein EPROM mit der Firmware, 1MB(?) RAM, ein paar ASICs etc.

von Hä? (Gast)


Lesenswert?

c.nc schrieb:
> Kurz zum Background: es handelt sich um eine alte Graviermaschine/CNC
> Fräse

Mach doch die gesamte Steuerung neu. Das ist wahrscheinlich weniger 
Arbeit und das Ergebnis wird besser.

von c.nc (Gast)


Lesenswert?

Hä? schrieb:

> Mach doch die gesamte Steuerung neu. Das ist wahrscheinlich weniger
> Arbeit und das Ergebnis wird besser.

darüber hab ich auch schon nachgedacht - aber der Aufwand ist schon 
"etwas" mehr als das Bedienpanel der alten Steuerung fernzusteuern. Da 
die Achsen nicht mit Steppern sondern mit Servomotoren bewegt werden, 
fällt eine (günstige) grbl-basierte Lösung flach.

von c-hater (Gast)


Lesenswert?

c.nc schrieb:

> Folgendes hab ich mir bisher dazu überlegt:
> * Microconroller??? (irgenwas mit DIP Bauform)

Was hat die Bauform mit der beabsichtigten Funktionalität zu schaffen?

> * Verbindung zum Steuerungs-PC über USB, Anwendung dockt über libusb an?

Kann man machen, muss man nicht machen. Für diese Anwendung würde es ein 
generischer serieller Port sicherlich genauso gut tun.

> * Taster ansteurn über ein paar 4066

Das kann man so machen, aber man könnte sich auch "synchron" in das 
Polling einklinken. Der µC muß nur schnell genug dafür sein. Spart dann 
die 4066.

> * Abgreifen der HD47780 Pins direkt parallel zum Panel?!?
> * Emulation des HD47780 auf dem Microconroller mit einem 64byte
> "framebuffer", der via USB ausgelsen werden kann.

Kann man so machen. Man könnte den ganzen Kram aber auch in dem 
Adapter-Controller abhandeln und nur die Nutzdaten zum Host schicken.

von c.nc (Gast)


Lesenswert?

c-hater schrieb:
> c.nc schrieb:
>
>> Folgendes hab ich mir bisher dazu überlegt:
>> * Microconroller??? (irgenwas mit DIP Bauform)
>
> Was hat die Bauform mit der beabsichtigten Funktionalität zu schaffen?

nichts. Aber 08/15 2.54mm Lochraster hab ich in der Schublade. Und diese 
Größenordnung krieg ich auch noch sauber gelötet.

> Kann man machen, muss man nicht machen. Für diese Anwendung würde es ein
> generischer serieller Port sicherlich genauso gut tun.

ja - Datenmenge ist überschaubar.

> Das kann man so machen, aber man könnte sich auch "synchron" in das
> Polling einklinken. Der µC muß nur schnell genug dafür sein. Spart dann
> die 4066.

gute Idee - weniger Bauteile und damit ist dann auch "mehrere Tasten 
gleichzeitig" möglich.

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Stefan ⛄ F. schrieb:
> Dennis H. schrieb:
>> Gehen die Leitungen an einen Microcontroller ?
>
> Wohin denn sonst?

Serialisierung ginge auch ohne µC. Der Umfang der Kabel am µC hat mich 
mehr interessiert.

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

c.nc schrieb:
>> Das kann man so machen, aber man könnte sich auch "synchron" in das
>> Polling einklinken. Der µC muß nur schnell genug dafür sein. Spart dann
>> die 4066.
>
> gute Idee - weniger Bauteile und damit ist dann auch "mehrere Tasten
> gleichzeitig" möglich.

Die dafür aufgebrachte Zeit fehlt dir dann aber eventuell beim Mitlesen 
der LCD Kommunikation.

von zonk (Gast)


Lesenswert?

Du könntest ganz fies sein und das Ram emulieren. Dann ist Tür und Tor 
geöffnet für allerlei Schweinerei

V33A (μPD70136A) - 
未定義命令割り込みベクタ等、V33に存在していた80286との非互換部分を修正したもの。PC-98DO+やワープロ専用機文豪ミニ5SCに搭載され 
た。[1]

von Dennis H. (c-logic) Benutzerseite


Lesenswert?

Am Ende gehen die Leitungen des Panels an einen 8255-PIO und es läuft 
auf einen von beiden Prozessoren ein DOS :)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.