Hallo zusammen! Ich möchte ein digitales Display, welches wiederum mit einer Tastatur verbunden ist und mit dieser "kommuniziert", mit einem herkömmlichen PC(-Mainboard) verbinden, sodass die Tastatureingaben im PC verarbeitet werden können und dieser die Steuerung des Displays übernimmt. In der aktuellen Konfiguration werden die beiden Geräte von einem sehr alten CCC (central control computer) mit einem EPROM gesteuert. Ich habe die genaue Schaltung der Teile gefunden und als Blockschaltbild angehängt. (zur Verdeutlichung) Der PC soll sonst keine weiteren Geräte steuern/anzeigen. Wie bringe ich diese Aufgabe zur Lösung? Welche Hardware/Karten/Schnittstelle brauche ich? Kann ich ein simples Programm mit bspw. VB6 zur Signalverarbeitung schreiben? Besten Dank im Voraus. Phil
Du wirst "CCC" mit einem Microcontroller mit entsprechend vielen I/O-Leitungen nachbilden müssen. Der Microcontroller wiederum kommuniziert dann über eine geeignete Schnittstelle mit dem PC. Das kann eine serielle Schnittstelle (RS232), USB oder auch eine Netzwerkverbindung sein. Was aber nicht bzw. nur mit erheblichem Hardwareaufwand möglich ist, ist der Ersatz von "CCC" durch einen PC, denn der hat keine dafür geeigneten Anschlüsse.
Rufus Τ. F. schrieb: > Du wirst "CCC" mit einem Microcontroller mit entsprechend vielen > I/O-Leitungen nachbilden müssen. Der Microcontroller wiederum > kommuniziert dann über eine geeignete Schnittstelle mit dem PC. Das > kann eine serielle Schnittstelle (RS232), USB oder auch eine > Netzwerkverbindung sein. > > Was aber nicht bzw. nur mit erheblichem Hardwareaufwand möglich ist, ist > der Ersatz von "CCC" durch einen PC, denn der hat keine dafür geeigneten > Anschlüsse. Danke schon mal. Was muss das für ein Mikrocontroller sein? Welchen uC-Bautyp und welche Schnittstelle nimmt man hierfür denn praktischerweise? Ich denke, alle I/O-Leitungen, die aktuell von Digital Display zu CCC gehen, müssen nachgebildet werden, ja. (bis auf Voltage und Ground, die kommen vom Netzteil) Wie funktioniert die Konfiguration dieser Mikrocontroller? Wie kann auf die Ein- und Ausgänge zugegriffen werden? Kann sowas in Basic programmiert werden? Wirklich komplex ist der Funktionsumfang ja nicht. Ich denke, ich brauche zwei drei Eckdaten und Tipps, wie sowas angegangen wird. Würde das jemand von euch hinbekommen?
Phil H. schrieb: > Was muss das für ein Mikrocontroller sein? Einer mit ausreichend vielen I/O-Leitungen. > Welchen uC-Bautyp und welche Schnittstelle Die zur vorhandenen Technik passende. Das ist Deinem Blockschaltbild nicht zu entnehmen. Spannungspegel? Protokoll? Kann man Deinem Blockschaltbild nicht ansehen. Die dort weiter oben stehenden vermutlichen Versorgungsspannungsanschlüsse lassen auf so eine Art SPS schließen. Was ist der Sinn des ganzen? Tolles Retro-Material als Spielkonsole am PC? Oder soll eine vorhandene SPS/Maschinensteuerung durch einen PC ersetzt werden, das Bediengerät aber beibehalten?
Könnte auch irgendwas mit Film/Videobearbeitung sein. Titelgenerator? Es ist jedenfalls nicht so einfach, sowas an den PC anzudocken, weil dieses Gerät Tasten hat (könnte als USB Keyboard durchgehen), aber eben auch Motoren und ein Display, was per USB nur als Sondergerät durchgehen würde. Evtl. geht sowas wie ein Roboter Interface mit Software, das Ding tut z.B. so, als wäre es ein Lego- oder FischerComputing Interface. Man kann sich auch selber was definieren, muss dann aber vermutlich am PC sein eigenes Treiberchen basteln. Ach, der I/O Warrior fällt mir dazu auch noch ein: http://www.codemercs.com/de/io-warrior Der könnte sowas evtl.
:
Bearbeitet durch User
Danke. Also, es handelt sich hierbei im Original um eine 100-CD-Jukebox aus den USA, Baujahr 1989. Der Benutzer wählt über die Tastatur eine vierstellige Zahlenkombination (Bsp. 1409 = 14. Album, 09. Song), die Eingabe wird an das Display geschickt und von dort aus zum CCC, welcher bei Vorhandensein der CD einen Verstärker ansteuert und dieser dann den Song abspielt. Das Ganze wurde bereits soweit optimiert, dass der CD-Player durch einen MP3-Adapter mit einer Laptopfestplatte ersetzt wurde. Funktioniert tadellos. Nächster Schritt wäre jetzt, den alten CCC eben durch einen herkömmlichen PC zu ersetzen. Die Musik liegt dann direkt auf der Computerfestplatte und das Songabspielen kann über eine beliebige Audiosoftware mit EQ-Möglichkeiten ablaufen. --- Ich habe mir das so gedacht dass alle Signale die vom Digital Display kommen in einen Mikrocontroller geleitet werden und von dort aus an die serielle PC-Schnittstelle gesendet werden. Mit VB6 oder VB.NET könnte ich mir ein "simples" Programm zusammenschustern, das die eingegebenen Zahlen entgegennimmt und den entsprechenden Song bei Vorhandensein (Bsp. 1409 = Ordner 14, Datei 09) einer Playlist einer Audiosoftware hinzufügt und nachfolgend abspielt. Das Thema Mikrocontroller ist für mich absolut neu. Habe mich heut Nacht mit dem Thema "Luna (AVR)" und dem Luna-Starterkit beschäftigt. Das scheint mir für Anfänger und Leute mit BASIC-"Skills" vielleicht nicht schlecht. Die Standardbibliothek mit den Modulen "Ports" und "Uart" bzw. "Usart" scheinen mir hier für meine Zwecke passend: http://avr.myluna.de/doku.php?id=de:hardware-interfaces Der I/O-Warrior sieht aber auch passend aus. Ob die Steuerung im Original überhaupt ein Protokoll verwendet? Sind das nicht einfach 5V starke True-False-Signale, die dort über die Kabel gesendet werden? @Rufus T. Firefly: Entstammt dein Nickname den grandiosen Marx Brothers?
:
Bearbeitet durch User
Phil H. schrieb: > Ob die Steuerung im Original überhaupt ein Protokoll verwendet? Na wenn das so einfach ist: Wie würdest du die Leitungen denn setzen, damit auf dem Display z.B 14 09 erscheint? Das Display wird offenbar über ein serielles Protokoll angesteuert. Dieses musst du erstmal rausbekommen und dann auf deinem µC implementieren, um da was drauf angezeigt zu bekommen. Da könnte es helfen, mal zu schauen, wie der im Display verbaute Controller heißt.
Nun, Du hast das Gerät, Du hast sowohl den "CCC" als auch Deine Tastatur/Display-Kombination, und sogar so eine Art Blockschaltbild. Schnapp' Dir ein Oszilloskop oder einen Logikanalysator, und /sieh nach/, was auf den Leitungen zwischen CCC und Display geschieht. Hast Du zufälligerweise auch einen richtigen Schaltplan, d.h. einen, auf dem auch die verwendeten Bauteile zu erkennen sind? Damit könnte man auftretende Signalpegel eingrenzen und möglicherweise auch weitere Rückschlüsse ziehen. Wenns keinen Schaltplan gibt, dann wären scharfe und gut ausgeleuchtete Bilder der Platinen hilfreich, auf denen man die einzelnen Bauteile erkennen kann (insbesondere Beschriftungen irgendwelcher ICs). (Ansonsten: Ja, klar. Freedonia!)
Danke Euch! Ja, ich habe sämtliche Schaltpläne der betreffenden Komponenten mit genauen Bauteilangaben gefunden. Ich glaube, Ihr könnt damit was anfangen. Siehe .pdf im Anhang: - S.1 und 2: Digital Display - S.3 und 4: Komponentenliste Dig. Display - S.5 und 6: CCC - S.7: "Display/Keyboard Interface" - S.8: "CCC IC Power and common Pin Chart" - S.9: CCC Board Layout - S.10-13: Komponentenliste CCC - S.14: CCC I/O Matrix Der Stecker "J5 - Title Pages" (Seite 2), der vom Digital Display ausgehend einen Motor ansteuert, müsste nicht berücksichtigt werden, da das Teil das von dem Motor angetrieben würde, wegfällt. --- @Rufus: "Nein, ... das Wort hatte dreizehn Buchstaben. - Emporkömmling! - Das wars!"
Habe noch was gefunden. Dieser Mensch hatte das Ganze schon in die Tat umgesetzt: http://forum.arcadecontrols.com/index.php/topic,111334.0.html (der letzte Beitrag ganz unten - dort sieht man auch einen Mikrocontroller - sowie Beitrag #14 zeigen die Verkabelung des Keyboards. Hier scheint man aber das Digital Display übergangen zu haben, sondern hat nur das Keyboard verbunden.)
U2 auf Seite 2 ist interessant. Das ist ein RS422-Receiver, der mit "J2" verbunden ist. Auf Deinem CCC ist das Gegenstück dazu auf Seite 7 (5-72) zu finden: U13, ein RS422-Transceiver. Der ist mit den Signalen "Display TXData" und "Display Clock" verbunden. Damit ist klar, was hier geschieht: Das ist eine unidirektionale synchrone serielle Schnittstelle, gemeinhin "SPI" genannt.
Rufus Τ. F. schrieb: > U2 auf Seite 2 ist interessant. Das ist ein RS422-Receiver, der mit "J2" > verbunden ist. > > Auf Deinem CCC ist das Gegenstück dazu auf Seite 7 (5-72) zu finden: > U13, ein RS422-Transceiver. Der ist mit den Signalen "Display TXData" > und "Display Clock" verbunden. > > Damit ist klar, was hier geschieht: Das ist eine unidirektionale > synchrone serielle Schnittstelle, gemeinhin "SPI" genannt. Danke. Dazu fällt mir zunächst ein: Ich hätte gerne Ahnung davon. Bin leider nur armseliger Maschinenbauer. Welches Interface/welcher Controller eignet sich dazu, das Gegenstück am CCC funktionsgerecht zu ersetzen, sodass die Verbindung zwischen Digital Display und Keyboard (Stecker "J4" am Digital Display, S. 2) erhalten bleiben können? Noch mal bezogen auf S. 2, Ablauf: - Stecker "J4", Adern 8/7/6/5 ("Strobe" = "abtasten") warten auf Tastatureingaben - Tastatureingaben werden direkt weitergegeben an CCC-Anschluss P15 (S. 7) über Stecker "J3", Adern 5/6/7/8, wo die Eingaben auf Gültigkeit geprüft werden - CCC gibt überprüfte Werte über P5 (S. 7) an Dig. Display (Stecker "J3") zurück. - CCC zeigt Text über P6 (S. 7, unten), indem er diesen zu Stecker "J2" am Dig. Display sendet. ---- Vollkommener Nonsense oder (halbwegs) richtig?
Ohne alles gelesen zu haben: was soll eigentlich der PC bei der ganzen Geschichte? Ein Raspberry kann sowohl den Kram steuern als auch die Musik abspielen.
H.Joachim S. schrieb: > Ohne alles gelesen zu haben: was soll eigentlich der PC bei der ganzen > Geschichte? Ein Raspberry kann sowohl den Kram steuern als auch die > Musik abspielen. Bis eben wusste ich nicht mal was ein Raspberry ist. Laut wikipedia läuft auf diesem Teil weder Windows (mit VisualBasic würde ich es hinbekommen, ein kleines passendes Programm zu schreiben), noch kann man SATA- oder IDE-Platten anschließen. Gut, man könnte was Mobiles/Externes über USB anschließen. Interessant ist jedoch, dass hierbei scheinbar "Interface/Controller" und "PC" in einem wäre. Zudem ist das geringe Gewicht und die Abmessung sehr interessant.
Und der Stromverbrauch :-) USB-Sticks gibts doch in ausreichender Grössse. Oder den Banana-Pi, hat Sata. Python?
H.Joachim S. schrieb: > Und der Stromverbrauch :-) > > USB-Sticks gibts doch in ausreichender Grössse. Oder den Banana-Pi, hat > Sata. > Python? Python? Kann ich nicht. ;) Gibt da ja noch einige andere. "Cubieboard" z.B. Gemein ist den Teilen, dass fast keines einen VGA- oder DVI-Anschluss hat. Wie verbinde ich die Teile denn mit nem herkömmlichen TFT-Monitor? Denn das brauche ich in meinem Fall. Ein kleiner Monitor, den man über diesen DSI-Port anschließt, genügt nicht.
Raspi, Banana & Co. haben doch alle einen HDMI Ausgang?! Da kannst Du problemlos eine FullHD 55" Glotze dranhängen. Oder über einen DVI-Adapter auch einen "alten" PC-Monitor. Phil H. schrieb: > Python? Kann ich nicht. ;) Das kann man doch lernen!
Jörg schrieb: > Raspi, Banana & Co. haben doch alle einen HDMI Ausgang?! > > Da kannst Du problemlos eine FullHD 55" Glotze dranhängen. Oder über > einen DVI-Adapter auch einen "alten" PC-Monitor. > > Phil H. schrieb: >> Python? Kann ich nicht. ;) > > Das kann man doch lernen! Hast ja Recht. HDMI kann man ja auch auf DVI, sogar auf VGA adaptieren. Ich brauche eine grafische Oberfläche. (GUI) Python eignet sich wohl für Kommandozeilen gut, für GUIs wäre die Basic-ähnliche Sprache "Gambas" anscheinend geeignet. Das "große Problem" der Kabelverbindung bleibt allerdings noch. Wie ich die Ausgänge des Digital Displays mit dem Raspberry verbinden müsste, weiß ich nicht. Welche Daten sendet das Display denn bspw. aus, wenn der Benutzer am Keyboard eine 0 (Null) drückt?
Phil H. schrieb: > Hast ja Recht. HDMI kann man ja auch auf DVI, sogar auf VGA adaptieren. Viel adaptieren braucht man bei DVI nicht. Der Stecker ist anders, aber das Signal wird einfach 1:1 durchgereicht. Bei VGA ist es etwas komplizierter, aber entsprechende Geräte zum Umsetzen gibt's da auch. > Ich brauche eine grafische Oberfläche. (GUI) > Python eignet sich wohl für Kommandozeilen gut, für GUIs wäre die > Basic-ähnliche Sprache "Gambas" anscheinend geeignet. Man kann auch in Python GUIs schreiben, z.B. mit tkinter oder PyQt. > Das "große Problem" der Kabelverbindung bleibt allerdings noch. Wie ich > die Ausgänge des Digital Displays mit dem Raspberry verbinden müsste, > weiß ich nicht. Welche Daten sendet das Display denn bspw. aus, wenn der > Benutzer am Keyboard eine 0 (Null) drückt? Das gilt es herauszufinden. Nennt sich reengineering.
Habe mich jetzt die letzten zwei Tage durch sämtliche Seiten gelesen. Inzwischen steht fest, dass ich in (VB).NET schreiben "muss". Die Bibliotheken die mir dort von Haus aus zur Verfügung gestellt werden (MediaPlayer, ID3-Tags V2, Windows-GUI), erreiche ich mit meinen Kenntnissen anderswo nur über exorbitante Umwege - wenn überhaupt. Zwei Möglichkeiten, die ich mir jetzt bezüglich Kompatibilität zusammengesponnen habe. Was sagt ihr dazu? Bitte um kurze Bestätigung/Hinweise zu den Möglichkeiten/etc. ... :) 1. Möglichkeit: - Hardware: Raspberry Pi B+ mit OS Raspbian - MONO installieren für VB.NET-Kompatibiltät: http://www.mono-project.com/docs/getting-started/install/linux/#debian-ubuntu-and-derivatives - "Pi Sharp" installieren, um mit VB.NET direkt auf die GPIO-Ports zuzugreifen: https://github.com/andycb/PiSharp 2. Möglichkeit: - Hardware: Herkömmliches PC-Mainboard, OS Windows XP/7 - Hardware2: "Atmel"-Board: http://www.ehajo.de/ateval-atmel-evaluationboard.html? - Zugriff auf die Ports mit "Luna"-Modul "Ports" und Senden der Daten an PC-Schnittstelle über "Uart"-Modul: http://avr.myluna.de/doku.php?id=de:hardware-interfaces - Empfangen der Daten an PC-Schnittstelle in VB.NET über "System.IO .Ports"-library: http://www.me.umn.edu/courses/me2011/smartprodcourse/technotes/docs/serial-port-vb.pdf ----------------------------------
Phil H. schrieb: > Gemein ist den Teilen, dass fast keines einen VGA- oder DVI-Anschluss > hat. Das stimmt nicht. Und selbst wenn das stimmen würde... > Wie verbinde ich die Teile denn mit nem herkömmlichen TFT-Monitor? > Denn das brauche ich in meinem Fall. Wozu denn, zum Teufel? Der Originalwechsler stellt doch offensichtlich eine "Benutzeroberfläche" bereit, die vollkommen ausreicht, um ihn bedienen zu können. Also entweder will man (Variante A) dieses Vintage-Teil äußerlich erhalten und nur mit einem modernen Innenleben ausstatten, dann braucht man ganz sicher keinen zusätzlichen Monitor. Wozu sollte der denn dabei gut sein? Oder (Variante B) man will einfach nur die Funktionalität dieses Teils nachbilden. Dann braucht man wiederum die Hardware dieses Teils nicht, dann nimmt man einfach einen Mini-PC und installiert da Kodi oder sowas drauf und fertig ist der Lack. Ich gehe mal davon aus, dass du im Prinzip Variante A anstrebst. Dann wäre es am einfachsten, den größten Teil der Elektronik darin schlicht stillzulegen. Das erspart das reverse engineering, zu dem du wohl offensichtlich nicht in der Lage bist. Erhalten bliebe nur die Stromversorgung, die Kontaktmatrix (Tastatur und Feedbackkontakte der Titelseiten-Mechanik), der Schrittmotortreiber der Titelseitenmechanik und das eigentliche Display samt Displaycontroller. Die Kontaktmatrix und die Schrittmotorsteuerung liegen vollständig an J3 an. Also einfach den Stecker ziehen und die Trennung von der alten Steuerung ist schon erledigt. Das Display ist etwas komplizierter abzutrennen, weil die drei zu seiner Ansteuerung nötigen Anschlüsse nicht alle auf eine Buchse herausgeführt sind. Hierfür müsste man U2 (DS88C20) auslöten und durch zwei Drahtbrücken ersetzen, dann hätte man die drei Signale auf J2 liegen. Hier muss man also an die Buchse, nicht an den Stecker wie bei J3. Dort liegt dann auch GND und 8V von der Versorgung, aus denen man dann die Versorgung für den Steuercontroller herstellen kann. Der Steuercontroller kann dann über 10 digitale Ausgänge und 4 digitale Eingänge die ganze Chose per Bitbanging ansteuern. Wenn er über eine dedizierte SPI-Schnittstelle verfügt, kann man auch zwei der Ausgänge (Data und Clock für's Display) hier dranhängen, statt an einfache GPIOs.
c-hater schrieb: > > Ich gehe mal davon aus, dass du im Prinzip Variante A anstrebst. Dann > wäre es am einfachsten, den größten Teil der Elektronik darin schlicht > stillzulegen. Das erspart das reverse engineering, zu dem du wohl > offensichtlich nicht in der Lage bist. > > Erhalten bliebe nur die Stromversorgung, die Kontaktmatrix (Tastatur und > Feedbackkontakte der Titelseiten-Mechanik), der Schrittmotortreiber der > Titelseitenmechanik und das eigentliche Display samt Displaycontroller. > > Die Kontaktmatrix und die Schrittmotorsteuerung liegen vollständig an J3 > an. Also einfach den Stecker ziehen und die Trennung von der alten > Steuerung ist schon erledigt. > > Das Display ist etwas komplizierter abzutrennen, weil die drei zu seiner > Ansteuerung nötigen Anschlüsse nicht alle auf eine Buchse herausgeführt > sind. Hierfür müsste man U2 (DS88C20) auslöten und durch zwei > Drahtbrücken ersetzen, dann hätte man die drei Signale auf J2 liegen. > Hier muss man also an die Buchse, nicht an den Stecker wie bei J3. Dort > liegt dann auch GND und 8V von der Versorgung, aus denen man dann die > Versorgung für den Steuercontroller herstellen kann. > > Der Steuercontroller kann dann über 10 digitale Ausgänge und 4 digitale > Eingänge die ganze Chose per Bitbanging ansteuern. Wenn er über eine > dedizierte SPI-Schnittstelle verfügt, kann man auch zwei der Ausgänge > (Data und Clock für's Display) hier dranhängen, statt an einfache GPIOs. Gude! Danke für Dein Posting! Variante A und Variante B, von beidem etwas! Erklärung: Ich brauche einen Flachbildschirm, weil die Titelseitenmechanik und damit auch der Schrittmotor wegfallen werden. D.h., die Alben werden nicht mehr durch Cover aus Papier in dem Title Rack angezeigt, sondern die Cover werden aus den ID3-Tags der Musikdateien ausgelesen und am Bildschirm angezeigt. (Ich habe vier dieser Jukeboxen, drei Boxen bleiben komplett original wie im oben angehängten Bild gezeigt, eine soll umgerüstet werden.) (Kodi und dergleichen Kinderprogramme passen nicht zum Oldschoolflair der Box. Es braucht da schon was eigenes mit schlichtem einfarbigen Hintergrund) Es bleiben also verkabelungsmäßig nur Keyboard und Digital Display! - Stecker J3 ist verstanden! - Zu U2: Das verstehe ich nicht ganz. Welche drei Signale hätte man dann auf J2 liegen? So wie ich das sehe, liegen die wichtigen Signale doch bereits alle an J2 und kommen von U2 bzw. von U1? Welche Signale willst Du da genau noch hinlegen?
:
Bearbeitet durch User
Phil H. schrieb: > - Zu U2: Das verstehe ich nicht ganz. Welche drei Signale hätte man dann > auf J2 liegen? Die drei Signale des Displaycontrollers natürlich. POR, DATA und SCLK. POR liegt (über eine Transistorstufe) bereits auf J3, Data und Clock aber nur über einen RS485-Pegelwandler, eben U2. D.h.: lassen sich nicht direkt an GPIOS anschliessen, sondern würde auf der Gegenseite auch wieder einen (zweikanaligen!) Pegelwandler erfordern. Zur Anbindung an µC-Pins wäre es also am einfachsten, den Pegelwandler auf der Platine auszulöten und durch zwei Drahtbrücken für die beiden Signale zu ersetzen.
c-hater schrieb: > Phil H. schrieb: > >> - Zu U2: Das verstehe ich nicht ganz. Welche drei Signale hätte man dann >> auf J2 liegen? > > Die drei Signale des Displaycontrollers natürlich. POR, DATA und SCLK. > POR liegt (über eine Transistorstufe) bereits auf J3, Data und Clock > aber nur über einen RS485-Pegelwandler, eben U2. D.h.: lassen sich nicht > direkt an GPIOS anschliessen, sondern würde auf der Gegenseite auch > wieder einen (zweikanaligen!) Pegelwandler erfordern. > > Zur Anbindung an µC-Pins wäre es also am einfachsten, den Pegelwandler > auf der Platine auszulöten und durch zwei Drahtbrücken für die beiden > Signale zu ersetzen. Danke. Verstanden! Ich glaube, ich brauche jemanden, der mir das verkabelt. :D
Phil H. schrieb: > Kodi und dergleichen Kinderprogramme passen nicht zum Oldschoolflair > der Box. Nun, Kodi gehört wohl zu den professionellsten Multimediallösungen, die man zur Zeit bekommen kann. Ich sehe nicht wo da ein "Kinderprogramm" sein soll. Phil H. schrieb: > Es braucht da schon was eigenes mit schlichtem einfarbigen > Hintergrund Kannst du in Kodi alles haben. Ist komplett konfigurierbar. Du kannst sogar mittels Plugins (die du für deinen speziellen Fall allerdings selbst schreiben müsstest) deine ganze Jukebox-Hardware darüber steuern. Alles machbar. Man muss sich halt nur mal damit befassen.
Anonymous User schrieb: > Phil H. schrieb: >> Kodi und dergleichen Kinderprogramme passen nicht zum Oldschoolflair >> der Box. > > Nun, Kodi gehört wohl zu den professionellsten Multimediallösungen, die > man zur Zeit bekommen kann. Ich sehe nicht wo da ein "Kinderprogramm" > sein soll. > > Phil H. schrieb: >> Es braucht da schon was eigenes mit schlichtem einfarbigen >> Hintergrund > > Kannst du in Kodi alles haben. Ist komplett konfigurierbar. Du kannst > sogar mittels Plugins (die du für deinen speziellen Fall allerdings > selbst schreiben müsstest) deine ganze Jukebox-Hardware darüber steuern. > Alles machbar. Man muss sich halt nur mal damit befassen. Danke. "Kinderprogramm" war so gemeint, wie die Software "ab Werk" daherkommt. Nämlich bunt, unübersichtlich, überladen, usw. usf. Aber wenn du das so explizit lobst, muss ich mich noch mal damit auseinandersetzen. Hatte die Software nämlich vorgestern erst installiert und ausprobiert. Anscheinend nicht ausreichend genug.
Hallo, wer würde mir einen kleinen Mikrocontroller programmieren? Natürlich gegen Bezahlung. Meine PLZ: 36088. Falls jemand "in der Nähe" wohnt, könnte ich auch gerne mit Netzteil, Tastatur + Display vorbeikommen, damit man das Ganze live + direkt bewerkstelligen/ausprobieren kann. Ich habe das Datenblatt des Displays inklusive "Programmieranleitung" (Bits, Bytes & sonstiger Kram) gefunden. ("CD100_...") Ich habe mir überlegt, dass Keyboard und Display NICHT zusammenhängen müssen. D.h., das Keyboard mit seinen 14 Tasten soll direkt an den Mikrocontroller angeschlossen werden. Die Signale der Tasten soll dann an den PC weitergesendet werden. (1. Funktion des Controllers) Das Display soll auch direkt am Mikrocontroller hängen und vom PC mit Daten/Text gefüttert werden. Habe die Schaltung des Displays nochmal angehangen ("Digital_Display_Rowe"). Genügt es, um Daten vom PC aufs Display zu bekommen (2. Funktion des Controllers), nur die Steckplätze 2 und 3 des Steckers "J2" mit dem Mikrocontroller zu verkabeln? Ich habe noch nicht ganz verstanden, welche Funktion der Mikrocontroller hierbei überhaupt übernehmen muss. Die Datenpakete, d.h. der Inhalt der Daten wird doch in der PC-Software festgelegt (meinetwegen geschrieben mit VB.NET) und von dort aus an den Mikrocontroller/an die serielle Schnittstelle gesendet? Muss der Controller die Daten nicht einfach nur an das Display weitergeben? Beste Grüße
Hallo, ich habe alle Informationen aus meinem letzten Thread zusammengefasst und benötige jetzt noch mal finale Verkabelungshilfe: Ein Digitales Display ("IMG_0243.JPG") an welchem zudem eine Tastatur hängt, soll mit einem herkömmlichen PC-Mainboard über einen Mikrocontroller verbunden werden. "Digital_Display_Rowe.pdf" (Schnittstellen gelb markiert) zeigt die genaue Verschaltung des Displays, das zweite Dokument "CD100_..." zeigt eine "Programmieranleitung" des Displays. ------------------- c-hater (Gast), schrieb zur Verschaltung (anhand "Digital_Display_Rowe.pdf"): "Die Kontaktmatrix und die Schrittmotorsteuerung liegen vollständig an J3 an. Also einfach den Stecker ziehen und die Trennung von der alten Steuerung ist schon erledigt. Das Display ist etwas komplizierter abzutrennen, weil die drei zu seiner Ansteuerung nötigen Anschlüsse nicht alle auf eine Buchse herausgeführt sind. Hierfür müsste man U2 (DS88C20) auslöten und durch zwei Drahtbrücken ersetzen, dann hätte man die drei Signale auf J2 liegen. Hier muss man also an die Buchse, nicht an den Stecker wie bei J3. Dort liegt dann auch GND und 8V von der Versorgung, aus denen man dann die Versorgung für den Steuercontroller herstellen kann. Der Steuercontroller kann dann über 10 digitale Ausgänge und 4 digitale Eingänge die ganze Chose per Bitbanging ansteuern. Wenn er über eine dedizierte SPI-Schnittstelle verfügt, kann man auch zwei der Ausgänge (Data und Clock für's Display) hier dranhängen, statt an einfache GPIOs." ------------------ Ich habe das Display ausgebaut und neben mir liegen (siehe Foto) und habe alle genannten Pins/Anschlüsse/Leitungen gefunden. Ich brauche jetzt nur noch genaue Info darüber, wie ich die Eingänge und Ausgänge mit dem Display verbinde. Vorgehensweise anhand "Digital_Display_Rowe.pdf": - Die Pins 5, 6, 7 und 8 an Stecker J3 ergeben jeweils einen digitalen Eingang am Mikrocontroller, d.h. jeden Pin mit einem Eingang verbinden? - U2 (DS88C20) auslöten, und dann? Welche Pins müssen genau mit zwei Drahtbrücken gebrückt werden? Mit welchem Pin muss Pin 6 (Output1) und mit welchem Pin muss Pin 8 (Output2) gebrückt werden? - Wohin müssen dann die 10 digitalen Ausgängepins des Mikrocontrollers genau verbunden werden? Zu welchen Pins/Anschlüssen des Displays? - Würde sich eines der folgenden Boards(+Controller) für das Projekt eignen? https://www.arduino.cc/en/Main/ArduinoBoardUno https://www.arduino.cc/en/Main/ArduinoBoardMicro Beide halten exakt 14 digitale I/O-Pins vor, was ja passen würde. Ist nur die Frage, ob ich auch deren Pin 0 und 1 verwenden kann oder ob ich diese beiden für die Kommunikation zur seriellen Schnittstelle verwenden/reservieren muss, wodurch es dann zwei I/O-Pins zu wenig wären? Denn die Seite schreibt: "Serial: 0 (RX) and 1 (TX). Used to receive (RX) and transmit (TX) TTL serial data. These pins are connected to the corresponding pins of the ATmega8U2 USB-to-TTL Serial chip." ------------ Vielen Dank im Voraus! (Vor drei Tagen stand ich vorm Abgrund, heute bin ich bereits einen Schritt weiter.) RS
:
Bearbeitet durch User
Phil H. schrieb: > - Die Pins 5, 6, 7 und 8 an Stecker J3 ergeben jeweils einen digitalen > Eingang am Mikrocontroller, d.h. jeden Pin mit einem Eingang verbinden? Nein. Pin1..4 (RETn) von Stecker J3 gehören an die Eingänge des zukünftigen Steuercontrollers. > - U2 (DS88C20) auslöten, und dann? Welche Pins müssen genau mit zwei > Drahtbrücken gebrückt werden? Mit welchem Pin muss Pin 6 (Output1) und > mit welchem Pin muss Pin 8 (Output2) gebrückt werden? Da für die RS485-Schnittstelle pro Signal je zwei Pins benutzt wurden, hast du die Wahl zwischen jeweils zwei Möglichkeiten. Ich würde jeweils +INx verwenden, also, bezogen auf die Pins des zu entfernenden IC U2, würde ich Pin6 mit Pin3 verbinden und Pin8 mit Pin11. Dementsprechend liegen dann die beiden Signale auf Pin2 (DATA) und Pin4 (SCLK) von Buchse J2. > - Wohin müssen dann die 10 digitalen Ausgängepins des Mikrocontrollers > genau verbunden werden? Zu welchen Pins/Anschlüssen des Displays? Da du (wie du erst recht spät im Thread verkündet hast) auf die Titelseitenmechanik sowieso verzichten willst, brauchst du bloss 7 Ausgänge, denn die beiden für den Stepper selber und der Strobe für die Feedback-Kontakte der Mechanik entfallen ja dann. Von diesen 7 Ausgängen brauchst du 4 für die Abfrage der Tastatur, diese 4 müssen also auch mit an den Stecker J3 und zwar an die Pins 5..8 (STRn). Die restlichen drei Ausgänge müssen an die Buchse J2. Ein GPIO an Pin1 (der steuert dann POR des Displaycontrollers). Die beiden anderen stellen eine SPI-Schnittstelle dar. An welche Pin der Buchse J2 sie gehören, hängt davon ab, wie du die Drahtbrücken verbunden hast, die U2 ersetzen. Wenn du meinem Vorschlag dafür gefolgt bist, gehört MOSI vom Controller an Pin2 der Buchse und SCLK an Pin4. > - Würde sich eines der folgenden Boards(+Controller) für das Projekt > eignen? > https://www.arduino.cc/en/Main/ArduinoBoardUno > https://www.arduino.cc/en/Main/ArduinoBoardMicro Könnte eng werden, denn du willst ja zusätzlich auch noch ein TFT-Display ansteuern. De Frage ist: soll das ebenfalls über den Steuercontroller angebunden werden oder unabhängig davon? Wenn unabhängig, dann reichen diese Boards sicher mehr als aus. Sie sind dann sogar schon völlig überdimensioniert...
c-hater schrieb: >.... Danke für Deinen Beitrag!!!!!!!!!!!! (Ich weiß, Satzzeichen sind keine Herdentiere, hier sind sie aber angebracht) Anhand deiner Beschreibung schaffe ich es, alles richtig zu verkabeln! >Von diesen 7 Ausgängen brauchst du 4 für die Abfrage der Tastatur, diese >4 müssen also auch mit an den Stecker J3 und zwar an die Pins 5..8 >(STRn). - Habe ich verstanden, nur ist mir der Sinn nicht ganz klar. Diese Leitungen der Pins 5..8 von Stecker J3 führen ja direkt und ausschließlich zurück zur Tastatur an den Stecker J4. Welchen Grund hat das, dass die Tastatur "ihr eigenes Tastensignal" wieder zurückbekommt? ------- - Der TFT-Monitor soll einfach direkt am PC-Mainboard hängen, d.h. vollkommen unabhängig vom Mikrocontroller. Er belegt also keinen Controllerport. - Überdimensioniert muss ja auch nicht sein. Welche Board-/Controllerkombination kannst Du mir für die Aufgabe empfehlen? - Kann ich dich per Mail oder irgendwie anders erreichen? Du hast mir jetzt schon unglaublich geholfen!
Phil H. schrieb: > - Habe ich verstanden, nur ist mir der Sinn nicht ganz klar. Diese > Leitungen der Pins 5..8 von Stecker J3 führen ja direkt und > ausschließlich zurück zur Tastatur an den Stecker J4. Welchen Grund hat > das, dass die Tastatur "ihr eigenes Tastensignal" wieder zurückbekommt? OMG, dir fehlen massiv sämtliche Grundlagen. Konkret: Abfrage einer Matrix-Tastatur. Du findest das Prinzip an hundertausend Stellen im INet erklärt. Nicht zuletzt auch in den FAQs von µc.net. Entsprechende FAQ raussuchen, lesen und verstehen musst du schon alleine, das kann nicht mein Job sein... > - Überdimensioniert muss ja auch nicht sein. Welche > Board-/Controllerkombination kannst Du mir für die Aufgabe empfehlen? Ich persönlich würde für die letztlich auf Tastatur und Display beschränkte Aufgabenstellung eigentlich überhaupt kein extra µC-Board mehr einsetzen, sondern einfach nur eins der vielen billigen USB-FT232RL-Module verwenden, z.B. https://www.amazon.de/FT232RL-USB-Seriell-Konverter-Adapter-Modul-Arduino/dp/B00Q6WRLRG. Die haben genug IOs für die Aufgabe. > - Kann ich dich per Mail oder irgendwie anders erreichen? Nein. Nur hier.
c-hater schrieb: > OMG, dir fehlen massiv sämtliche Grundlagen. > > Konkret: Abfrage einer Matrix-Tastatur. Du findest das Prinzip an > hundertausend Stellen im INet erklärt. Nicht zuletzt auch in den FAQs > von µc.net. > > Entsprechende FAQ raussuchen, lesen und verstehen musst du schon > alleine, das kann nicht mein Job sein... :D Da hast Du Recht. Ich hab von Elektronik und Schaltungen keinerlei Ahnung. Ich hatte zu Beginn ja schon geschrieben, dass ich lediglich armseliger Maschinenbauer bin. Aber, ... ist doch toll, wenns am Ende funktioniert. :D (durch Deine Hilfe) > Ich persönlich würde für die letztlich auf Tastatur und Display > beschränkte Aufgabenstellung eigentlich überhaupt kein extra µC-Board > mehr einsetzen, sondern einfach nur eins der vielen billigen > USB-FT232RL-Module verwenden, z.B. > https://www.amazon.de/FT232RL-USB-Seriell-Konverter-Adapter-Modul-Arduino/dp/B00Q6WRLRG. > Die haben genug IOs für die Aufgabe. Okay! Klingt auch gut. Können denn dort alle Bohrungen am Rand auch als freie I/O-Anschlüsse genutzt werden? Laut Datenblatt hat das Teil ja nur 5 freie I/Os. Ich werde zunächst alles so verlöten und verbinden, wie Du es mir empfohlen hast. Wie lange braucht man (nicht ich - ich brauche 100 Jahre), um den/das/die FT232RL für meine Zwecke zu programmieren? Könntest Du das erledigen und mir sagen, was mich das kosten würde?
:
Bearbeitet durch User
Update: Überdimensioniert hin oder her - als Board kommt zunächst so ein verlinktes Arduino/Genuino zum Einsatz, da scheinbar sehr gut dokumentiert und einfache Syntax vorhanden. @c-hater: > Die beiden anderen stellen eine SPI-Schnittstelle dar. An welche Pin der >Buchse J2 sie gehören, hängt davon ab, wie du die Drahtbrücken verbunden >hast, die U2 ersetzen. Wenn du meinem Vorschlag dafür gefolgt bist, >gehört MOSI vom Controller an Pin2 der Buchse und SCLK an Pin4. "MOSI von Controller an PIN 2 der Buchse J2" sehe ich ein. Müsste aber "SCLK" nach deinem Vorschlag [Pin 8 mit Pin 11("+IN2") brücken] dann nicht eher auf Pin 5 (laut Zeichnung "D02-") anstatt auf Pin 4 von Buchse J2 liegen? Danke im Voraus!
Phil H. schrieb: > Können denn dort alle Bohrungen am Rand auch als > freie I/O-Anschlüsse genutzt werden? Nein. Aber viele davon können entweder als Input oder als Output genutzt werden. Zusammen mit den frei programmierbaren Pins genug IO für die konkrete Anwendung.
Phil H. schrieb: > Überdimensioniert hin oder her - als Board kommt zunächst so ein > verlinktes Arduino/Genuino zum Einsatz, da scheinbar sehr gut > dokumentiert und einfache Syntax vorhanden. Selbst eine perfekte Dokumentation und eine Baby-kompatible Syntax helfen hier nicht weiter. Das Board ist schlicht und einfach einfach über. Braucht man nicht, will man nicht, sorgt nur für zusätzliche Probleme durch zusätzliche Komplexität.
@c-hater: Was sagst du zu meinem letzten Posting bzgl. der Pinbelegung an Buchse J2? Liege ich richtig?
Phil H. schrieb: > Was sagst du zu meinem letzten Posting bzgl. der Pinbelegung an Buchse > J2? Liege ich richtig? Keine Ahnung, ich habe den Schaltplan bereits wieder gelöscht. Letztlich spielt es aber auch überhaupt keine Rolle, da du ja sowohl die Drahtbrücke als auch den Anschlusspin deines Controllers an J2 selbst bestimmst. Es muss halt nur beides zueinander passen. D.h.: du musst am Ende wissen, an welchem Pin deines IO-Controllers welches Signal des Display-Controllers anliegt. Das ist, worauf es im Kern eigentlich nur ankommt. Die ursprünglichen Bezeichnungen oder Pin-Nummern sind völlig irrelevant.
c-hater schrieb: > Phil H. schrieb: > >> Was sagst du zu meinem letzten Posting bzgl. der Pinbelegung an Buchse >> J2? Liege ich richtig? > > Keine Ahnung, ich habe den Schaltplan bereits wieder gelöscht. > > Letztlich spielt es aber auch überhaupt keine Rolle, da du ja sowohl die > Drahtbrücke als auch den Anschlusspin deines Controllers an J2 selbst > bestimmst. Es muss halt nur beides zueinander passen. D.h.: du musst am > Ende wissen, an welchem Pin deines IO-Controllers welches Signal des > Display-Controllers anliegt. Das ist, worauf es im Kern eigentlich nur > ankommt. Die ursprünglichen Bezeichnungen oder Pin-Nummern sind völlig > irrelevant. Hast ja Recht. Danke für die prompten Antworten. Wenn ich alles verkabelt habe und in den kommenden Tagen dann softwaretechnisch kurz vor der Verzweiflung stehe, melde ich mich zurück. ;) Bis später, das Pils ruft.
Tastatur funktioniert in Verbindung mit einem Genuino Micro! (4 Eingänge, 4 Ausgänge) Jetzt fehlt noch das Display. Genügt es, die drei besprochenen Signale POR, TXDATA und TXCLK wie oben beschrieben zwischen Genuino und Display zu verbinden, oder muss ich die Stromanschlüsse an Stecker J2 (Pins 6 bis 9)/Buchse U2 des Displays zusätzlich noch mit dem original Netzteil der Box verbinden? (Der Genuino wird über USB mit 5V Spannung versorgt)
Phil H. schrieb: > oder muss ich die Stromanschlüsse an Stecker J2 (Pins 6 bis 9)/Buchse > U2 des Displays zusätzlich noch mit dem original Netzteil der Box > verbinden? Woher soll sonst das Display versorgt werden?
Rufus Τ. F. schrieb: > Phil H. schrieb: >> oder muss ich die Stromanschlüsse an Stecker J2 (Pins 6 bis 9)/Buchse >> U2 des Displays zusätzlich noch mit dem original Netzteil der Box >> verbinden? > > Woher soll sonst das Display versorgt werden? Ja, stimmt schon. Eventuell wie auch bei der Tastatur über den Genuino? Die Tastatur angesteckt am Display funktioniert ja auch ohne externe Spannungsversorgung. Mich verwirrt das Schaltbild des Displays. Laut der Zeichnung geht vom Stecker J2 nur Pin 8 "Logic Common" zu U2. Die anderen Pins "Power common", "+28vdc" sowie "+8vdc" vom Central control computer/Netzteil führen nur zu einem "aux power"-Stecker "J1". Allerdings wird U2 an Pin 14 mit "+5vdc" versorgt. Welche Spannung und Ground muss ich wo anstecken?
Phil H. schrieb: > Die Tastatur angesteckt am Display funktioniert ja auch ohne externe > Spannungsversorgung. Die braucht ja auch so gut wie keinen Strom. Was sollte sie auch damit, Tasten heizen? > Mich verwirrt das Schaltbild des Displays. Laut der Zeichnung geht vom > Stecker J2 nur Pin 8 "Logic Common" zu U2. Die anderen Pins "Power > common", "+28vdc" sowie "+8vdc" vom Central control computer/Netzteil > führen nur zu einem "aux power"-Stecker "J1". > > Allerdings wird U2 an Pin 14 mit "+5vdc" versorgt. Was hast du immer noch mit U2? Der sollte doch längst ausgelötet sein. > Welche Spannung und Ground muss ich wo anstecken? Das geht aus dem Schaltplan leider nicht hervor. Irgendwie fehlt darin nämlich die Stromversorgung, deswegen kann man nicht sehen, wo die eigentlich angeschlossen ist. Was man allerdings erkennen kann: Das Display braucht nur eine 8V-Versorgung. Die muss irgendwie an Pin4 des Übertragers E1 gelangen. Außerdem natürlich den Gegenpol dazu, also Power Common. Das muss irgendwie an den Emitter von Q5 gelangen. Aus dieser einen Versorgung werden dann alle für das Display nötigen Spannungen von dem Geraffel rings um den Übertrager E1 erzeugt. Für die Steuerung des Displays wird natürlich eine Signalmasse benötigt, also GND von deinem Arduino. Die muss irgendwie letztlich an Pin18 von U1 (VDD) gelangen. Und die drei Signale, über die wir schon geredet haben und die letztlich an die Pins 20, 21 und 22 von U1 gehören.
c-hater schrieb: > Das geht aus dem Schaltplan leider nicht hervor. Irgendwie fehlt darin > nämlich die Stromversorgung, deswegen kann man nicht sehen, wo die > eigentlich angeschlossen ist. > > Was man allerdings erkennen kann: Das Display braucht nur eine > 8V-Versorgung. Die muss irgendwie an Pin4 des Übertragers E1 gelangen. > Außerdem natürlich den Gegenpol dazu, also Power Common. Das muss > irgendwie an den Emitter von Q5 gelangen. Aus dieser einen Versorgung > werden dann alle für das Display nötigen Spannungen von dem Geraffel > rings um den Übertrager E1 erzeugt. > > Für die Steuerung des Displays wird natürlich eine Signalmasse benötigt, > also GND von deinem Arduino. Die muss irgendwie letztlich an Pin18 von > U1 (VDD) gelangen. Und die drei Signale, über die wir schon geredet > haben und die letztlich an die Pins 20, 21 und 22 von U1 gehören. Grüß Dich und Danke! U2 ist jetzt ausgelötet. Zwei Brücken zu den U1-Pins 21 und 22 sind entsprechend gebaut. 21 (DATA) geht zu MOSI, 22 (SCLK) geht zu SCK. 20 (POR) ist mit irgendeinem Digital-Outputpin (genauer: Pin 12) vom Arduino verbunden. Habe die Leitungen vom 8V-Anschluss an Stecker J2 verfolgt: Der landet genau dort wo du sagst: Pin4 von Übertrager E1. Am Emitter von Q5 landet die Leitung "Logic Common" (Pin 8) von Stecker J2. Habe also die passenden Ausangspins des Netzteils (8V und "Logic Common") mit den beiden J2-Pins verbunden. Bezüglich der "Signalmasse": Im Datenblatt des Displays das ich gerade nochmal angehangen habe steht auf Seite 2 direkt was zu den Pinfunktionen und so... "VSS, Pin no 1" = power and signal ref. "VDD, pin no 18" = DC power connection usw. usf. Ground vom Arduino an Pin 18, ja? --- Ich denke mal jetzt geht es darum, anhang dieser Anleitung/dieses Datenblatts erst mal die richtigen Einstellung für die SPI-Schnittstelle zu finden. Er hier beschreibt eine einfache Variante mit einer SPI-Bibliothek und eine Variante über "Bitbanging": https://wiki.attraktor.org/images/d/d4/Arduino_stammtisch-serielle_kommunikation_spi.pdf Hier finde ich die Referenz zur SPI-Bibliothek: https://www.arduino.cc/en/Reference/SPI Kannst Du mir anhand des Datenblattes vom Display sagen, welche Parameter ich für BitOrder, ClockDivider, DataMode etc. angeben muss und welche Zeilen ich sonst noch programmieren muss, um mal ein Bit an das Display zu senden? Kannst Du so einen kleinen "Testcode" auf das Display gemünzt wie in dem .pdf gezeigt programmieren?
Ground vom Arduino nicht an Pin 18 VDD. Das ist +, Vss ist - (Ground).
Nils S. schrieb: > Ground vom Arduino nicht an Pin 18 VDD. Das ist +, Vss ist - (Ground). Danke! Wenn Ground wirklich vom Arduino kommen muss, muss ich versuchen das dort hinzubekommen. "Logic Common" - was ist das? Wer weiß einen Testcode? Danke!
Common ist GND, Ground, -. Logic ist der Minuspol der Steuerungs-Elektronik.
Nils S. schrieb: > Ground vom Arduino nicht an Pin 18 VDD. Das ist +, Vss ist - (Ground). Da hast du Recht. Verdammt, das war mir völlig entgangen. Das Problem dabei ist, dass VSS leider nicht mit dem GND-Potential der restlichen Schaltung verbunden ist, an der auch Logic common hängt. Das verkompliziert die ganze Sache erheblich. 3,3V-Logik kann man da garnicht direkt dranhängen, ganz sicher jedenfalls nicht, wenn deren Bezugspotential an Logic common ist bzw. sein soll. Also nix mit den beiden einfachen Drahtbrücken statt U2. Da müssen Pegelwandler her. Z.B. solche, wie einer im POR-Signal bereits verbaut ist (Q4 und umliegendes Hühnerfutter auf Seite 2 des Schaltplanes). Wie konnte ich den denn nur übersehen?! Also: Drahtbrücken wieder raus und statt dessen zwei Pegelwandler rein. Man könnte z.B. die Schaltung rund um Q4 dafür doppelt nachbauen.
c-hater schrieb: > Nils S. schrieb: > >> Ground vom Arduino nicht an Pin 18 VDD. Das ist +, Vss ist - (Ground). > > Da hast du Recht. Verdammt, das war mir völlig entgangen. Das Problem > dabei ist, dass VSS leider nicht mit dem GND-Potential der restlichen > Schaltung verbunden ist, an der auch Logic common hängt. > > Das verkompliziert die ganze Sache erheblich. 3,3V-Logik kann man da > garnicht direkt dranhängen, ganz sicher jedenfalls nicht, wenn deren > Bezugspotential an Logic common ist bzw. sein soll. > > Also nix mit den beiden einfachen Drahtbrücken statt U2. Da müssen > Pegelwandler her. Z.B. solche, wie einer im POR-Signal bereits verbaut > ist (Q4 und umliegendes Hühnerfutter auf Seite 2 des Schaltplanes). Wie > konnte ich den denn nur übersehen?! > > Also: Drahtbrücken wieder raus und statt dessen zwei Pegelwandler rein. > Man könnte z.B. die Schaltung rund um Q4 dafür doppelt nachbauen. c-hater, mach mich nicht schwach. Hab schon den Whiskey kaltgestellt weil ich dachte, den Endgegner bis heute Abend erschlagen zu haben. Wir brauchen also - VSS (Common/Minus/Ground) sowie - VDD (Plus/Current/Schießmichtot) Wie können wir die beiden Signale zueinander "anpassen"? Was wäre, wenn ich mir sowohl +5V vom Arduino hole und das direkt an VDD an U1 anschließe als auch GND vom Arduino hole und das direkt an VSS an U1 anschließe? Wäre das Problem dann weg? Alternativ ganz normal +8V vom Netzteil das dann umgewandelt als +5V bei VDD landet und nur das Ground vom Arduino an VSS? Alternativ sowohl +8V als auch Ground wie im Original vom Netzteil? Was hat es mit dieser verdammten 3,3V-Logik auf sich? Betrifft das diese SPI-Technik? Dann arbeiten wir eben mit 5V-Logik. Hiermit: https://www.arduino.cc/en/Reference/DigitalWrite https://www.arduino.cc/en/Reference/ShiftOut
Phil H. schrieb: > Wir brauchen also > - VSS (Common/Minus/Ground) sowie > - VDD (Plus/Current/Schießmichtot) Nein. Weder das eine noch das andere eignet sich dazu, als Massebezug für einen Arduino zu dienen. > Was hat es mit dieser verdammten 3,3V-Logik auf sich? Weniger wichtig. Bei 5V-Logik ergibt sich genau das gleiche Problem. > Wie können wir die beiden Signale zueinander "anpassen"? Durch zwei zusätzliche Pegelwandler, wie schon im Posting weiter oben geschrieben. Das wäre die einzig saubere Lösung. Ist ja auch nicht weiter wild, das sind doch insgesamt nur zehn Bauelemente, alles Standardkram. Sowas kann man in einer Viertelstunde auf Lochraster oder frei verdrahtet zusammenlöten. Man könnte alternativ auch mit einer "virtuellen Masse" tricksen, aber sowas ist gefährlich für alle beteiligten ICs und würde dann im übrigen erfordern, den vorhandenen Pegelwandler für das POR-Signal zu entfernen, denn der würde dann wiederum stören.
c-hater schrieb: > Durch zwei zusätzliche Pegelwandler, wie schon im Posting weiter oben > geschrieben. Das wäre die einzig saubere Lösung. > Ist ja auch nicht weiter wild, das sind doch insgesamt nur zehn > Bauelemente, alles Standardkram. Sowas kann man in einer Viertelstunde > auf Lochraster oder frei verdrahtet zusammenlöten. > > Man könnte alternativ auch mit einer "virtuellen Masse" tricksen, aber > sowas ist gefährlich für alle beteiligten ICs und würde dann im übrigen > erfordern, den vorhandenen Pegelwandler für das POR-Signal zu entfernen, > denn der würde dann wiederum stören. Ich bilde mir ein, das Problem verstanden zu haben. Habe +8VDC sowie Ground des original Netzteils an die jeweiligen Pins an Stecker J2 angeschlossen und habe dann die Spannung an Pin 18 (VDD), 20 (POR) sowie 21 und 22 (DATA und SCLK) gemessen: VDD = -9,6V (typisch laut Datenblatt -11,5V bis -8,5) POR = -9,6V (typisch laut Datenblatt für "logic 0": Wert von "VDD" bis -5) DATA = 3,9V (typisch "VDD" bis 0,8) SCLK = 3,0V (typisch "VDD" bis 0,8) Mit Ground vom Arduino landen VDD und POR bei exakt -10V, DATA und SCLK ändern sich nicht. ------ 10 Bauteile? OK. Bedeutet jetzt für mich, ich brauche, Transistor Q4, Widerstände R45, 46 (sind gleich) sowie R2 und Kondensator C3. - Wo hole ich die +5VDC her, die am parallel geschalteten Q4 angeschlossen sind? - Das "VDD", das hinter dem R2 hängt, ... wie ist das zu verstehen?
Phil H. schrieb: > 10 Bauteile? OK. > Bedeutet jetzt für mich, ich brauche, Transistor Q4, Widerstände R45, 46 > (sind gleich) sowie R2 und Kondensator C3. Und das alles halt doppelt, weil für zwei Signale. > - Wo hole ich die +5VDC her, die am parallel geschalteten Q4 > angeschlossen sind? Z.B. vom Emitter von Q4. Oder auch von Pin1 des U1. Oder von jedem anderen Punkt der Schaltung, wo das gleiche Potential anliegt. Da das auch an drei Pins des ehemaligen U2 anlag und du die Ein- und Ausgänge der Signale ohnehin an die ehemalige Position von U2 verdrahtest, wäre es wohl sinnvoll, das Potential dort abzunehmen. Also von Pin 4, 10 oder 14 des ehemaligen U2. > - Das "VDD", das hinter dem R2 hängt, ... wie ist das zu verstehen? Das ist das Potential an Pin18 von U1. Kannst du aber natürlich auch von dem einen Pin von R2 des vorhandene Pegelwandlers holen. Oder von jedem anderen Punkt der Schaltung, der an das gleiche Potential angeschlossen ist. Allzu viele sind das allerdings wohl nicht. Du hast die Hardware da rumliegen, musst du selber verfolgen, von wo aus du das am einfachsten zu der Position deiner neuen Pegelwandler bekommst. Am ehemaligen U2 lag das Potential aber leider nirgendwo an, also wirst du wohl hierfür einen etwas längeren Draht brauchen.
c-hater schrieb: > Phil H. schrieb: > >> 10 Bauteile? OK. >> Bedeutet jetzt für mich, ich brauche, Transistor Q4, Widerstände R45, 46 >> (sind gleich) sowie R2 und Kondensator C3. > > Und das alles halt doppelt, weil für zwei Signale. Jepp. > >> - Wo hole ich die +5VDC her, die am parallel geschalteten Q4 >> angeschlossen sind? > > Z.B. vom Emitter von Q4. Oder auch von Pin1 des U1. Oder von jedem > anderen Punkt der Schaltung, wo das gleiche Potential anliegt. Da das > auch an drei Pins des ehemaligen U2 anlag und du die Ein- und Ausgänge > der Signale ohnehin an die ehemalige Position von U2 verdrahtest, wäre > es wohl sinnvoll, das Potential dort abzunehmen. Also von Pin 4, 10 oder > 14 des ehemaligen U2. > Gute Idee. >> - Das "VDD", das hinter dem R2 hängt, ... wie ist das zu verstehen? > > Das ist das Potential an Pin18 von U1. Kannst du aber natürlich auch von > dem einen Pin von R2 des vorhandene Pegelwandlers holen. Oder von jedem > anderen Punkt der Schaltung, der an das gleiche Potential angeschlossen > ist. Allzu viele sind das allerdings wohl nicht. Du hast die Hardware da > rumliegen, musst du selber verfolgen, von wo aus du das am einfachsten > zu der Position deiner neuen Pegelwandler bekommst. Am ehemaligen U2 lag > das Potential aber leider nirgendwo an, also wirst du wohl hierfür einen > etwas längeren Draht brauchen. Habe gerade mal auf der Platine geschaut: Pin 18 von U1 ist direkt mit R2 des Pegelwandlers verbunden. Ich suche gerade die Bauteile zusammen. Ich nehme an bei den Widerständen kann man nix falsch machen, wenn die Ohm stimmen? Wie ist es bei den anderen beiden Teilen, sind die ausgesuchten Artikel für mich verwendbar? Widerstände 10kOhm: https://www.reichelt.de/1-4W-1-10-0-k-Ohm-95-3-k-Ohm/METALL-10-0K/3/index.html?&ACTION=3&LA=2&ARTICLE=11449&GROUPID=3079&artnr=METALL+10%2C0K Wid. 33kOhm: https://www.reichelt.de/1-4W-1-10-0-k-Ohm-95-3-k-Ohm/METALL-33-0K/3/index.html?&ACTION=3&LA=2&ARTICLE=11730&GROUPID=3079&artnr=METALL+33%2C0K Capacitor 0,001mF: https://www.reichelt.de/Scheiben/KERKO-1-0P/3/index.html?&ACTION=3&LA=2&ARTICLE=9258&GROUPID=3169&artnr=KERKO+1%2C0P Transistor Q4 PNP: https://www.reichelt.de/BC-Transistoren/BC-557B/3/index.html?ACTION=3&GROUPID=7206&ARTICLE=35845
Sehe gerade, dass der Capacitor 0,001mF, also gleich 1nF anstatt 1 pF braucht. Muss ich bei den Capacitors und Transistors auf den Nennspannungsbereich achten oder ist das nur eine Maximalangabe?
Phil H. schrieb: > Habe gerade mal auf der Platine geschaut: Pin 18 von U1 ist direkt mit > R2 des Pegelwandlers verbunden. Ja sicher, das war ja klar. Interessant zur Drahtlängenminimierung wäre allenfalls gewesen, wo das ansonsten noch dran geht. Aber Draht ist billig, also egal.. > Widerstände 10kOhm: > https://www.reichelt.de/1-4W-1-10-0-k-Ohm-95-3-k-Ohm/METALL > > Wid. 33kOhm: > https://www.reichelt.de/1-4W-1-10-0-k-Ohm-95-3-k-Ohm/METALL Viel zu gut. Simple Kohleschichtwiderstände reichen auch völlig aus. Die Funktion erfüllen aber natürlich auch die Metallschicht-Widerstände. > Capacitor 0,001mF: > https://www.reichelt.de/Scheiben/KERKO-1-0P/3/index.html?&ACTION=3&LA=2&ARTICLE=9258&GROUPID=3169&artnr=KERKO+1%2C0P Lass' die besser einfach ganz weg. Die machen die Pegelwandler nur so richtig schnarchlangsam. Das ist zwar gut für ein POR-Signal, wäre aber eher ungünstig für die SPI-Datenübertragung, die letztlich über die beiden Signale laufen soll. Auch ohne den Kondensator ist der Pegelwandler nicht gerade sehr schnell. Für den angestrebten Zweck sollte es aber ausreichen. > Transistor Q4 PNP: > https://www.reichelt.de/BC-Transistoren/BC-557B/3/index.html?ACTION=3&GROUPID=7206&ARTICLE=35845 Ja, geht.
c-hater schrieb: > Viel zu gut. Simple Kohleschichtwiderstände reichen auch völlig aus. Die > Funktion erfüllen aber natürlich auch die Metallschicht-Widerstände. Okay, dann würde ich jetzt neben den Transistoren "BC-557B" jeweils hiervon einen Beutel Widerstände in 33kOhm und 100kOhm nehmen: http://www.ebay.de/itm/100x-Kohleschicht-Widerstand-lose-5-0-25W-Bauform-0207-frei-wahlbar-10-Ohm-1M-/111418881779?var=&hash=item5f8e0cbd1a (Habe ja noch einige mehr Jukeboxen und Displays, die - wenn es mal richtig funktioniert - ebenfalls auf Umbau warten) >> Capacitor 0,001mF: > > Lass' die besser einfach ganz weg. Die machen die Pegelwandler nur so > richtig schnarchlangsam. Das ist zwar gut für ein POR-Signal, wäre aber > eher ungünstig für die SPI-Datenübertragung, die letztlich über die > beiden Signale laufen soll. Auch ohne den Kondensator ist der > Pegelwandler nicht gerade sehr schnell. Für den angestrebten Zweck > sollte es aber ausreichen. Ganz weglassen, ja? Gut. ----------------- Noch drei wichtige Fragen im Schnellformat: - Wie "aktiviere" ich das POR-Signal? Einmalig bei Programmbeginn den entsprechenden Pin auf "1" setzen? Die Anleitung schreibt ja "POR intializes the internal circuits of the 10937/10957 (Modellname) when power (VDD) is applied. The following conditions are established after a POR: Digit Drivers in off state, segment drivers in off state, duty cycle set to 0, digit counter set to 16, buffer pointer points to AD1 - Welche Spannung und welchen Ground werde ich schlussendlich am Stecker J2 anschließen? Ich nehme an so wie im Original? +8V vom Netzteil sowie das "Logic Common" vom Netzteil? Damit wäre die Stromversorgung komplett, da VSS sowie VDD von diesen beiden Signalen gezogen werden? - Welche Bibliothek/Technik kann ich verwenden, wenn die Wandler dann eingebaut sind? Diese ... "for communicating with devices using the Serial Peripheral Interface (SPI) Bus": https://www.arduino.cc/en/Reference/SPI (Du sagtest ja schon ich solle die MOSI- und SCLK-Pins am Arduino verwenden, deshalb gehe ich hiervon aus. Auch sagtest Du und Rufus schon, dass es sich hierbei um eine SPI-Schnittstelle handelt. Interessant wären dann hier, welcher SPI_MODE eingestellt werden muss? (0 bis 3)) ... oder evtl. auch hierüber... "use them to communicate with an external TTL serial device... uses Serial1 to communicate via TTL (5V) serial on pins 0 (RX) and 1 (TX)." https://www.arduino.cc/en/Reference/Serial ... oder auch über ganz normale I/O-Pins? https://www.arduino.cc/en/Tutorial/DigitalPins https://www.arduino.cc/en/Reference/ShiftOut
:
Bearbeitet durch User
Verdammte Hacke, in diesem Forum wird zu viel geschrieben. Nach 24 Stunden findet man den Thread auf Seite 3 wieder. Bester Mensch der Welt c-hater, bitte um Lebenszeichen.
:
Bearbeitet durch User
Okay. - die beiden Pegelwandler sind "on the fly" eingelötet. (siehe Bild) - +8VDC und Ground (Logic common) hole ich vom Netzteil, nicht vom Arduino. *Richtig?* - Ergebnisse der Messungen HINTER den Wandlern (also das, was beim Displaycontroller schlussendlich ankommt): - VDD = -10V - POR bei 0V (Digitaler Ausgangspin=LOW): 5,6V - POR bei 5V (Digitaler Ausgangspin=HIGH): -10V - DATA bei 0V: 5,6V - DATA bei 5V: -5,5V - SCLK bei 0V: 5,6V - SCLK bei 5V: -5,5V Im Displaydatenblatt im Anhang direkt auf Seite 2 steht für DATA/SCLK als Sollwerte: - für Logic 0: VDD (Min.) bis +0.8V - für Logic 1: +4V bis +5.3V *Ich nehme an, hier stimmt was noch nicht?* ------------------------- Habe unabhängig davon versucht, Text aufs Display zu bekommen. Mithilfe der Arduino-SPI-Bibliothek funktioniert gar nichts, unabhängig davon, welchen SPI_MODE (0 bis 3) und welchen Speed ich wähle.
1 | #include <SPI.h> |
2 | |
3 | |
4 | void setup() |
5 | {
|
6 | |
7 | SPI.beginTransaction(SPISettings(66000, MSBFIRST, SPI_MODE0)); |
8 | |
9 | }
|
10 | |
11 | |
12 | void loop() |
13 | {
|
14 | |
15 | SPI.transfer(11100000); |
16 | |
17 | }
|
Das Byte in der transfer-Funktion müsste das Display eigentlich einschalten. (laut Datenblatt) Benutze hier die Pins MOSI und SCLK, wie angeordnet. In der Dokumentation von Arduino ist immer noch eine Rede von einem SS-Pin (Select Slave). Sowas habe ich ja gar nicht! *Kann ich die SPI-Bibliothek überhaupt verwenden?* Bin dann von der SPI-Bibliothek weg und habe es über "normalen" Bitschrott über zwei normale Outputpins versucht:
1 | const int SCK_pin = 12; |
2 | const int MOSI_pin = 11; |
3 | |
4 | byte startval = 224; // 11100000 |
5 | |
6 | |
7 | void setup() |
8 | {
|
9 | |
10 | |
11 | pinMode(SCK_pin, OUTPUT); |
12 | pinMode(MOSI_pin, OUTPUT); |
13 | |
14 | |
15 | |
16 | for(int i=0; i<8; i++) |
17 | {
|
18 | digitalWrite(SCK_pin, HIGH); |
19 | digitalWrite(MOSI_pin, bitRead(startval, i)); |
20 | digitalWrite(SCK_pin, LOW); |
21 | }
|
22 | |
23 | |
24 | |
25 | }
|
26 | |
27 | void loop() |
28 | {
|
29 | |
30 | }
|
Damit geht das Display an! Auch lassen sich andere Buchstaben rein zufällig aufs Display zaubern, allerdings nie der Buchstabe den man erwartet. *Liegt wohl daran, dass das Display noch kein konsantes Clock-Signal empfängt?* ----- Bitte helft mir! Phil
:
Bearbeitet durch User
Phil H. schrieb: > - die beiden Pegelwandler sind "on the fly" eingelötet. (siehe Bild) Naja, elegant geht anders. ;o) > - +8VDC und Ground (Logic common) hole ich vom Netzteil, nicht vom > Arduino. *Richtig?* Richtig. > - Ergebnisse der Messungen HINTER den Wandlern (also das, was beim > Displaycontroller schlussendlich ankommt): > > - VDD = -10V > > - POR bei 0V (Digitaler Ausgangspin=LOW): 5,6V > - POR bei 5V (Digitaler Ausgangspin=HIGH): -10V Bis hierhin gut. > - DATA bei 0V: 5,6V > - DATA bei 5V: -5,5V > > - SCLK bei 0V: 5,6V > - SCLK bei 5V: -5,5V Nicht so gut, aber noch in den Specs. Ursache ist wahrscheinlich, daß die Versorgung auf der Displayplatine zuviel Spannung liefert. Miss mal zwischen VDD und +5V. Das sollten 15V sein, sind aber vermutlich deutlich mehr, so knapp 16V. Wenn sich das bestätigt: Z-Diode D2 gegen ein Exemplar tauschen, was wirklich 15V Z-Spannung hat. > Mithilfe der Arduino-SPI-Bibliothek funktioniert gar nichts, unabhängig > davon, welchen SPI_MODE (0 bis 3) und welchen Speed ich wähle. Das liegt möglicherweise daran, dass die Pegelwandler erstens invertieren und zweitens ziemlich langsam sind. Gegen das Invertieren musst du SPI-Mode 3 verwenden und außerdem die zu sendenden Daten invertieren. Zusätzlich erstmal mit einer sehr geringen SPI-Geschwindigkeit anfangen, dann sollte es eigentlich funktionieren. Wenn du positive Ergebnisse hast, kannst du mit der SPI-Geschindigkeit dann immer noch schrittweise hochgehen, so lange es halt stabil funktioniert. > SPI.transfer(11100000); Huch? Schreibt man neuerdings in C++ so Binärzahlen? Doch wohl eher nicht. Bei der Zeile hätte der Compiler zumindest eine Warnung produzieren müssen...
Phil H. schrieb: > Das Byte in der transfer-Funktion müsste das Display eigentlich > einschalten. (laut Datenblatt) Nein. Mal abgesehen mal von dem im vorigen Posting bereits erwähnten Zeug (Invertieren und falscher Wert durch falsche Schreibweise der Binärzahl) stimmt es nicht, dass der Wert das Display einschalten täte. Im Gegenteil setzt du damit den Duty-Cycle auf 0, sprich: du machst das Display aus. Das ist übrigens genau der Standardwert nach PowerOn-Reset...
Danke, du Granate, du lebst ja doch noch! c-hater schrieb: > Nicht so gut, aber noch in den Specs. Ursache ist wahrscheinlich, daß > die Versorgung auf der Displayplatine zuviel Spannung liefert. > Miss mal zwischen VDD und +5V. Das sollten 15V sein, sind aber > vermutlich deutlich mehr, so knapp 16V. Wenn sich das bestätigt: Z-Diode > D2 gegen ein Exemplar tauschen, was wirklich 15V Z-Spannung hat. Messung zwischen VDD und +5V ergibt 15,3V oder -15,3V! (je nachdem wie herum ich die Messspitzen dranhalte.) Ich versteh nicht, wieso die Werte von DATA und SCLK noch in den Specs liegen? Laut Specs muss doch für DATA und SCLK für eine Logic 0 eine Spannung von VDD(= -10V) bis +0.8V herrschen? Für eine Logic 1 eine Spannung von +4,3V bis +5V? Deshalb kam es mir so vor, als wären meine resultierenden Spannungswerte genau falsch herum? Den negativen Wert von -5,5V bräuchte ich bei der Logic 0, den positiven von 5,6V bei der Logic 1? >> Mithilfe der Arduino-SPI-Bibliothek funktioniert gar nichts, unabhängig >> davon, welchen SPI_MODE (0 bis 3) und welchen Speed ich wähle. > > Das liegt möglicherweise daran, dass die Pegelwandler erstens > invertieren und zweitens ziemlich langsam sind. Gegen das Invertieren > musst du SPI-Mode 3 verwenden und außerdem die zu sendenden Daten > invertieren. Zusätzlich erstmal mit einer sehr geringen > SPI-Geschwindigkeit anfangen, dann sollte es eigentlich funktionieren. > Wenn du positive Ergebnisse hast, kannst du mit der SPI-Geschindigkeit > dann immer noch schrittweise hochgehen, so lange es halt stabil > funktioniert. Okay. "Zu sendende Daten invertieren" würde bedeuten, 255-x? >> SPI.transfer(11100000); > > Huch? Schreibt man neuerdings in C++ so Binärzahlen? Doch wohl eher > nicht. Bei der Zeile hätte der Compiler zumindest eine Warnung > produzieren müssen... Die Funktion verlangt nach nem Byte. Dachte also, das sähe dann so aus. Wie heißt es richtig?
Phil H. schrieb: > Okay. "Zu sendende Daten invertieren" würde bedeuten, 255-x? Kann man machen. Man kann aber auch einfach den Operator verwenden, den C++ für's Invertieren vorsieht: "~". > Wie heißt es richtig? 0b11100000 bzw. mit Invertierung: ~0b11100000
c-hater schrieb: > Phil H. schrieb: > >> Okay. "Zu sendende Daten invertieren" würde bedeuten, 255-x? > > Kann man machen. Man kann aber auch einfach den Operator verwenden, den > C++ für's Invertieren vorsieht: "~". > >> Wie heißt es richtig? > > 0b11100000 > > bzw. mit Invertierung: > > ~0b11100000 Okay. Wird eingearbeitet. Wie verhält sich das mit den Spannungs-Ist- und Sollwerten für DATA/SCLK, die ich in meinem letzten Beitrag erwähnt habe? 15,3V okay?
1 | #include <SPI.h> |
2 | |
3 | const char data = 'A'; |
4 | |
5 | void setup() { |
6 | SPI.beginTransaction(SPISettings(4000, MSBFIRST, SPI_MODE3)); |
7 | |
8 | |
9 | SPI.transfer(~B11100111); |
10 | SPI.transfer(~0b11100111); |
11 | |
12 | SPI.transfer(~0b00000001); |
13 | SPI.transfer(~B00000001); |
14 | }
|
15 | |
16 | void loop() { |
17 | SPI.transfer(~byte(data)); |
18 | }
|
Nichts passiert! "With most SPI devices, after SPI.beginTransaction(), you will write the slave select pin LOW, call SPI.transfer() any number of times to transfer data, then write the SS pin HIGH, and finally call SPI.endTransaction(). " KANN das überhaupt funktionieren, ohne diesen Slave Select Pin?
Phil H. schrieb: >
1 | > #include <SPI.h> |
2 | >
|
3 | > const char data = 'A'; |
4 | >
|
5 | > void setup() { |
6 | > SPI.beginTransaction(SPISettings(4000, MSBFIRST, SPI_MODE3)); |
7 | >
|
8 | >
|
9 | > SPI.transfer(~B11100111); |
10 | > SPI.transfer(~0b11100111); |
11 | >
|
12 | > SPI.transfer(~0b00000001); |
13 | > SPI.transfer(~B00000001); |
14 | > } |
15 | >
|
16 | > void loop() { |
17 | > SPI.transfer(~byte(data)); |
18 | > } |
19 | >
|
> > Nichts passiert! Was soll da auch passieren? Das hier > SPI.transfer(~B11100111); und das hier > SPI.transfer(~B00000001); wird sich doch wohl nichtmal übersetzen lassen, oder? > KANN das überhaupt funktionieren, ohne diesen Slave Select Pin? Natürlich. Dieser Slave ist "allways on", braucht also kein slave select. Was er allerdings braucht, ist ein POR, bevor du anfängst auf ihm rumzuschreiben. Jedenfalls, wenn du Wert auf reproduzierbare Ergebnisse legst. Und die "Dauerbeschallung" in loop() ist wohl auch nicht der Weisheit letzter Schluss...
c-hater schrieb: > Das hier > >> SPI.transfer(~B11100111); > > und das hier > >> SPI.transfer(~B00000001); > > wird sich doch wohl nichtmal übersetzen lassen, oder? Laut https://www.arduino.cc/en/Reference/Byte ist das der Formatierungscode für Binary. Habe halt beide mal unabhängig voneinander ausprobiert. >> KANN das überhaupt funktionieren, ohne diesen Slave Select Pin? > > Natürlich. Dieser Slave ist "allways on", braucht also kein slave > select. Okay! > Was er allerdings braucht, ist ein POR, bevor du anfängst auf ihm > rumzuschreiben. Jedenfalls, wenn du Wert auf reproduzierbare Ergebnisse > legst. Und die "Dauerbeschallung" in loop() ist wohl auch nicht der > Weisheit letzter Schluss... "Dauerbeschallung" ist gut. :D Ja, ... dieses sagenumwobene POR. Wie und wo aktiviere ich das? Einmalig im void setup oder dauerhaft im loop? Irgendeinen Outputpin des Micro mit dem POR des Displays verbinden und diesen einmalig oder dauerhaft auf HIGH setzen?
Phil H. schrieb: > Laut https://www.arduino.cc/en/Reference/Byte ist das der > Formatierungscode für Binary. Spannend. Ein Grund mehr, den Arduino-Dreck nicht zu mögen... > Ja, ... dieses sagenumwobene POR. Wie und wo aktiviere ich das? Einmalig > im void setup Ja, klar. > Irgendeinen Outputpin des Micro > mit dem POR des Displays verbinden und diesen einmalig oder dauerhaft > auf HIGH setzen? Genau. Auf die Zeiten achten, stehen im Datenblatt des 10937. Übrigens auch bezüglich der Mindestzeit zwischen zwei Kommandoworten.
c-hater schrieb: > Phil H. schrieb: > >> Laut https://www.arduino.cc/en/Reference/Byte ist das der >> Formatierungscode für Binary. > > Spannend. Ein Grund mehr, den Arduino-Dreck nicht zu mögen... > >> Ja, ... dieses sagenumwobene POR. Wie und wo aktiviere ich das? Einmalig >> im void setup > > Ja, klar. > >> Irgendeinen Outputpin des Micro >> mit dem POR des Displays verbinden und diesen einmalig oder dauerhaft >> auf HIGH setzen? > > Genau. Auf die Zeiten achten, stehen im Datenblatt des 10937. Übrigens > auch bezüglich der Mindestzeit zwischen zwei Kommandoworten. Laut Datenblatt Seite 3 müssen zwischen zwei "Data words" mindestens 40us liegen. "Data word" = 1 Byte = 8 Bit? Laut Datenblatt: POR erst aktiviern nachdem VDD mindestens 100us anliegt und das POR-Signal ebenfalls mindestens 100us halten? Falls beides richtig, wie mache ich das im Code? Über delay(0.1); ?
Okay, mit der SPI-Bib. funktioniert nach wie vor gar nichts.
1 | #include <SPI.h> |
2 | |
3 | const int por = 12; |
4 | |
5 | const char data = 'A'; |
6 | |
7 | void setup() { |
8 | pinMode(por, OUTPUT); |
9 | |
10 | digitalWrite(por, HIGH); |
11 | delayMicroseconds(100); |
12 | digitalWrite(por, LOW); |
13 | delayMicroseconds(100); |
14 | |
15 | SPI.beginTransaction(SPISettings(20000, MSBFIRST, SPI_MODE3)); |
16 | |
17 | SPI.transfer(~B00000001); |
18 | |
19 | }
|
20 | |
21 | void loop() { |
22 | |
23 | SPI.transfer(~byte(data)); |
24 | }
|
Hiermit schaltet sich das Display ein, danach werden nacheinander die letzten 5 Anzeigstellen ausgeblendet und an Anzeigestelle 9 erscheint danach ein Fragezeichen. :D :D :D Was eine Scheiße.
1 | int por = 12; |
2 | int data = 10; |
3 | int sclk = 11; |
4 | |
5 | const char zeichen = 'A'; |
6 | |
7 | int sendval = int(zeichen); |
8 | |
9 | |
10 | void setup() |
11 | {
|
12 | pinMode(por, OUTPUT); |
13 | pinMode(data, OUTPUT); |
14 | pinMode(sclk, OUTPUT); |
15 | |
16 | digitalWrite(sclk, LOW); |
17 | |
18 | |
19 | digitalWrite(por, LOW); |
20 | delayMicroseconds(105); |
21 | digitalWrite(por, HIGH); |
22 | delayMicroseconds(105); |
23 | |
24 | |
25 | |
26 | }
|
27 | |
28 | |
29 | void loop() |
30 | {
|
31 | |
32 | |
33 | for(int i=8; i>=0; i--) // MSB zuerst |
34 | {
|
35 | digitalWrite(sclk, HIGH); |
36 | delayMicroseconds(3); |
37 | digitalWrite(data, bitRead(sendval, i)); |
38 | digitalWrite(sclk, LOW); |
39 | delayMicroseconds(3); |
40 | }
|
41 | |
42 | delay(5000); |
43 | }
|
Phil H. schrieb: > danach ein Fragezeichen. :D :D :D Was eine Scheiße. Min. 200ns vor der fallenden Flanke, min. 100ns nach der fallenden Flanke. Bei dir kommt (wahrscheinlich) die fallende Flanke viel zu schnell. Probiere es erst mal so:
1 | for(int i=7; i>=0; i--) // MSB zuerst |
2 | {
|
3 | digitalWrite(sclk, HIGH); |
4 | digitalWrite(data, bitRead(sendval, i)); |
5 | delayMicroseconds(3); |
6 | digitalWrite(sclk, LOW); |
7 | delayMicroseconds(3); |
8 | }
|
Wenn es klappt, kann man es immer schneller machen. P.S. Bei mir hat ein Byte 8 bits von 7..0 und bei dir ? Ich war so frei und habe es oben entsprechend geändert. Könnte sein, dass dein Display es auch so sieht, vielleicht klappt es deswegen nicht ? ;)
:
Bearbeitet durch User
Marc V. schrieb: > Phil H. schrieb: >> danach ein Fragezeichen. :D :D :D Was eine Scheiße. > > Min. 200ns vor der fallenden Flanke, min. 100ns nach der fallenden > Flanke. > Bei dir kommt (wahrscheinlich) die fallende Flanke viel zu schnell. > Probiere es erst mal so: >
1 | > for(int i=7; i>=0; i--) // MSB zuerst |
2 | > { |
3 | > digitalWrite(sclk, HIGH); |
4 | > digitalWrite(data, bitRead(sendval, i)); |
5 | > delayMicroseconds(3); |
6 | > digitalWrite(sclk, LOW); |
7 | > delayMicroseconds(3); |
8 | > } |
9 | >
|
> > Wenn es klappt, kann man es immer schneller machen. > > P.S. > Bei mir hat ein Byte 8 bits von 7..0 und bei dir ? > Ich war so frei und habe es oben entsprechend geändert. Hey, da schaltet sich ja doch noch jemand ein. Danke! Mit deinem Code passiert gar nichts, was an der 7 anstatt der 8 im Schleifenzähler liegt. Wenn ich die 7 wieder zur 8 ändere, passiert fast das gleiche was ich oben beschrieben habe, nur dass jetzt ein Wechsel zwischen dem Anzeigen und Ausblenden der letzten fünf Anzeigestellen stattfindet. Natürlich hast du Recht, da muss selbstverständlich trotzdem die 7 hin. Aber wo ist der Fehler? Liegt es vielleicht an dem Invertieren der Spannungswandler? Oder an sendval, was ja bei einem A gleich "01000001" sein müsste. Wenn laut Datenblatt das C-Bit (Bit 7) eine 1 ist, kommt es nicht zur Anzeige des Wertes auf dem Display sondern es wird eine Controlfunktion angesteuert. (Datenblatt Table 1)
Update! Erste Regelmäßigkeit zu erkennen: Hiermit wird das Display konstant, also von Anzeigestelle 1 bis 16 mit Nullen (0) gefüllt. Habe jetzt die Schleife rumgedreht (er müsste jetzt eigentlich hinten anfangen zu lesen, laut Beschreibung der Funktion BitRead: https://www.arduino.cc/en/Reference/BitRead ... was er auch macht. Habe mir die Schleife per println ausgeben lassen und er liest das Byte genau andersherum ein: 00011111 --- Seht ihr den Zusammenhang zwischen meinem Eingabebyte und der Ausgabe der Nullen? Ich sehe ihn nicht! Auch nicht durch Invertieren?! Laut Datenblatt wird eine Null folgendermaßen "gemacht": 0X110000 X = irrelevant
1 | byte suff = B11111000; |
2 | |
3 | void loop() |
4 | {
|
5 | |
6 | |
7 | for(int i=0; i<=7; i++) |
8 | {
|
9 | digitalWrite(sclk, HIGH); |
10 | digitalWrite(data, bitRead(suff, i)); |
11 | |
12 | delayMicroseconds(3); |
13 | digitalWrite(sclk, LOW); |
14 | delayMicroseconds(3); |
15 | }
|
16 | |
17 | delay(5000); |
18 | }
|
Nachtrag:
1 | byte suff = B11110000; |
Hiermit haut er mir loopweise das komplette Display mit Achtern (8) voll. 8 laut Datasheet: 0X111000
:
Bearbeitet durch User
Phil H. schrieb: > Aber wo ist der Fehler? Liegt es vielleicht an dem Invertieren der > Spannungswandler? Oder an sendval, was ja bei einem A gleich "01000001" > sein müsste. Keine Ahnung, aber in DaBla (LSB/MSB Timing) ist von erstem LSB bis zu zweitem LSB min.120us angegeben. Abzüglich 40us Pause ergibt das 80us pro Byte oder 10us pro bit. Bei dir läuft das alles schneller ab. > Hiermit wird das Display konstant, also von Anzeigestelle 1 bis 16 mit > Nullen (0) gefüllt. Habe jetzt die Schleife rumgedreht (er müsste jetzt > eigentlich hinten anfangen zu lesen, laut Beschreibung der Funktion Bist du sicher, dass das eine Null ist ?
1 | byte suff = B11111000; |
Wenn du LSB zuerst rausschickst, kriegt dein Display in Wirklichkeit 0b00001111 was ja laut DaBla O (Buchstabe - Otto) ist. In so einem Fall würde ich erstmal Timing strecken, in DaBla steht 20us max. als SCLK On Time, ich würde 7us ON und 7us OFF nehmen. Danach 0b00111100 senden, es ist Zeichen "<" und egal wie man es sendet, es kommt immer als "<" an. Wenn es klappt, mit "B" versuchen (0b00000010) und je nach Resultat erst danach weitermachen.
Danke! Marc V. schrieb: > > Keine Ahnung, aber in DaBla (LSB/MSB Timing) ist von erstem LSB bis zu > zweitem LSB min.120us angegeben. Abzüglich 40us Pause ergibt das 80us > pro Byte oder 10us pro bit. Bei dir läuft das alles schneller ab. > >> Hiermit wird das Display konstant, also von Anzeigestelle 1 bis 16 mit >> Nullen (0) gefüllt. Habe jetzt die Schleife rumgedreht (er müsste jetzt >> eigentlich hinten anfangen zu lesen, laut Beschreibung der Funktion > > Bist du sicher, dass das eine Null ist ? >
1 | > byte suff = B11111000; |
2 | >
|
> Wenn du LSB zuerst rausschickst, kriegt dein Display in Wirklichkeit > 0b00001111 was ja laut DaBla O (Buchstabe - Otto) ist. Könnte auch ein O (Otto) sein. Denka aber eher Null. Es lässt sich imho absolut nichts ableiten, denn... > In so einem Fall würde ich erstmal Timing strecken, in DaBla steht > 20us max. als SCLK On Time, ich würde 7us ON und 7us OFF nehmen. > Danach 0b00111100 senden, es ist Zeichen "<" und egal wie man es > sendet, es kommt immer als "<" an. > Wenn es klappt, mit "B" versuchen (0b00000010) und je nach Resultat > erst danach weitermachen. ... mit deinen beiden vorgeschlagenen Bytes für "<" bzw. "B" passiert wieder gar nichts! Das Display bleibt einfach tot. Aktueller Code:
1 | int por = 12; |
2 | int data = 10; |
3 | int sclk = 11; |
4 | |
5 | byte suff = 0b00000010; |
6 | |
7 | void setup() |
8 | {
|
9 | pinMode(por, OUTPUT); |
10 | pinMode(data, OUTPUT); |
11 | pinMode(sclk, OUTPUT); |
12 | |
13 | |
14 | digitalWrite(sclk, LOW); |
15 | digitalWrite(por, LOW); |
16 | |
17 | delayMicroseconds(105); |
18 | digitalWrite(por, HIGH); |
19 | delayMicroseconds(105); |
20 | }
|
21 | |
22 | |
23 | void loop() |
24 | {
|
25 | |
26 | |
27 | for(int i=0; i<=7; i++) // liest LSB zuerst ein! |
28 | {
|
29 | digitalWrite(sclk, HIGH); |
30 | digitalWrite(data, bitRead(suff, i)); |
31 | delayMicroseconds(7); |
32 | digitalWrite(sclk, LOW); |
33 | delayMicroseconds(15); |
34 | }
|
35 | |
36 | delay(5000); |
37 | }
|
byte = B11111000 => alles voller Nullen/Ottos (0)/(O) byte = B11110000 => alles voller Achter (8)
:
Bearbeitet durch User
Phil H. schrieb: > Könnte auch ein O (Otto) sein. Denka aber eher Null. Es lässt sich imho > absolut nichts ableiten, denn... Wie denn das ? Null hat einen Querstrich und Otto nicht. Phil H. schrieb: > ... mit deinen beiden vorgeschlagenen Bytes für "<" bzw. "B" passiert > wieder gar nichts! Das Display bleibt einfach tot. > byte = B11111000 => alles voller Nullen/Ottos (0)/(O) > byte = B11110000 => alles voller Achter (8) Dann stimmt etwas nicht mit SCLK und DATA Leitungen, wahrscheinlich mit SCLK. Versuch es mit 100 Ohm Widerstand.
Marc V. schrieb: > Phil H. schrieb: >> Könnte auch ein O (Otto) sein. Denka aber eher Null. Es lässt sich imho >> absolut nichts ableiten, denn... > > Wie denn das ? > Null hat einen Querstrich und Otto nicht. Hast Recht, am Querstrich kann man es erkennen. Ja, Querstrich vorhanden. Sind also Nullen! > Phil H. schrieb: >> ... mit deinen beiden vorgeschlagenen Bytes für "<" bzw. "B" passiert >> wieder gar nichts! Das Display bleibt einfach tot. >> byte = B11111000 => alles voller Nullen/Ottos (0)/(O) >> byte = B11110000 => alles voller Achter (8) > > Dann stimmt etwas nicht mit SCLK und DATA Leitungen, wahrscheinlich > mit SCLK. > Versuch es mit 100 Ohm Widerstand. Hmm. Wo soll ich denn jetzt einen 100 Ohm Widerstand herzaubern? Habe 10kOhm und 33kOhm im Angebot. Den Widerstand einfach in die Leitung von SCLK einlöten, vor oder hinter dem Pegelwandler?
Phil H. schrieb: > Hmm. Wo soll ich denn jetzt einen 100 Ohm Widerstand herzaubern? Habe > 10kOhm und 33kOhm im Angebot. Schlecht. Oder du hast 100 Stück davon und das bißchen löten macht dir nichts aus... Hast du irgendetwas mit LEDs was du ausschlachten kannst, da sind meistens 100 - 300 Ohm drin ? > Den Widerstand einfach in die Leitung von > SCLK einlöten, vor oder hinter dem Pegelwandler? Hinter dem. DATA ist meistens unkritisch, CLOCK dagegen nicht - saubere und steile Flanken sind ein absolutes MUSS. P.S. Und nicht versuchen, schlauer als der Hersteller zu sein - wenn es im DaBla "MSB first" steht, dann mach das auch so.
:
Bearbeitet durch User
Marc V. schrieb: > Phil H. schrieb: >> Hmm. Wo soll ich denn jetzt einen 100 Ohm Widerstand herzaubern? Habe >> 10kOhm und 33kOhm im Angebot. > > Schlecht. > Oder du hast 100 Stück davon und das bißchen löten macht dir nichts > aus... > Hast du irgendetwas mit LEDs was du ausschlachten kannst, da sind > meistens 100 - 300 Ohm drin ? Habe nichts mit LEDs. Hätte aber die gleiche Displayplatine nochmal, wo ja u.a. auch 100 Ohm-Widerstände drauf sind. Könnte ja testweise einen davon anzapfen? Oder muss der Widerstand dafür ausgebaut werden damit sich das Signal nicht überall sonst in der Platine "verteilt"? Edit: Habe eine alte Platine gefunden, dort ist ein 100er drauf. Den baue ich heut Mittag aus. >> Den Widerstand einfach in die Leitung von >> SCLK einlöten, vor oder hinter dem Pegelwandler? > > Hinter dem. > DATA ist meistens unkritisch, CLOCK dagegen nicht - saubere und steile > Flanken sind ein absolutes MUSS. Okay! Kann es denn rein von der Logik her sein, dass das Problem nur bei bestimmten Bitfolgen auftritt? Wir haben ja jetzt "genügend" Zeitdifferenz nach den Bits eingestellt. Die verschiedenen Taktimpulse die durch die verschiedenen Bitfolgen generiert werden sind doch sogar noch kürzer, oder? > P.S. > Und nicht versuchen, schlauer als der Hersteller zu sein - wenn es im > DaBla "MSB first" steht, dann mach das auch so. Ja. In meinem expliziten Fall bedeutet das also, die Schleife wieder von hinten (i=7) durchlaufen zu lassen?
:
Bearbeitet durch User
Phil H. schrieb: > Okay! Kann es denn rein von der Logik her sein, dass das Problem nur bei > bestimmten Bitfolgen auftritt? Wir haben ja jetzt "genügend" Theoretisch nein. Deswegen muss ja auch DATA eine Mindestzeit anliegen bevor der CLOCK seinen Zustand ändert und auch eine gewisse Zeit danach unverändert bleiben. Es kann aber auch sein, dass die beiden sich gegenseitig beeinflussen, deswegen kann auch ein Versuch mit Abschirmung oder zusätzlicher GND Leitung zwischen CLOCK und DATA bestimmt nicht schaden. Phil H. schrieb: > Ja. In meinem expliziten Fall bedeutet das also, die Schleife wieder von > hinten (i=7) durchlaufen zu lassen? Von vorne, von hinten... Kann sehr verwirrend sein, sende MSB zuerst.
Okay. Werde das wie gesagt nachher gleich ausprobieren. 100 Ohm-Widerstand in die Clockleitung. Falls das nicht funktioniert müsstest du mir den Versuch mit Abschirmung und der Groundleitung nochmal etwas genauer erklären. An dem Invertieren der Spannungen durch die Wandler UND/ODER an falschen Spannungswerten kann es nicht liegen, nein? "Von vorne, von hinten... Kann sehr verwirrend sein, sende MSB zuerst." Möchte ich ja. Wenn die Funktion bitRead zuerst das Bit 0 ausliest, wäre das ja nach meinem Wissensstand "LSB".
:
Bearbeitet durch User
Phil H. schrieb: > An dem Invertieren der Spannungen durch die Wandler UND/ODER an falschen > Spannungswerten kann es nicht liegen, nein? LOL. Es kann sehr wohl an beiden liegen, nur kann man das erst mit Oszi feststellen. Du hast ja keinen, also gehe erst mal methodisch vor und schliesse mögliche Fehlerursachen eine nach der anderen aus. Phil H. schrieb: > Wenn die Funktion bitRead zuerst das Bit 0 ausliest, wäre das ja nach > meinem Wissensstand "LSB". Ja. Schleifenzähler von 7 bis 0 laufen lassen.
:
Bearbeitet durch User
Okay. - Widerstand 100 Ohm in die Clockleitung nach Pegelwandler eingelötet. - Schleifenzähler von 7 nach 0. (MSB) Ergebnis bleibt leider gleich, siehe Code. Display wird entweder mit Nullen (Variable suff) oder Achtern (Variable suff2) gefüllt.
1 | int por = 12; |
2 | int data = 10; |
3 | int sclk = 11; |
4 | |
5 | int suff = 31; // 31 = 0b00011111, laut Datenblatt Bindestrich (-), ergibt aber auf Display Null (0) |
6 | |
7 | int suff2 = 15; // 15 = 0b00001111, laut Datenblatt Otto (O), ergibt aber auf Display Acht (8) |
8 | |
9 | void setup() |
10 | {
|
11 | pinMode(por, OUTPUT); |
12 | pinMode(data, OUTPUT); |
13 | pinMode(sclk, OUTPUT); |
14 | |
15 | digitalWrite(sclk, LOW); |
16 | |
17 | delayMicroseconds(150); |
18 | digitalWrite(por, HIGH); |
19 | delayMicroseconds(150); |
20 | }
|
21 | |
22 | |
23 | void loop() |
24 | {
|
25 | |
26 | for(int i=7; i>=0; i--) // MSB zuerst! |
27 | {
|
28 | digitalWrite(sclk, HIGH); |
29 | |
30 | digitalWrite(data, bitRead(suff2, i)); |
31 | |
32 | delayMicroseconds(20); |
33 | digitalWrite(sclk, LOW); |
34 | |
35 | delayMicroseconds(20); |
36 | }
|
37 | |
38 | delay(5000); |
39 | }
|
Kann ich mit meinem Messgerät noch irgendeine sinnvolle Prüfungsmessung am Widerstand/an den Leitungen durchführen, mit der wir das Problem erkennen könnten? Wie war das mit der/den Groundleitung(en)? Von wo nach wo muss ich diese legen? Besten Dank.
:
Bearbeitet durch User
Es funktionieren nur ganz bestimmte Zahlen bzw. Bitfolgen - und diese werden dann falsch ausgegeben. Zusätzlich zu den oberen beiden "funktionieren" noch: - int 43 / 0b00101011, laut Datenblatt ergibt es ein Plus (+), ergibt aber einen Stern (*) welcher normal mit 0b00101010 erzeugt wird. Also gar nicht mal so weit entfernt! - int 47 /0b00101111, laut DB ein Backslash, ergibt aber eine Klammer links: ( ...welche normal mit 0b00101000 erzeugt wird.
Phil H. schrieb:
[...]
Versuch mal das:
1 | int por = 12; |
2 | int data = 10; |
3 | int sclk = 11; |
4 | |
5 | void DisplayOut(byte outdata) |
6 | {
|
7 | byte mask = 0b10000000; |
8 | |
9 | delayMicroseconds(4000); |
10 | while (mask) |
11 | {
|
12 | delayMicroseconds(10); |
13 | digitalWrite(sclk, LOW); |
14 | if (mask & outdata) |
15 | {
|
16 | digitalWrite(data, LOW); |
17 | }
|
18 | else
|
19 | {
|
20 | digitalWrite(data, HIGH); |
21 | }
|
22 | delayMicroseconds(20); |
23 | digitalWrite(sclk, HIGH); |
24 | mask = mask >> 1; |
25 | }
|
26 | }
|
27 | |
28 | void setup() |
29 | {
|
30 | pinMode(por, OUTPUT); |
31 | pinMode(data, OUTPUT); |
32 | pinMode(sclk, OUTPUT); |
33 | |
34 | digitalWrite(sclk, HIGH); |
35 | |
36 | delayMicroseconds(10000); |
37 | digitalWrite(por, LOW); |
38 | delayMicroseconds(10000); |
39 | digitalWrite(por, HIGH); |
40 | |
41 | DisplayOut(0b11000000); //Digits=16 |
42 | DisplayOut(0b11101111); //Duty=15 |
43 | DisplayOut(0b10101111); //Start bei AD1 |
44 | |
45 | for (byte i=0; i<=15; i++) |
46 | {
|
47 | DisplayOut(i); |
48 | }
|
49 | }
|
50 | |
51 | |
52 | void loop() |
53 | {
|
54 | //absichtlich nix
|
55 | }
|
c-hater schrieb: > Versuch mal das: [...] Danke! Sieht gut aus. Sieht aus wie gewollt. :D Bild davon im Anhang! Text erscheint sofort komplett nach Einschalten. Am Anfang steht noch der Standardplatzhalter, das N fehlt und das O ist doppelt.
Phil H. schrieb: > Am Anfang steht noch der Standardplatzhalter Nö, das ist das '@'-Zeichen, das sollte auch so sein. Es sollten einfach die ersten 16 Zeichen des unterstützten Zeichensatzes des Displaycontrollers erscheinen. > das N fehlt und das O ist > doppelt. Ja, das ist Mist. Das O an der vorletzten Stelle hätte eigentlich ein N sein müssen. Passiert der Fehler reproduzierbar?
c-hater schrieb: > Phil H. schrieb: > >> Am Anfang steht noch der Standardplatzhalter > > Nö, das ist das '@'-Zeichen, das sollte auch so sein. Es sollten einfach > die ersten 16 Zeichen des unterstützten Zeichensatzes des > Displaycontrollers erscheinen. Ahh, okay! Stimmt, steht ja auch so im Datenblatt. >> das N fehlt und das O ist >> doppelt. > > Ja, das ist Mist. Das O an der vorletzten Stelle hätte eigentlich ein N > sein müssen. Passiert der Fehler reproduzierbar? Habe den Code mehrmals neu auf den Arduino geladen (ich kenne bisher sonst keine andere Variante das Programm einfach neu von vorne zu starten) und beim zweiten Mal hat anstatt dem N das J gefehlt. Danach hat die Buchstabenfolge zwei Mal 100%ig gestimmt und in den drei Versuchen danach fehlte wieder jeweils das N. Aktuellster Versuch: Jetzt fehlen F und J.
:
Bearbeitet durch User
Phil H. schrieb: > Habe den Code mehrmals neu auf den Arduino geladen (ich kenne bisher > sonst keine andere Variante das Programm einfach neu von vorne zu > starten) Reset. Oder hat dieser Arduino nichtmal einen Reset-Taster? > und beim zweiten Mal hat anstatt dem N das J gefehlt. Danach > hat die Buchstabenfolge zwei Mal 100%ig gestimmt und in den drei > Versuchen danach fehlte wieder jeweils das N. > Aktuellster Versuch: Jetzt fehlen F und J. OK, Das Timing ist wohl noch zu eng für die Pegelkonverter. Verdoppele testweise mal alle Wartezeiten in DisplayOut.
c-hater schrieb: > Reset. Oder hat dieser Arduino nichtmal einen Reset-Taster? Doch, hat er. Hab ihn gefunden. :D Funktioniert. > OK, Das Timing ist wohl noch zu eng für die Pegelkonverter. Verdoppele > testweise mal alle Wartezeiten in DisplayOut. Habe ich gemacht. Hatte die Zeiten zunächst auf 8000, 20 und 40 verdoppelt. Gleiches Verhaltensmuster, funktionierte ein Mal. Bin dann in 20er-Schritten hoch, jetzt bei 100 und 100, aber das dürfte nach oben hin schon wieder außerhalb der Maximalwerte sein? Mit 10000, 100, 100 fehlten gerade B und F, danach nur F, zwischendurch funktionierte es ein Mal. Das kann ja nur noch eine Kleinigkeit sein!
:
Bearbeitet durch User
Phil H. schrieb: > Habe ich gemacht. Hatte die Zeiten zunächst auf 8000, 20 und 40 > verdoppelt. Gleiches Verhaltensmuster Also ist nicht zu knappes Timing ist das Problem, sondern Störungen auf den Signalen oder nicht ausreichende Steilheit der Flanken. Also entweder Hardware verbessern oder Zeiten verringern (damit die Wahrscheinlichkeit für Störungen sinkt). Musst du alleine ausprobieren, ob du mit der Verringerung des Wartezeiten zu einem akzeptablen Ergebnis kommst. Wenn nicht, muss die Hardware noch einmal geändert werden.
c-hater schrieb: > Also ist nicht zu knappes Timing ist das Problem, sondern Störungen auf > den Signalen oder nicht ausreichende Steilheit der Flanken. Also > entweder Hardware verbessern oder Zeiten verringern (damit die > Wahrscheinlichkeit für Störungen sinkt). > > Musst du alleine ausprobieren, ob du mit der Verringerung des > Wartezeiten zu einem akzeptablen Ergebnis kommst. Wenn nicht, muss die > Hardware noch einmal geändert werden. Okay. Habe jetzt einige Tests mit sämtlichen geringen Werten gemacht, wie zum Beispiel 500, 5, 5 sowie 120, 3 und 3 usw. Es fehlen tendenziell eins bis drei Zeichen. Was könnte ich zunächst noch an der Hardware ändern/hinzufügen? Die einzige Änderung ist bisher der 100 Ohm-Widerstand in der SCLK-Leitung. Kann es an meinen "on-the-fly"-Drähten/-Lötstellen liegen? Die haben zumindest alle gut Kontakt. "logarithmus" erwähnte oben was von zusätzlichen Groundleitungen. Von wo nach wo müssen die?
Phil H. schrieb: > Okay. Habe jetzt einige Tests mit sämtlichen geringen Werten gemacht, > wie zum Beispiel 500, 5, 5 sowie 120, 3 und 3 usw. Es fehlen tendenziell > eins bis drei Zeichen. Das heißt, es wird tendentiell eher schlechter als besser? Das wäre garnicht gut. > Was könnte ich zunächst noch an der Hardware ändern/hinzufügen? Die > einzige Änderung ist bisher der 100 Ohm-Widerstand in der SCLK-Leitung. Der kann auf jeden Fall wieder raus. Der spielt im Vergleich zu dem 10k-Widerstand, zu dem er in Reihe geschaltet ist, sowieso absolut keine Rolle. Ich würde erstmal versuchen, alle 10k-Widerstände in den beiden Pegelwandlern durch 1k zu ersetzen. Nach der Änderung aber die Pegel am Displaycontroller für den statischen Betriebsfall erneut kontrollieren. Da war ja sowieso irgendwas nicht ganz so, wie es eigentlich sein sollte.
c-hater schrieb: > Phil H. schrieb: > >> Okay. Habe jetzt einige Tests mit sämtlichen geringen Werten gemacht, >> wie zum Beispiel 500, 5, 5 sowie 120, 3 und 3 usw. Es fehlen tendenziell >> eins bis drei Zeichen. > > Das heißt, es wird tendentiell eher schlechter als besser? Das wäre > garnicht gut. Sehr schwer zu sagen. Habe jetzt einige Tests mit 120, 1 und 1 gemacht und am Anfang lief es gut. Die letzten Male immer wieder ein bis zwei Fehlstellen. Würde sagen dass es sich im Vergleich zu den hohen Werten im Schnitt die Waage hält. >> Was könnte ich zunächst noch an der Hardware ändern/hinzufügen? Die >> einzige Änderung ist bisher der 100 Ohm-Widerstand in der SCLK-Leitung. > > Der kann auf jeden Fall wieder raus. Der spielt im Vergleich zu dem > 10k-Widerstand, zu dem er in Reihe geschaltet ist, sowieso absolut keine > Rolle. Okay! > Ich würde erstmal versuchen, alle 10k-Widerstände in den beiden > Pegelwandlern durch 1k zu ersetzen. Nach der Änderung aber die Pegel am > Displaycontroller für den statischen Betriebsfall erneut kontrollieren. > Da war ja sowieso irgendwas nicht ganz so, wie es eigentlich sein > sollte. Ja, das kann ich versuchen. Es wäre allerdings nochmal interessant, ob ich die Wandler überhaupt richtig gebaut habe. Die Dir bekannte Schaltzeichnung sagt ja einem Laien wie mir nicht, wie genau der Transistor anzuschließen ist. (Anschlüsse E, B und C) Deswegen musste ich versuchen den Leitungsverlauf des vorhandenen POR-Pegelwandlers zu erkennen. Ich habe es so angeschlossen wie im Anhang gezeichnet.
c-hater, die geschriebene Ausgabefunktion läuft 100%ig. Habe mich mit den Zeichencodes schon arrangiert und das ganze mit Werten die von der seriellen Schnittstelle über USB kommen aktualisiert. Jetzt gilt es nur noch die Störungen zu beseitigen. 1. Habe ich die Pegelwandler wie in der Zeichnung im letzten Posting gezeigt richtig zusammengebraten? 2. Macht es Sinn neben den 1 kOhm-Widerständen auch gleich noch andere (z.B. 500 Ohm, 2 kOHm) zu bestellen, falls ich mit der 1 kOhm-Variante auch nicht nah genug an den Zielspannungswerten liege? Man müsste die richtige Variante doch eigentlich "formelmäßig" berechen können, oder? 3. Welche sind die Zielspannungswerte für den "statischen Betriebsfall"? Im Datenblatt stehen ja u.a. auch zwei Spalten bzw. Kategorien (VSS=0 sowie VSS=5)
Phil H. schrieb: > Macht es Sinn neben den 1 kOhm-Widerständen auch gleich noch andere > (z.B. 500 Ohm, 2 kOHm) zu bestellen, falls ich mit der 1 kOhm-Variante > auch nicht nah genug an den Zielspannungswerten liege? Man müsste die > richtige Variante doch eigentlich "formelmäßig" berechen können, oder? Du kannst auch einfach ein altes Radio oder ähnliches Aufschrauben und dort ein paar Widerstände zum testen rauslöten. z.B. 2x 1k parallel gibt 500Ohm, 3x || ergibt 333Ohm, ... Phil H. schrieb: > Die Dir bekannte Schaltzeichnung sagt ja einem > Laien wie mir nicht, wie genau der Transistor anzuschließen ist. > (Anschlüsse E, B und C) Siehe Anhang. Wenn E und C vertauscht sind, womöglich auch noch die polarität, arbeitet der Trasistor nicht mehr wie er soll. Der Verstärkungsfaktor geht nach unten und der Basisstrom läuft durch die Last. Wenn der Transistor als Schalter arbeiten soll, dann kann das so funktionieren. Ich denke, ich habe auch schon einiges zusammengebraten, bei dem ich die Transistoren so verkehrt eingebaut habe.
Nils S. schrieb: > Phil H. schrieb: >> Macht es Sinn neben den 1 kOhm-Widerständen auch gleich noch andere >> (z.B. 500 Ohm, 2 kOHm) zu bestellen, falls ich mit der 1 kOhm-Variante >> auch nicht nah genug an den Zielspannungswerten liege? Man müsste die >> richtige Variante doch eigentlich "formelmäßig" berechen können, oder? > > Du kannst auch einfach ein altes Radio oder ähnliches Aufschrauben und > dort ein paar Widerstände zum testen rauslöten. > z.B. 2x 1k parallel gibt 500Ohm, 3x || ergibt 333Ohm, ... Okay, auch eine Idee. > Phil H. schrieb: >> Die Dir bekannte Schaltzeichnung sagt ja einem >> Laien wie mir nicht, wie genau der Transistor anzuschließen ist. >> (Anschlüsse E, B und C) > > Siehe Anhang. Wenn E und C vertauscht sind, womöglich auch noch die > polarität, arbeitet der Trasistor nicht mehr wie er soll. Der > Verstärkungsfaktor geht nach unten und der Basisstrom läuft durch die > Last. > > Wenn der Transistor als Schalter arbeiten soll, dann kann das so > funktionieren. Ich denke, ich habe auch schon einiges zusammengebraten, > bei dem ich die Transistoren so verkehrt eingebaut habe. Danke, aber jetzt weiß ich immer noch nicht ob ich das richtig verbraten habe: Ein Blick auf meine Verbratzeichnung zeigt, dass bei mir das Eingangssignal das von rechts kommt (+5V) sowohl mit E als auch mit B verbunden ist. Der einzige Unterschied ist, dass das Signal das zu E geht zusätzlich noch durch den Widerstand R45 muss. Genauso verhält es sich mit dem Potenzial +VDC oben: Ist bei mir sowohl an E als auch an B angeschlossen. Anschluss C fungiert bei mir als "Ausgang" des Transistors und hat keinerlei Verbindung zu E oder B. Ist das richtig verbraten? Ziel ist ja wohl, die Spannung von +5V (rechts) auf etwa -10V zu bekommen. (links)
Raff ich nicht. Hab grad testweise bei einem Pegelwandler die 10kOhm-Widerstände jeweils mit zwei parallel geschalteten 10kOhm-Widerständen ausgetauscht, was ja dann in der Summe jeweils nur noch 5kOhm Widerstand geben sollte. Spannungsmäßig sowohl bei Logic 0 als auch bei Logic 1 gleiches Messergebnis wie vorher.
Phil H. schrieb: > Spannungsmäßig sowohl bei Logic 0 als auch bei Logic 1 gleiches > Messergebnis wie vorher. Das ist gut möglich. Es ging auch nicht darum, irgendwas an den Pegeln zu ändern, sondern darum, die Flanken der Signale steiler zu machen. Da du keinen Oszi hast, wirst du den Erfolg nicht direkt sehen können. Im Idealfall wirst du es aber daran erkennen können, dass die Fehlerrate sinkt. Deswegen würde ich jetzt mal hochgespannt fragen: Was tut die Software denn mit der geänderten Schaltung?
c-hater schrieb: > Phil H. schrieb: > >> Spannungsmäßig sowohl bei Logic 0 als auch bei Logic 1 gleiches >> Messergebnis wie vorher. > > Das ist gut möglich. Es ging auch nicht darum, irgendwas an den Pegeln > zu ändern, sondern darum, die Flanken der Signale steiler zu machen. > > Da du keinen Oszi hast, wirst du den Erfolg nicht direkt sehen können. > > Im Idealfall wirst du es aber daran erkennen können, dass die Fehlerrate > sinkt. Deswegen würde ich jetzt mal hochgespannt fragen: Was tut die > Software denn mit der geänderten Schaltung? Ach so, das ist davon unabhängig, okay. Ja, was tut die Software.... Ich merke jetzt beim Herumspielen mit den drei Zeitwerten deutlich, dass es eine Veränderung gegeben hat. Das Ergebnis auf dem Display (oder ob überhaupt ein Ergebnis vorhanden) hängt jetzt deutlich stärker von der Einstellung in der Software ab. Ingesamt aber auch deutlich(!) schlechter als noch zuvor: 120, 5, 5: Schrott 120, 10, 10: 1 Fehler, totales Durcheinander, nur ein Buchstabe von 16, totales Durcheinander, ... 250, 5, 5: Display tot 300, 3, 15: Tot 6000, 3, 15; Tot 16000, 8, 8: Schrott... 130, 5, 6: Schrott 4000, 19, 15: 4 Fehler zweiter oder dritter Wert >20: Display tot (laut Datenblatt glaub ich logisch) ... sodass ich gar nicht genau weiß, was ich da noch einstellen soll. Was heißt das nun, nach Adam c-hater? Könnte das Teil jemand mit nem Oszilloskop optimieren?
:
Bearbeitet durch User
Phil H. schrieb: > Ja, was tut die Software.... [...] Nicht gut. Ich befürchte: Die Pegelwandler sind völlig ungeeignet für die beiden Signale. Mehr noch: Das ganze Konzept der Anbindung ist ungeeignet. Ich bin nämlich inzwischen mal dazu gekommen, das DB des Displaycontrollers bis zum Ende zu scrollen... Da ist tatsächlich eine empfohlene Schaltung zur Anbindung eines µC an den Displaycontroller und diese gibt mir tief zu denken. Da ist vorgegeben, dass das gemeinsame Bezugspotential +5V sein muss. Und bei gezielter Betrachtung der Schaltpläne habe ich daraufhin festgestellt, dass der Displaycontroller tatsächlich nirgendwo mit "logic common" verbunden ist. D.h.: Dass überhaupt etwas funktioniert hat, war ein eher zufälliger Effekt. Und es hat sich damit auch geklärt, wie deine seltsamen Messergebnisse bezüglich der statischen Pegel zustande gekommen sind. Also was tun? Ganz einfach, das bauen, was die DB-Schreiber vorgedacht haben: 1) Pegelwandler wech', Rückkehr zu den einfachen Drahtbrücken von viel weiter oben im Thread... 2) Arduino GND darf nicht mit logic common verbunden werden, statt dessen: Vcc des Arduino mit +5V des Displaycontrollers verbinden. 3) Die DisplayOut-Funktion auf die neue Situation anpassen. Alle "HIGH" durch "LOW" ersetzen und umgekehrt.
c-hater schrieb: > Phil H. schrieb: > >> Ja, was tut die Software.... > > [...] > > Nicht gut. Ich befürchte: Die Pegelwandler sind völlig ungeeignet für > die beiden Signale. Mehr noch: Das ganze Konzept der Anbindung ist > ungeeignet. > > Ich bin nämlich inzwischen mal dazu gekommen, das DB des > Displaycontrollers bis zum Ende zu scrollen... > > Da ist tatsächlich eine empfohlene Schaltung zur Anbindung eines µC an > den Displaycontroller und diese gibt mir tief zu denken. Da ist > vorgegeben, dass das gemeinsame Bezugspotential +5V sein muss. Und bei > gezielter Betrachtung der Schaltpläne habe ich daraufhin festgestellt, > dass der Displaycontroller tatsächlich nirgendwo mit "logic common" > verbunden ist. > > D.h.: Dass überhaupt etwas funktioniert hat, war ein eher zufälliger > Effekt. Und es hat sich damit auch geklärt, wie deine seltsamen > Messergebnisse bezüglich der statischen Pegel zustande gekommen sind. > > Also was tun? > > Ganz einfach, das bauen, was die DB-Schreiber vorgedacht haben: > > 1) Pegelwandler wech', Rückkehr zu den einfachen Drahtbrücken von viel > weiter oben im Thread... > 2) Arduino GND darf nicht mit logic common verbunden werden, statt > dessen: > Vcc des Arduino mit +5V des Displaycontrollers verbinden. > 3) Die DisplayOut-Funktion auf die neue Situation anpassen. Alle "HIGH" > durch "LOW" ersetzen und umgekehrt. So gefällst Du mir, immer schön Arbeitsanweisungen raushauen! Die Wandler fand ich eh doof. Würde jetzt ja auch bedeuten, ich könnte mir das alte original Netzteil komplett sparen, wenn Spannung vom Arduino kommt. Habe alles erledigt (auch sämtliche HIGHS und LOWS in der Software rumgedreht), tut sich aber leider nix, Display bleibt tot! VCC/5V (https://www.arduino.cc/en/uploads/Main/ArduinoMicro_Pinout3.png) habe ich mit Pin 4 des ehemaligen U2 verbunden, dort wo +5VDC anlag. Habe auch direkt am Displaycontroller gemessen: VSS = 4,9V, VDD = 4,9V. POR hat bei Logic 0 = 4,9V, SCLK und DATA haben bei Logic 0 = 0V! POR hat bei Logic 1 = 3,3V, SCLK und DATA haben bei Logic 1 = 4,9V! Liegt ja nehme ich an an dem Wandler der noch bei der POR-Leitung standardmäßig drin ist. Hmm. Deswegen dachte ich, ich schließe das POR-Signal einfach direkt an dem Pin 18 vom Displaycontroller an und überbrücke damit den Wandler. Spannungsmäßig war das dann beim POR auch passend: Logic 0= 0V, Logic 1 = 4,9V. Funktioniert aber leider auch nicht. (LOW/HIGH-Reihenfolge in beiden Varianten probiert) Ground braucht das Teil gar nicht, ja? Hat es ja anscheinend automatisch schon. Oder ....... brauche ich das original Netzteil trotzdem an den +8VDC an Stecker J2? Vielleicht doch noch Ground vom Arduino ins Spiel bringen?
:
Bearbeitet durch User
Ok. Sieht so aus als hätts den ersten Arduino zerlegt. Habe spaßhalber aus Neugierde mal zusätzlich das Ground vom Arduino direkt an "VSS" vom Displaycontroller angeschlossen. Habs dann wieder abgeklemmt, seitdem aber keine messbaren Spannungswerte mehr. Oder die Platine/den Controller hatts dadurch zerfickt. Kann natürlich auch sein. Hab noch einen frischen Arduino auf Ersatz, weil ich wusste dass sowas passiert. c-hater, warte höflichst auf Instruktionen. Edith sagt: Jetzt bringt er die 4,9V auf einmal wieder. (der Herr Arduino) Display funktioniert auch noch. Also, Alarm zurück. Was auch immer das eben war.
:
Bearbeitet durch User
Irgendwie ist das ja auch lustig. Ich frage mich ja warum sich hier in jedem anderen Thread mit größter Freude über höchst komplizierte Sachen unterhalten wird, es hier bei den für den durchschnittlichen Forenuser absoluten Grundlagen aber niemand schafft, einfach mal die Antwort/Lösung zu posten. Diese Ignoranz gegenüber diesem Thread ist schon beachtlich, geht man mal davon aus dass etwa 60 Beiträge von mir und 30 von c-hater sind und der Thread regelmäßig im 24-Stunden-Takt nen Durchmarsch bis auf Seite 2 macht. Soll ich mit Kamelle werfen oder ne Kiste Bier springen lassen? (Letzteres gerne!) Woran hängts?
Das Problem scheint wohl zu sein, dass nicht viele hier Lust haben sich da so reinzudenken wie ein paar wenige hier. Du scheinst unendlich Geduld zu haben. Ich les das hier gern mit und schreibe ab und zu drei Sätze. Aber ich hab gar nicht die Zeit mich hiermit ewig zu befassen.
Nils S. schrieb: > Das Problem scheint wohl zu sein, dass nicht viele hier Lust haben sich > da so reinzudenken wie ein paar wenige hier. > > Du scheinst unendlich Geduld zu haben. Ich les das hier gern mit und > schreibe ab und zu drei Sätze. Aber ich hab gar nicht die Zeit mich > hiermit ewig zu befassen. Ja, das ist wohl so. Schon kurios dass der einzige der zurück schreibt auch noch ein "Gast" im Forum ist und hier nicht mal registriert ist. Hat irgendwie was von der Stimme aus dem Nichts. Wenn c-hater es nicht schafft oder keinen Bock mehr hat muss ich Platine und Arduino mal zu irgendjemandem hinbringen. Geht ja nur noch darum zu klären was wo angeschlossen werden muss um von den original 8V Spannungsversorgung auf die jetzt 5V zu kommen. Ist ja anscheinend auch vorgesehen dass man die kack Anzeige mit 5V betreiben kann.
Nun, das ist ja auch eine etwas ungewöhnliche Situation: klassische VFD-Treiber mit open-drain-PMOS, da heißen die Spannungen plötzlich andersherum (VSS ist Plus und VDD Minus), und alle Spannungen sind negativ (weil sie sich auf VSS beziehen). Ich interpretiere den Schaltplan auf der letzten Seite des Datenblattes so: Das Display bekommt irgendwoher seine Spannungsversorgung. Der Arduino ("Host System") hat eine davon unabhängige Spannungsversorgung. Anstatt nun (wie sonst üblich) den GND vom Arduino (also den Minuspol) mit einem Minuspol der Display-Logik zu verbinden, muß man jeweils den Pluspol verbinden, also die +5V des Arduino mit dem VSS aus dem Schaltplan (wie das bei der konkreten Displayplatine heißt, weiß ich jetzt nicht). Die Display-Spannungsversorgung darf man dann natürlich nicht weglassen, und auch ihren Minuspol nicht irgendwo mit GND verbinden.
Flanken der Signale steiler machen geht mit dem 1nF Kondensator sollte man nicht weg lassen!
Nosnibor schrieb: > Nun, das ist ja auch eine etwas ungewöhnliche Situation: klassische > VFD-Treiber mit open-drain-PMOS, da heißen die Spannungen plötzlich > andersherum (VSS ist Plus und VDD Minus), und alle Spannungen sind > negativ (weil sie sich auf VSS beziehen). > > Ich interpretiere den Schaltplan auf der letzten Seite des Datenblattes > so: > Das Display bekommt irgendwoher seine Spannungsversorgung. > Der Arduino ("Host System") hat eine davon unabhängige > Spannungsversorgung. > Anstatt nun (wie sonst üblich) den GND vom Arduino (also den Minuspol) > mit einem Minuspol der Display-Logik zu verbinden, muß man jeweils den > Pluspol verbinden, also die +5V des Arduino mit dem VSS aus dem > Schaltplan (wie das bei der konkreten Displayplatine heißt, weiß ich > jetzt nicht). Die Display-Spannungsversorgung darf man dann natürlich > nicht weglassen, und auch ihren Minuspol nicht irgendwo mit GND > verbinden. Damit dürfte dann auch die letzte Theorie von c-hater übern Haufen geworfen worden sein. Inzwischen haben wir ja alle Varianten durch. :D Scheint wohl doch nicht so einfach zu sein! War schon auf der Suche nach nem anderen Forum, da schneist du hier rein. DANKE DIR!!! Was soll ich sagen? Es funktioniert (das Wichtigste!!!), auch wenn ich mir nicht sicher bin ob ich es so gemacht habe wie du es gesagt hast. Dein letzter Satz ist ein bisschen verwirrend, wonach man ja Ground von der original Display-Spannungsversorgung NICHT irgendwomit verbinden soll? Vielleicht hab ich dich da auch falsch verstanden. Ich habe: - "+5V" des Arduino direkt mit dem "VSS"-Beinchen des Ausgabecontrollers verbunden - "+8VDC" des original Netzteils mit dem Platinen-"8VDC" verbunden - "Logic Common" des Netzteils mit dem Platinen-"Logic Common" verbunden => POR liegt bei 10V, VSS am Ausgabecontroller bei 4,9, DATA und SCLK bei 0 bzw. ebenfalls 4,9 (Logic 0 und Logic 1). So gehört sich das! Fehlerrate: Leicht besser als beim ersten Versuch, aber noch nicht perfekt. (im Schnitt 0 bis 2 Fehlstellen von 16 Anzeigestellen) WIE KRIEGEN WIR DAS WEG? Also doch noch irgendne Leitung steiler machen? Womit? Mal 10kOhm in die SCLK-Leitung reinhämmern? Andere Idee? Der aktuelle Code (Danke, c-hater) mit den drei aktuellen Zeitwerten 40, 3 und 3, mit denen es wohl noch am besten läuft:
1 | int por = 12; |
2 | int data = 10; |
3 | int sclk = 11; |
4 | |
5 | void DisplayOut(byte outdata) |
6 | {
|
7 | byte mask = 0b10000000; |
8 | |
9 | delayMicroseconds(40); |
10 | while (mask) |
11 | {
|
12 | delayMicroseconds(3); |
13 | digitalWrite(sclk, HIGH); |
14 | if (mask & outdata) |
15 | {
|
16 | digitalWrite(data, HIGH); |
17 | }
|
18 | else
|
19 | {
|
20 | digitalWrite(data, LOW); |
21 | }
|
22 | delayMicroseconds(3); |
23 | digitalWrite(sclk, LOW); |
24 | mask = mask >> 1; |
25 | }
|
26 | }
|
27 | |
28 | void setup() |
29 | {
|
30 | pinMode(por, OUTPUT); |
31 | pinMode(data, OUTPUT); |
32 | pinMode(sclk, OUTPUT); |
33 | |
34 | digitalWrite(sclk, LOW); |
35 | |
36 | delayMicroseconds(10000); |
37 | digitalWrite(por, LOW); |
38 | delayMicroseconds(10000); |
39 | digitalWrite(por, HIGH); |
40 | |
41 | |
42 | DisplayOut(0b10101111); //Buffer Pointer Control: Start bei AD1 |
43 | DisplayOut(0b11000000); //Digit Counter Control: Digits=16 |
44 | DisplayOut(0b11101111); //Duty Cycle Control: =15 |
45 | |
46 | DisplayOut(byte('F')); |
47 | DisplayOut(byte('R')); |
48 | DisplayOut(byte('A')); |
49 | DisplayOut(byte('N')); |
50 | DisplayOut(byte('K')); |
51 | DisplayOut(byte('R')); |
52 | DisplayOut(byte('E')); |
53 | DisplayOut(byte('I')); |
54 | DisplayOut(byte('C')); |
55 | DisplayOut(byte('H')); |
56 | DisplayOut(byte('8')); |
57 | DisplayOut(byte('4')); |
58 | DisplayOut(byte('S')); |
59 | DisplayOut(byte('U')); |
60 | DisplayOut(byte('F')); |
61 | DisplayOut(byte('F')); |
62 | |
63 | }
|
:
Bearbeitet durch User
So. OHNE die +5V des Arduino direkt an das "VSS"-Beinchen des Controllers funktioniert es exakt genau so, gleiche Fehlerrate. D.h.: - "+8VDC" des original Netzteils mit dem Platinen-"8VDC" - "Logic Common" des Netzteils mit dem Platinen-"Logic Common" vom Arduino nur: - POR, DATA, SCLK Mit anderen Worten: Das original "Logic Common" vom Netzteil sowie die +8VDC sind sehr wohl irgendwie mit dem Displaycontroller verbunden, ist ja auch entsprechend messbar an VSS. (VSS=-5,6V)
:
Bearbeitet durch User
Falls sich jemand dazu bereiterklären würde, mit Oszilloskop die Leitungen durchzuchecken, gerne Nachricht an mich. Falls 100km rund um Frankfurt/Main oder PLZ 360, könnte ich mit dem Kram auch direkt vorbeikommen. Andernfalls sende ich euch die Sachen zu. Danke
Phil H. schrieb: > Die Wandler fand ich eh doof. Würde jetzt ja auch bedeuten, ich könnte > mir das alte original Netzteil komplett sparen, wenn Spannung vom > Arduino kommt. Genau das kannst du nicht, denn du darfst GND vom Ardiuno dann NICHT mit der Displayplatine verbinden. Es kann nur immer nur ein gemeinsames Bezugspotential geben, und das ist halt dann nicht mehr das GND (also "logic common" und gleichzeitig "power common") der Displayplatine sondern +5V. Und ohne "power common" kannst du die Displayplatine nicht vom Arduino aus versorgen. > Habe alles erledigt (auch sämtliche HIGHS und LOWS in der Software > rumgedreht), tut sich aber leider nix, Display bleibt tot! Das war falsch. Nicht sämtliche solltest du umdrehen, sondern nur die in DisplayOut(). Bezüglich POR sollte hingegen alles beim Alten bleiben, die Schaltung und damit auch die logischen Pegel. Vielleicht scrollst einfach auch mal du dieses verschissene Datenblatt des Displaycontrollers bis zum Ende und versuchst zu verstehen, wie die dort gezeigte Schaltung mit der Schaltung der Jukebox korreliert. Ist nämlich praktisch 1:1 dort umgesetzt. Zumindest bis zum (mittlerweile entsorgten) U2, der in der Jukebox praktisch die Rolle des "Hosts" aus dem DB übernimmt. Der eigentliche Host ist aber in der Schaltung der Jukebox per potentialfreier RS485-Strecken abgekoppelt. Das ist der entscheidende Unterschied. > POR hat bei Logic 0 = 4,9V, SCLK und DATA haben bei Logic 0 = 0V! > POR hat bei Logic 1 = 3,3V, SCLK und DATA haben bei Logic 1 = 4,9V! SCLK und DATA also vollkommen erwartungsgemäß, aber POR nicht. Das ist das Problem. War bei dieser Messung Arduino-GND mit Display-GND verbunden oder nicht? Einfach mal mit einem Multimeter auf Durchgang testen. Es ist absolut denkbar, dass sich ein (ungewollte und störende) Masseverbindung über die Netzteile ergibt (ggf. auch das eines mit dem Arduino verbundenen PC!!!). > Liegt ja nehme ich an an dem Wandler der noch bei der POR-Leitung > standardmäßig drin ist. Soll ja auch. Wieder: Vergleiche Prinzipschaltung im DB mit Schaltung der Jukebox. Der Wandler ist da und muss wohl auch da sein. Warum, entzieht sich meiner Kenntnis, das ist dem DB nicht wirklich zu entnehmen. > Deswegen dachte ich, ich schließe das POR-Signal einfach direkt an > dem Pin 18 vom Displaycontroller an und überbrücke damit den Wandler. Ganz schlechte Idee. Die DB-Schreiber werden sich etwas dabei gedacht haben, das Teil vorzusehen...
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.