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!
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?
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.
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.
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.
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
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?!?
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.
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?
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.
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.
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.
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.
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.
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.
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.
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
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.
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]
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.