USBserLCD: T6963C basierte LCDs an USB betreiben

  • Nochmal als "Referenz" was ich da treibe mit den "Variablen" (die eigentlich keine sind).


    Mein "Angelpunkt" sind diese Zeilen:

    https://github.com/arduino/Ard…/arduino/USBCore.cpp#L768


    Der "Status" eines USB-Geräts kann am Auftreten von gewissen "Ereignissen" (am Atmel Interrupts) festgemacht werden. In unserem Fall sind das die Interrupts "WAKEUPI" und "SUSPI". Diese selbst können wir aber nicht abfangen oder "empfangen" weil die Arduino-Lib selber dafür eine Interrupt-Service-Routine definiert. Wovon man aber profitieren kann, ist, dass (wie am Kommentar darüber schon ersichtlich) zur "Stabilisierung" des ganzen Interrupts "getogglet" werden:


    https://github.com/arduino/Ard…/arduino/USBCore.cpp#L773

    https://github.com/arduino/Ard…/arduino/USBCore.cpp#L783


    Das Register "UDIEN" ist aber global. Was die Arduino-Lib hier macht kann also von jeder Stelle im Code (auch im "Arduino-Sketch") gelesen werden. Auf dem Weg kann man ohne Änderungen den Status des Controllers lesen indem man diesen Code-Teil der Arduino-Library für eigene Zwecke "missbraucht".


    Was ich oben beschrieben habe (RX-LED) wäre zwar in der Theorie möglich, aber man müsste dann, dass die LED bei "laufendem PC" auch aus geht, das Timeout abwarten:


    https://github.com/arduino/Ard…/arduino/USBCore.cpp#L768


    Und ich bin mir nicht sicher ob ich wirklich irgendwo > 100 Millisekunden verschenken will. Die Lösung mit den Interrupts ist "schöner" und bei den meisten Mainboards sollte sie funktionieren. Auf dem "problematischen" geht ja nichtmal die FT232RL-Lösung und das ist ein ASIC. Wenn der schon nicht geht, warum sollte dann etwas anderes auf Biegen und Brechen funktionieren?


    Die "SOF-Lösung" ist schöner und auch zuverlässiger. Allerdings kümmern die bei Arduino sich eh nicht um den entsprechenden Bug oder Pull-Request. Man wird also erstmal mit einem Würaround nach Wahl leben müssen.


    https://github.com/arduino/Arduino/issues/7363

    https://github.com/arduino/Arduino/pull/6964


    Ich weiß nicht wie und nach welchem Prinzip bei denen entwickelt wird, aber eine handelsübliche Rennschnecke ist schneller :evil:

  • Zunächst: USBserLCD auf dem 32u4 läuft bestens. Mit dem Interrupt Hack bekomme ich auch mit wenn der PC aus ist.

    Bin da aber noch an einer anderen Lösung dran, die ohne Hack auskommt und nur Arduino Features und Atmel Register braucht. Ist letztlich genau was SHF macht. Kann aber ohne Konflikte mit den bestehenden Arduino Libs zusammenarbeiten. Ich habe vor das als kleine Arduino Library umzusetzen und in den Library Manager zu bekommen.

  • Noch nicht im Zusammenhang getestet (habe die Hardware im Moment nicht hier) aber der Code kompiliert und die Library funktioniert:


    https://github.com/M-Reimer/us…58e2007dfbc83fb321d5778c5


    https://github.com/M-Reimer/USBStatus


    Die Library ist kein Hack sondern die Lösung, die ich für IRMP_STM32 umgesetzt habe und die SHF hier auch schon vorgeschlagen hat. Nur das ich das ganze etwas anders angehe um keine Konflikte mit den Arduino-Libs zu bekommen. Im Prinzip sollte das auch auf meinem "problematischen" Mainboard gehen.


    Die Library habe ich für den Library-Manager vorgeschlagen https://github.com/arduino/Arduino/issues/7529. Falls das also jemand für seine Projekte braucht, dann einfach etwas warten oder von meinem GIT als ZIP installieren. Ich habe die Library unter LGPL3 gestellt. Sollte also für die meisten Projekte einsetzbar sein.

  • @M-Reimer


    ich habe noch einen Nano V3 hier rumliegen und ein T6963c. Daher wollte ich mal Dein Projekt nachbauen. Aber irgendwie läuft es nicht so wie gedacht...


    Beim jedem umschalten sehe ich das mein Nano arbeitet und scheinbar daten empfängt, aber es passiert nix auf dem LCD




    Verstehe ich die Anschlüsse richtig ?


    Ardurino zu T6963


    D2 -> D0

    D3 -> D1

    D4 -> D2

    D5 -> D3

    D6 -> D4

    D7 -> D5

    D9 -> mit 1k Widerstand an Base (von PN2222A) --> Emitter an GND? --> Collector LCDK ?

    D12 -> mit 1k Widerstand an Pin 14 von FT232

    A0 -> D6

    A1 -> D7

    A2 -> CE

    A3 -> WR

    A4 -> CD

    A5 -> RD

    5V -> VDD



    Wo wird der Poti auf Deinem Bild angeschlossen? Theoretisch an GND, VO und VEE ???



    Wird LEDA nicht benötigt ?


    Mein T6963C scheint ein anderes pinout zu haben als deiner auf dem Bild.


    Ich habe :


    1 FG

    2 GND

    3 VDD

    4 VO

    5 WR

    6 RD

    7 CE

    8 CD

    9 RST

    10-17 D0-D7

    18 FS1

    19 VEE

    20 LED A

    21 LED K




    Gruß

    VDR1

    YaVDR | yaVDR 0.6 | GD05 | ASRock H87M PRO4 | Intel G3220 | 4GB | NT E9 400 | 64GB SSD | Zotac GT630 (1024MB) | Sat-IP

    VDR2 : noch nicht fertig ...

    Equipment:

    MCE (RC6) FB | | Sony Fernseher 4K | Denon X4000 AVR | Octopus.net mit 4 x DVB-C über Sat-IP

    |NUC D54250 (Intel VA-API) | Octopus.net 4xDVB-C / Sat-ip | 500 SSD | MCE FB | ax206 DPF |


    The post was edited 4 times, last by Ich_bau_mir_was ().

  • Ich gebe eigentlich nur die wesentlichen Anschlüsse für den Arduino an.


    Die anderen sind von LCD zu LCD verschieden. Es gibt z.B. sowohl LCDs mit eingebautem Vorwiderstand für die LEDs als auch welche die keinen eingebaut haben. Hier unbedingt zusätzlich zu meiner Beschreibung auch das Datenblatt hinzuziehen!


    Auch zum Poti kann ich dir überhaupt nichts sagen. Wo die negative Kontrastspannung rauskommt ist bei jedem LCD anders und wo sie wieder "rein muss" auch. Am besten erstmal versorgen und messen wo negative Spannung rausfällt. Ohne korrekten Anschluss der Kontrastspannung wird nichts auf dem LCD erscheinen.


    Ja, es werden beide Anschlüsse der LED benötigt. Ohne Backlight wird man auf dem LCD auch nicht viel sehen. Entweder "LED A" direkt an +5V oder eben über den korrekten Vorwiderstand an +5V.


    Mit einem Arduino Pro Micro wäre der zusätzliche Anschluss vom FT232 nicht nötig. Das ist allerdings noch nicht dokumentiert. Werde ich nachholen. Die von dir vorbereitete Variante wird aber natürlich nach wie vor unterstützt.


    Für Testläufe reicht übrigens wenn du das LCD an einen beliebigen PC hängst. Das "Boot-Logo" wird auf dem LCD immer angezeigt, auch wenn keine Kommunikation zu Stande kommt.

  • Hab da etwas gefunden, was deinem LCD nahe kommt. Da ist auch zu sehen wie das Poti angeschlossen wird:

    https://www.lcd-module.de/pdf/grafik/w240-7k2.pdf

    Ob man den Widerstand gegen GND braucht sei dahin gestellt. Wenn du die Teile dahast schadet es aber nicht sie genau so zu verbauen.

    Font-Select so belegen, dass 8x8 selektiert ist.


    Edit: Ich bin mal über's Wiki gegangen. Hoffe jetzt ist alles wesentliche drin.

  • Danke für die Hilfe, jetzt geht es :thumbup:


    Nur der 1K Widerstand beim Backlight dimmen scheint ein wenig hoch zu sein. Mit ist es zu dunkel bei 100% und ohne kann ich nur bis 80% gehen. Passt aber erstmal.

    VDR1

    YaVDR | yaVDR 0.6 | GD05 | ASRock H87M PRO4 | Intel G3220 | 4GB | NT E9 400 | 64GB SSD | Zotac GT630 (1024MB) | Sat-IP

    VDR2 : noch nicht fertig ...

    Equipment:

    MCE (RC6) FB | | Sony Fernseher 4K | Denon X4000 AVR | Octopus.net mit 4 x DVB-C über Sat-IP

    |NUC D54250 (Intel VA-API) | Octopus.net 4xDVB-C / Sat-ip | 500 SSD | MCE FB | ax206 DPF |


  • Wie viel Strom zieht dein Backlight? Bei 1k Basiswiderstand hat man bei einem Verstärkungsfaktor von angenommen 100 ganze 500mA Strom die man schalten kann. Mehr würde ich auch dem USB-Port nicht zumuten wollen.


    Klar kannst du da etwas höher gehen. Aber mit Gefühl und Verstand, denn die Ausgänge vom Arduino können nur so bis maximal 20mA Strom abgeben ohne beschädigt zu werden.


    Ach ja: Und auf gar keinem Fall ganz ohne Basiswiderstand. Das zerstört potentiell Arduino und Transistor! Wenn du jetzt nur 1k vorrätig hast, dann schalte zwei parallel.


    Der Transistor ist auch richtig rum? Emitter zu GND?


    Freut mich aber, dass es jetzt geht.

  • 2x 1K werde ich mal ausprobieren...

    Danke für den hinweis. Ich nutze Ansible, möglicherweise liegt es daran :/

    VDR1

    YaVDR | yaVDR 0.6 | GD05 | ASRock H87M PRO4 | Intel G3220 | 4GB | NT E9 400 | 64GB SSD | Zotac GT630 (1024MB) | Sat-IP

    VDR2 : noch nicht fertig ...

    Equipment:

    MCE (RC6) FB | | Sony Fernseher 4K | Denon X4000 AVR | Octopus.net mit 4 x DVB-C über Sat-IP

    |NUC D54250 (Intel VA-API) | Octopus.net 4xDVB-C / Sat-ip | 500 SSD | MCE FB | ax206 DPF |


  • Nein. Distribution ist egal.


    Entweder wirklich sehr hoher LED-Strom oder Transistor falschrum. Kannst du den LED-Strom messen?


    Auf keinen Fall den Transistor ohne Basiswiderstand betreiben! Das muss schief gehen ohne Strombegrenzung. Irgendwas gibt früher oder später nach!

  • Bei 1k Basiswiderstand hat man bei einem Verstärkungsfaktor von angenommen 100 ganze 500mA Strom die man schalten kann.

    wenn der Transistor als Schalter fungieren soll, betreibt man ihn tief in der Sättigung. Also ca. das 10 fache über der normalen Verstärkung. Ansonsten ist die CE Strecke nicht voll durch gesteuert und es fällt Verlustleistung am Transistor ab. Alternativ würde auch ein kleiner TTL Fet gehen. BS170 , 2N7000 usw. Hat den Vorteil, das es keinen Strom braucht und direkt vom Digitalpin getrieben werden kann.

  • Hi,

    Hab mir, da 2 glcds Kabelbruch haben, mal 2x

    https://www.ebay.de/itm/253565…a98ffd:g:4XsAAOSwEVlb9wGE

    bestellt.

    Die sollten ja passen.

    Wieder mit Parport rumbasteln ist mir zu mühsam, obwohl neues Board noch Parport intern hat.

    Hast du schon mit alten T6963c mit Röhre versucht? Oder sollte ich es auch auf LED upgraden? Verbrauchstechnisch ist es wahrscheinlich sinnvoll.

    Hab noch die alten aus dem Bastelthread von 2005 ca. Laufen tadellos, nur die Anschlüsse per Parallelportkabel sind nicht so robust in den Schneidklemmen.

    Mfg Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easy-vdr.de

  • Ich wüsste nicht warum die mit Röhre nicht gehen sollten. Nur nicht auf die Idee kommen die über Transistor dimmen zu wollen. Da gibt mit Sicherheit irgendwas nach. Den Inverter direkt über Laufwerksstecker versorgen damit die Beleuchtung mit dem PC an und aus geht.

  • Hi,

    Ok, bin gespannt.

    Dimmen geht via Platine mit Inverter. Verkabelt ist Backlight ja. Dss fällt nie aus...

    Mfg Stefan

    Test-VDR1: HP rp5700 Fertigsystem, Core2Duo E6400, 2GB RAM, FF-SD C-2300, nvidia Slim-GT218 x1 | easyVDR 2.0 64Bit
    VDR3: in Rente

    VDR4: MSI G31M2 v2, Digitainer2-Geh., t6963c 6" gLCD, E5200, 2GB, 3TB WD Red, GT730, 2x TT S2-3200; easyVDR 3.5 64bit
    VDR5: Gigabyte
    GA-G31M-S2L, Intel E2140, Zotac GT730 passiv, Digitainer2-Geh., t6963c 6 " gLCD, 2 TB WD Red, 2x TT S2-3200 (an 1 Kabel) easyVDR 3.5 64bit
    VDR6:
    Intel E5200, GT630 passiv, F1 750 GB, t6963c gLCD, 2x TT S2-3200 | easyVDR 3.5 64bit
    VDR-User #1068
    www.easy-vdr.de