Touchpanel von Randy's Display

  • Hi,


    wie es aussieht scheinen sich ja schon einige Leute mit der Ansteuerung des Touchpanels zu beschäftigen. Da es kein richtiges Datenblatt gibt ist momentan wohl erstmal "rumprobieren" angesagt.


    Ich selbst bastele an einem USB Interface dafür (sorry, aber erstmal nur unter Windows).


    Es wäre schön, wenn wir hier Erfahrungen austauschen könnten, um möglichst schnell zu einem funktionierenden Interface zu kommen.


    Gruss


    CeBo

  • Hi,


    Hier mal mein Erklärungsversuch des Blockdiagramms vom Display Datenblatt.
    Bitte Korrigieren, wenn jemand schon was Anderes rausgefunden hat.


    Das Modul erzeugt einen Takt von 256 Hz. Dieser füttert einen 4 Bit Zähler, der daraus die Spaltenadressen für die Touchmatrix erzeugt. Die Spaltenadresse wird über DSO0 bis DSO3 ausgegeben. Hat der Zähler bis 16 gezählt, und damit das Display einmal komplett ausgewertet, wird über das AND Gatter das Signal END erzeugt.
    Bei Berührung des Displays wird bei erreichen der entsprechenden Spalte (durch den Adress-Zähler) das Signal TOUCH erzeugt. Die Zeilenadresse kann dann über DSO4 bis DSO6 gelesen werden. Die vom Panel kommende Zeilennummer wird dabei über einen Prioritäts-Encoder geschickt, der bei mehreren gleichzeitig gedrückten Feldern nur eine Nummer ausgibt. Vermutlich die höchste Zeilennummer die gerade berührt wird.


    Zusätzlich gibt es noch 2 Eingangssignale, deren Funktion nicht aus dem Diagramm hervorgeht. SCAN wird vermutlich das Abtasten des Panels auslösen. Ob dies bei anliegendem low einmal passiert oder kontinuierlich abläuft wäre noch auszuprobieren.
    Was CSCAN bewirkt, kann ich mir bisher nicht zusammenreimen, da hilft nur testen.



    Gruß


    CeBo

  • Hi Randy,


    ich habe mir ein Testboard mit dem IO-Warrior Chip von Code Mercenaries bestellt. (www.codemercs.com).
    Der Chip hat 32 I/O Leitungen, die frei benutzt werden können. Dem System gegenüber stellt sich das ganze als HID dar, so daß man keinen speziellen Treiber braucht.
    Bei Änderung einer Eingangsleitung schickt das IC automatisch ein Datagramm mit dem kompletten Portstatus.
    Damit sollte sich eine relativ einfache Steuerung realisieren lassen, da man sich nicht um irgendwelche "Schnittstellensteuerung" kümmern muß.


    Ach ja auf dem Chip selbst können auch Programme ablaufen. Standardmäßig ist da eine vollständige Steuerung für ein HD44780 basiertes LCD und eine IIC Schnittstelle implementiert. Kann man einfach aktivieren, und einige Portleitungen werden dann vom Chip selbst verwaltet.


    Natürlich gibt es zu dem IC ein SDK.


    Gruß


    CeBo

  • hey,


    also an den hatte ich auch schon gedacht, ist aber noch teuerer und groesser
    als die andren :/


    die ftdi chips waeren halt smd plus nen kleinen atmel controller ueber serial
    angeschlossen wuerde auch ne nette kleine platine ergeben.


    wobei man solche design ueberlegungen dann machen sollte, wenns im
    lab erstmal funktioniert ;))


    kannst du eigene treiber im iowarrier chip flashen? weil die graphlcd's haben
    ja verschiedene treiber. oder stellt das teil zwei 8 bit ports transparent
    zur verfuegung?


    ich hatte mir halt bzgl der seriellen ansteuerung von so nem lcd gedacht,
    ascii steuercode + databyte - $A0 - $AF z.b. fuer den control port gefolgt
    von $00 - $FF als datenbyte fuern 2. port. $00 - $9F waeren dann die andren
    funktionen und so weiter. und retour das selbe spielchen :)


    -- randy

  • Hmm,


    hauptsächlich habe ich mich für den Chip wegen der IIC Schnittstelle entschieden. Damit könnte man nebenher noch einiges machen (Temperaturüberwachung Lüftersteuerung usw.)


    Eigene Programme kann man leider nicht laden. Das geht nur in zusammenarbeit mit dem Hersteller :(


    Es gibt 4 8Bit Ports, wobei jede Leitung einzeln als Eingang oder Ausgang genutzt werden kann.


    Genau betrachtet sind alle Leitungen immer Eingänge, denn vom Chip wird immer ein vollständiger Portstatus geschickt, wenn er eine Änderung feststellt.
    Die Daten kommen als ein 32Bit Wort an.


    Wenn du eine 1 auf eine I/O Leitung schreibst, wird sie über einen Internen Pullup auf High gezogen. Es wird also eine 1 ausgegeben.
    Wenn du nun außen ein Signal einspeist kannst du den Pin gegen den Pullup wieder auf Low ziehen, was der Chip per Datagramm melden würde.


    Es ist also reine Interpretationssache, ob du einen Pin als Eingang oder Ausgang betrachtest. Wenn du Ihn als Eingang nutzen willst mußt du nur eine 1 darauf schreiben.


    Die Steuerung ist somit eigentlich keine serielle, da immer die kompletten 32Bit in einem Rutsch eingelesen / ausgegeben werden.



    Es sei noch auf ein großes Manko des Chips hingewiesen :


    Die Eingänge werden zwar im Abstand von 1ms abgetastet, leider erlaubt USB es aber nur alle 10ms ein Datagramm abzuschicken (low speed device).
    Somit ist der Chip eigentlich zu langsam (256Hz -> ca 4ms Taktzeit).


    Ich würde deswegen nur bei anligenden TOUCH die Datenleitungen vom Display auf den IO-Warrior durchschalten, um die Zyklenzeit auf 1/16 s (= ein Abtastdurchlauf) zu drücken.


    An eine Lösung per PIC oder Atmel Chip hatte ich auch schon gedacht.
    Bisher habe ich mich aber erfolgreich davor gedrückt mich da einarbeiten zu müssen (oder dürfen ?).
    Von daher würde ich diese Baustelle gerne jemand anderem Überlassen ....


    CeBo

  • Zitat

    Original von I.R. Baboon
    Bei Berührung des Displays wird bei erreichen der entsprechenden Spalte (durch den Adress-Zähler) das Signal TOUCH erzeugt. Die Zeilenadresse kann dann über DSO4 bis DSO6 gelesen werden. Die vom Panel kommende Zeilennummer wird dabei über einen Prioritäts-Encoder geschickt, der bei mehreren gleichzeitig gedrückten Feldern nur eine Nummer ausgibt. Vermutlich die höchste Zeilennummer die gerade berührt wird.


    Der Prioritäts-Encoder wird aus 8 Signale einen Binär Code machen.


    Da es Binär Code ist, was rauskommt ist es mit größter warscheinlichkeit so, dap die höchste Zeilennummer ausgegeben wird.


    Dies habe ich in einem Testaufbau auch festgestellt.


    Zitat


    Zusätzlich gibt es noch 2 Eingangssignale, deren Funktion nicht aus dem Diagramm hervorgeht. SCAN wird vermutlich das Abtasten des Panels auslösen. Ob dies bei anliegendem low einmal passiert oder kontinuierlich abläuft wäre noch auszuprobieren.
    Was CSCAN bewirkt, kann ich mir bisher nicht zusammenreimen, da hilft nur testen.


    Zu den Eingängen SCAN und CSCAN:
    - Wenn an SCAN und CSCAN ein high Pegel liegt, ist das touchsrceen gespert.
    Das heist, daß sich die Zustände an den Ausgängen DS01 bis DS06 nicht verändern.
    Wenn einer von beiden Eingängen auf low ist, dann ist das touchsrceen auf aktiv.


    Etwas seltsam sind die Ausgänge END und TOUCH.
    Bei dem Ausgang TOUCH habe ich ca 35mV anliegen, wenn der Touchsrceen berührt wird, dann geht die Spannung auf ca 11mV (solange wie man auf die Folie drückt).
    Bei dem Ausgang END ist es genauso, nur daß die Spannung (wenn nicht berührt wird) 57mV und beim berühren ca. 10mV beträgt.



    Weis jemand, warum man da keine eindeutige Signalpegel für low und high hat? Oder ist unterumständen etwas nicht ganz in Ordnung (chip, oder so).



    Gruß
    matrix79

  • Zitat


    Etwas seltsam sind die Ausgänge END und TOUCH.
    Bei dem Ausgang TOUCH habe ich ca 35mV anliegen, wenn der Touchsrceen berührt wird, dann geht die Spannung auf ca 11mV (solange wie man auf die Folie drückt).
    Bei dem Ausgang END ist es genauso, nur daß die Spannung (wenn nicht berührt wird) 57mV und beim berühren ca. 10mV beträgt.


    Weis jemand, warum man da keine eindeutige Signalpegel für low und high hat? Oder ist unterumständen etwas nicht ganz in Ordnung (chip, oder so).


    Das sind evtl. Open-Kollektor-Ausgänge, die Pull-up Widerstände benötigen.



    Nachtrag: Liegen die von dir genannten Spannungen nur so lange an, wie auch die Zeilen/Spaltenadresse ausgegeben wird (4 ms) oder ist das ein Durchschinttswert, den Du mit einem Multimeter gemessen hast?


    alfman


  • Also die Spannung lag solange an, solange ich das Touchscreen berüht habe.
    Wenn das Touchscreen nicht mehr brührt wurde, dann ist zwar die Spannung wieder weggegangen, aber die Zeilen-/Spaltenadressen waren immer noch vorhanden.


    Ja, ich habe mit einem Mulimeter gemessen, da ich kein Oszi habe.


    Was für einen Wert kann ich bei einem Pullup Widerstand so nehmen?



    Gruß
    matrix79

  • Zitat


    Also die Spannung lag solange an, solange ich das Touchscreen berüht habe.
    Wenn das Touchscreen nicht mehr brührt wurde, dann ist zwar die Spannung wieder weggegangen, aber die Zeilen-/Spaltenadressen waren immer noch vorhanden.


    Ja, ich habe mit einem Mulimeter gemessen, da ich kein Oszi habe.


    Das habe ich befürchtet. Ohne Oskar oder LA kommst du nicht weiter.


    Zitat


    Was für einen Wert kann ich bei einem Pullup Widerstand so nehmen?


    Erst mal Kommando zurück. Ich ging davon aus, daß die Pegel mit einem Oszi ermittelt wurden.



    alfman

  • Zitat

    Original von alfman


    Erst mal Kommando zurück. Ich ging davon aus, daß die Pegel mit einem Oszi ermittelt wurden.


    Vielleicht kann ich nächste Woche dies mit einem Oszi noch mal messen.
    Was wäre dann da wichtig?
    Wie lange der Impuls ist, wo rausgegeben wird, oder was?

  • Hi,


    mein Päckchen von Reichelt ist heute gekommen, und ich habe mein USB Interface gleich zusammengelötet.


    Erstaunlicherweise hat es auf anhieb funktioniert :]


    Somit werde ich mich jetzt auch mal dem TOUCH Ausgang widmen.


    Mein Oszi habe ich schon aus dem Keller gekramt, jetzt kann es sich nur noch um wenige Tage handeln, bis ich auch die Tastköpfe wiederfinde.....



    So long


    CeBo

  • Hi,


    ich habe es noch mal durch getestet.
    Da mein erster aufbau ziemlich provisorisch war.


    Nun habe ich beim erneuten Testen folgendes festgestellt:
    Wenn an CSCAN ein high Signal anliegt, dann wird am Ausgang END ein high Signal gesendet (da es flakert, denke ich mal, daß dieses Signal die durchlauf Frequenz von den Zeilen/Spalten).
    Wenn SCAN noch auf high gesetzt wird, dann ändert sich an den Ausgängen DS00 bis DS06 nichts, auch wenn das touchscreen berührt wird.

  • Hi,


    das heisst also, SCAN stopt wie vermutet die Abtastung des Displays.
    Solange SCAN low ist wird kontinuierlich abgetastet.


    CSCAN dient als enable des AND Gatters. Somit wird nur bei CSCAN auf low das END Signal erzeugt, welches am Ende jedes kompletten Abtastdurchlauf einmal high wird. (sollte also mit 16 Hz blinken)


    Schon was neues über den Ausgangspegel von TOUCH herausgefunden ?


    Wenn es wirklich ein Open Collector Ausgang ist, solltest du mit einem Pullup so um die 100k ein vernünftiges Signal bekommen.


    Gruß


    CeBo

  • Zitat


    das heisst also, SCAN stopt wie vermutet die Abtastung des Displays.
    Solange SCAN low ist wird kontinuierlich abgetastet.


    CSCAN dient als enable des AND Gatters. Somit wird nur bei CSCAN auf low das END Signal erzeugt, welches am Ende jedes kompletten Abtastdurchlauf einmal high wird. (sollte also mit 16 Hz blinken)


    Schon was neues über den Ausgangspegel von TOUCH herausgefunden ?


    Es gibt sicherlich eine Beschaltungsmöglichkeit, um die Adresse bei Berührung einzufrieren (Touch auf Scan ????) Ständiges Abfragen ist sicherlich nicht im Sinne der/des Erfinder(s)


    Zitat


    Wenn es wirklich ein Open Collector Ausgang ist, solltest du mit einem Pullup so um die 100k ein vernünftiges Signal bekommen.


    Das ist hoch. 4k7 bis 10k wird imho meist verwendet.


    Evt. komme ich nächstes WE mal dazu mich damit näher zu beschäftigen.


    alfman

  • Mojn,


    mein USB Interface funktioniert !!!!! :]


    Unter Windows bekomme ich wunderbar die Positionen gemeldet.


    Hier die genaue Beschreibung der Signale :


    SCAN und CSCAN sind zum enablen des Touchpanels. Dabei gibt es 2 Modi :


    CSCAN = 1 + SCAN =1 keine Abtastung
    CSCAN = 1 + SCAN =0 Abtastung solange der Finger auf dem Display ist
    CSCAN = 0 + SCAN =egal Andauernde Abtastung (16 Hz)


    Dabei gilt :


    Am Ende jeder Abtastung wird END für 1/256 s auf 1 gesetzt.
    Dies ist das Signal die Zeilen und Spaltenadresse zu lesen (binär).
    Zeilennummer von oben nach unten 0 bis 5
    Spaltennummern von links nach rechts 0 bis 15


    Wird das Panel berührt, wird bei der nächsten Abtastung TOUCH auf 1 gesetzt.
    Bleibt der Finger an der selben Stelle, wird bei der darauf folgenden Abtastung die gleiche Position geliefert, TOUCH ist nun jedoch 0.


    Bei der andauernden Abtastung,wird immer die zuletzt berührte Position geliefert. Ein gesetztes TOUCH weist auf eine neue Berührung hin.


    Sowohl Spalten als auch Reihenadressen sind Prioritätscodiert und liefern immer die höchste berührte Position.



    Zum Interface :


    Ich nutze den IO Warrior Chip, der kürzlich in der CT beschrieben wurde um das Display an USB anzuschließen. Die Anschlüße des Touchpanel habe ich direkt an die I/O Ports des Chip angeklemmt. Kostet insgesamt unter 20.- €
    Das C Programm zum Abfragen des Touchpanel ist super einfach (hat knapp 20 Zeilen).


    Tja, jetzt müßte sich nur noch jemand finden, der daraus einen Treiber für Linux stricken kann. Da hab ich leider keine Ahnung von. :(


    CeBo

  • hey,


    das hoert sich ja schon mal richtig kewl an ;)


    die frag eist nur wie man jetzt weitermacht. soll das ganze auf diesem
    io warrior/usb basieren oder macht man eine generische serielle ansteuerung
    (also uC der ascii codes verarbeitet mit usb interface)?


    letztere moeglichkeit waere imho flexibler, aber auch mehr aufwand.
    nur koennte man da auch die "firmware" updaten um neue moeglichkeiten
    mit dazu zubasteln. (led ports, mehrere displays etc..)


    was sagt ihr dazu?


    -- randy

  • Hallo Baboon,


    Meinst Du den IO-Warrior 40 aus der ct 08/2003 ? Wenn ja ist ja wirklich geil. Wenn man die LED Kette wegläßt, sind es nur noch ein Quartz ( kein quartz , ein Resonator) , ein Elko paar Widersände und eine Keramikscheibe für den Grundaufbau. Das wäre doch die ideale Basis, um andere Hardware-Erweiterungen ausbauen zu können.
    Von den 40 Beinchen die das "Tier" hat , sind 32 digitale I/O Pins, jedes einzeln frei konfigurierbar . Ich glaube da bleibt kein Auge trocken.
    Also ich wäre bereit, in diese Hardware zu investieren.


    Gruß lola

  • Hi Lola,


    ja, genau um den Chip geht es. Wie schon gesagt ist die Hardware extrem einfach gestrickt, da alles schon im Chip integriert ist. Leider kostet das IC deshalb ca 14 €.



    Hi Randy,


    wenn du eh bei USB bleiben willst, wüßte ich nicht wieso man das noch auf 'nen uP umstricken sollte.
    Auch bei dem IO Warrioir bleiben jede Menge Erweiterungsmöglichkeiten, da für das Panel nur 11 der 32 vorhandenen IO Leitungen benutzt werden.
    Prinzipiell wäre es also auch möglich die komplette LCD Steuerung auf USB umzustellen.


    Zusätzlich zum reinen IO Betrieb kannst du ja auch direkt mit IIC Bausteinen kommunizieren, was die Ausbaumöglichkeiten ins unermessliche steigert. Gibt ja kaum was, was es nicht mit IIC Schnittstelle gibt. :D


    Einen Treiber in diesem Sinne muß man gar nicht schreiben, da der USB Warrior sich als HID meldet, was auch unter Linux bereits implementiert sein müsste.
    Man braucht quasi nur eine API um bequem auf den Warrior zugreifen zu können.


    Gruß


    Cebo

  • Zitat

    Original von I.R. Baboon
    Hi Randy,


    wenn du eh bei USB bleiben willst, wüßte ich nicht wieso man das noch auf 'nen uP umstricken sollte.


    war halt son gedanke.
    ich kenn das halt von der activy - schicken vom $01 $text malt z.b. etwas im
    lcd in die erste zeile, $A0 laeust ne led blicken etc..


    Zitat

    Auch bei dem IO Warrioir bleiben jede Menge Erweiterungsmöglichkeiten, da für das Panel nur 11 der 32 vorhandenen IO Leitungen benutzt werden.
    Prinzipiell wäre es also auch möglich die komplette LCD Steuerung auf USB umzustellen.


    wenns schnell genug ist dafuer schon ;) aber das koennen wir ja testen.

    Zitat


    Zusätzlich zum reinen IO Betrieb kannst du ja auch direkt mit IIC Bausteinen kommunizieren, was die Ausbaumöglichkeiten ins unermessliche steigert. Gibt ja kaum was, was es nicht mit IIC Schnittstelle gibt. :D


    jops, das ist richtig ;) wie waers mit ner i²c ferteuerung vom tv? helligkeit und so? hehe


    Zitat


    Einen Treiber in diesem Sinne muß man gar nicht schreiben, da der USB Warrior sich als HID meldet, was auch unter Linux bereits implementiert sein müsste.
    Man braucht quasi nur eine API um bequem auf den Warrior zugreifen zu können.


    kannste mal die kabelbelegung und sourcecode posten, wie du was grad am
    laufen hast? werd mir dann wohl auch son teil organisieren und rumtesten.


    ist btw nur nen gelabelter cybress 8051 usb chip. man koennte also theoretisch
    das auch selber basteln.


    -- randy

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!