Forum: Mikrocontroller und Digitale Elektronik Digitales Display und Keyboard mit PC verbinden


von Phil H. (rollingstone1989)


Angehängte Dateien:

Lesenswert?

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

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

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
von Phil H. (rollingstone1989)


Angehängte Dateien:

Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

Weiß noch jemand was?

Danke.

von Rolf M. (rmagnus)


Lesenswert?

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.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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!)

von Phil H. (rollingstone1989)


Angehängte Dateien:

Lesenswert?

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!"

von Phil H. (rollingstone1989)


Lesenswert?

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.)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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?

von H.Joachim S. (crazyhorse)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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.

von H.Joachim S. (crazyhorse)


Lesenswert?

Und der Stromverbrauch :-)

USB-Sticks gibts doch in ausreichender Grössse. Oder den Banana-Pi, hat 
Sata.
Python?

von Phil H. (rollingstone1989)


Lesenswert?

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.

von Jörg (Gast)


Lesenswert?

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!

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

FreeBASIC geht auch auf Linux.

von Phil H. (rollingstone1989)


Lesenswert?

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?

von Rolf M. (rmagnus)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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

----------------------------------

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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

von Anonymous User (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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.

von Phil H. (rollingstone1989)



Lesenswert?

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

von Phil H. (rollingstone1989)



Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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...

von Phil H. (rollingstone1989)


Lesenswert?

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!

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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!

von c-hater (Gast)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

@c-hater:
Was sagst du zu meinem letzten Posting bzgl. der Pinbelegung an Buchse 
J2? Liege ich richtig?

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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)

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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?

von Phil H. (rollingstone1989)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)



Lesenswert?

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?

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Ground vom Arduino nicht an Pin 18 VDD. Das ist +, Vss ist - (Ground).

von Phil H. (rollingstone1989)


Lesenswert?

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!

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Common ist GND, Ground, -. Logic ist der Minuspol der 
Steuerungs-Elektronik.

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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

von Phil H. (rollingstone1989)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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
von Phil H. (rollingstone1989)


Angehängte Dateien:

Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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...

von c-hater (Gast)


Lesenswert?

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...

von Phil H. (rollingstone1989)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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

von Phil H. (rollingstone1989)


Lesenswert?

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?

von Phil H. (rollingstone1989)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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...

von Phil H. (rollingstone1989)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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); ?

von Phil H. (rollingstone1989)


Lesenswert?

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
}

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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)

von Phil H. (rollingstone1989)


Lesenswert?

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
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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?

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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
von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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
}

von Phil H. (rollingstone1989)


Angehängte Dateien:

Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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?

von Phil H. (rollingstone1989)


Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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?

von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Angehängte Dateien:

Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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)

von Nils S. (kruemeltee) Benutzerseite


Angehängte Dateien:

Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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)

von Phil H. (rollingstone1989)


Lesenswert?

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.

von c-hater (Gast)


Lesenswert?

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?

von Phil H. (rollingstone1989)


Lesenswert?

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
von c-hater (Gast)


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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?

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

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.

von Phil H. (rollingstone1989)


Lesenswert?

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.

von Nosnibor (Gast)


Lesenswert?

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.

von Flanke (Gast)


Angehängte Dateien:

Lesenswert?

Flanken der Signale steiler machen geht mit dem 1nF Kondensator sollte 
man nicht weg lassen!

von Phil H. (rollingstone1989)


Angehängte Dateien:

Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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
von Phil H. (rollingstone1989)


Lesenswert?

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

von c-hater (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.