Hallo,
ich verzweifle an der Initialisierung eines EA DOGS104N-A
Angeschlossen an einen Atmega8 (5V) via Levelshifter auf 3,3V erhalte
ich keinen Mucks vom Display. Hab auch schon das Display getauscht, aber
daran lags nicht.
Ich vermute, dass ich irgendwas in der Initialiserung falsch mache und
würde mich freuen, wenn hier mal jemand draufschauen könnte.
Hinweis: Reset ist über einen Transistor angeschlossen, d.h. hier ist
eine Invertierung vorhanden
Viele Aussagen gemacht, aber keinen Schaltplan geliefert.
Und zuletzt: was wäre denn deine Frage gewesen? Zu beliebigen
Berichterstattungen kann man viel schreiben, bringt aber nicht
viel weiter.
Auch beim Ver-/Beschalten des Displays gibt es vieeeele Möglich-
keiten. Dazu noch der Stolperstein Levelshifter.
Hier
Beitrag "DOGM204 per SPI Ansteuern"
hamma schon etwas sehr Ähnliches durchgeackert. Vielleicht
ist es auch das gleiche Problem. Wer suchet der findet.
Das CS wird auch benötigt die Bytes zu syschronisieren. Mindestens nach
dem Reset und auch bei riesen Pausen von mehreren ms. Die kleinste
Störung und es wird nur noch Quatsch empfangen.
Wecher Chip arbeitet im EDog? Da Miso angeschlossen ist kann der etwas
mitteilen. Schon mal was gefragt? Antwortet er?
A. H. schrieb:> Das CS wird auch benötigt
Nicht unbedingt.
jo mei schrieb:> Hier>> Beitrag "DOGM204 per SPI Ansteuern">> hamma schon etwas sehr Ähnliches durchgeackert.
Hallo,
danke schonmal für die Antworten.
Den verlinkten Thread kenne ich, der hat aber nicht die Lösung gebracht.
Schaltplan habe ich aktuell nicht gezeichnet. Aber hier textuell:
Atmega-Ausgang -> Levelshifter (mit Pullup) HighSide -> Levelshifter
low-side (mit Pullup) -> Display
Einzige Ausnahme: Reset, der via Transistor angesteuert wird (da der
Levelshifter nur 4 Kanäle hat)
Eine Änderung habe ich nun vorgenommen (aber auch die ist noch nicht die
endgültige Lösung):
Die Bytes wurden nicht in 3 Bytes, sondern nur in 1 Byte und auch nicht
als LSB übermittelt. Das ist korrigiert.
Ich hab auch mal mein DSO angehängt (Messung direkt am Display) und auch
dort sieht mir alles ok aus
Hinweis: das DSO decodiert bereits LSB, daher wird das Initbyte als 1F
statt F8 angezeigt.
Update:
Mir ist noch aufgefallen, dass die Nibbles hinten statt vorne waren. Das
hab ich korrigert (init_1) - aber ebenfalls keine Reaktion des Displays
Grüße Micha
Michael W. schrieb:> Anbei der allgemeine Schaltungsteil.
Das hilft allein überhaupt nicht weiter. Auch nicht dein Prosa-
Zusatz-Schaltplan. Prosa-Schaltpläne sind einfach voll scheisse.
Michael W. schrieb:> Danach gehts dann direkt ins Display gemäß der Beschaltung im Datenblatt
Im Datenblatt gibt es viele Beschaltungen. Sollen wir, die dir
helfen sollen, hellsehen welche Version du angewendet hast?
jo mei schrieb:> Das hilft allein überhaupt nicht weiter. Auch nicht dein Prosa-> Zusatz-Schaltplan. Prosa-Schaltpläne sind einfach voll scheisse.
zu allererst würde ich doch mal vorschlagen, hier freundlich und
sachlich zu bleiben.
Ja ich weiß, dass vollständige Schaltpläne wesentlich besser zu lesen
sind.
Ich bekomm das Ding aber aktuell leider nicht gezeichnet. Target kennt
weder das Display noch den Levelshifter. D.h. ich müsste das dann
irgendwie manuell machen, fotografieren etc. - und das für effektiv ein
paar direkte Kabelverbindungen und 8 Pullup-Widerstände. Das ist ja
schließlich keine Raketentechnik.
Ich gehe doch mal davon aus, dass man sich das gerade noch vorstellen
kann
Die Prosa sollte aber doch eigentlich ausreichen, um sich das
vorzustellen. Das sind ja effektiv nur direkte Verbindungen.
>> Michael W. schrieb:>> Danach gehts dann direkt ins Display gemäß der Beschaltung im Datenblatt>> Im Datenblatt gibt es viele Beschaltungen. Sollen wir, die dir> helfen sollen, hellsehen welche Version du angewendet hast?
Im verlinkten Datenblatt hat es exakt eine einzige Beschaltung für SPI
auf Seite 4 rechts oben - sonst sind da nur für I2C und die Beleuchtung
(die bei meinem Typ nicht relevant ist).
Und ja - ich bin dankbar für Hilfe, geflame hilft aber nicht.
Grüße und Danke
Micha
Michael W. schrieb:> Die Prosa sollte aber doch eigentlich ausreichen, um sich das> vorzustellen. Das sind ja effektiv nur direkte Verbindungen.
Nein. Es geht darum zu sehen ob du alles richtig gemacht hast.
Typische Aussage eines Users der Probleme hat: "Die Schaltung
brauche ich nicht zu zeigen, ich habe alles überprüft".
Die Problematik geht über den Schaltplan hinaus, auch der
Aufbau ist Teil der Funktionalität die schiefgehen kann. Ja
ich weiss schon, du hast alles korrekt aufgebaut.
Wenn es so weiter geht dann ist das eine Salamitaktik die
hier kaum einer haben will.
Michael W. schrieb:> zu allererst würde ich doch mal vorschlagen, hier freundlich und> sachlich zu bleiben.
Habe ich dich beschimpft? Habe ich dich beleidigt? Was ist
unfreundlich daran nüchtern die Sachlage zu beschreiben?
Du willst etwas vom Forum, von denen die bereit sind Hilfe-
stellung zu geben. Da kann man zumindest erwarten dass du
kooperativ bist und dir nicht die Popel mühselig einzeln
aus der Nase ziehen lässt.
Was ist nmit meinem Hinweis auf
Beitrag "DOGM204 per SPI Ansteuern" ?
Hast du alle Aspekte dort beachtet? Ich sehe in deiner Source
durchaus Diskrepanzen.
Also dein SPI-Init setzt LCD_RESET auf High, obwohl es doch an der
Stelle eigentlich Low sein sollte - zumindest hast du es vorher schon
mal auf Low gesetzt.
Die Bilder aus dem Beitrag 26.12.2022 18:56 sind aber nocht von Dir -
Oder?
Dort werden jeweils 3-Byte übertragen.
Sascha
Hallo,
wenn es hilft, hab ich jetzt versucht, den Rest mal irgendwie da
reinzupacken. Habe für den Levelshifter und das Display jetzt ne
Stiftleiste als Ersatz genommen und hoffe, das ist dennoch verständlich.
> Was ist nmit meinem Hinweis auf> Beitrag "DOGM204 per SPI Ansteuern" ?> Hast du alle Aspekte dort beachtet? Ich sehe in deiner Source> durchaus Diskrepanzen.
ich denke, dass da alles berücksichtigt ist - wo siehst Du da noch
Diskrepanzen?
Ich hab zur Sicherheit nochmal den aktuelle Stand vom Code angehängt
Sascha W. schrieb:> Also dein SPI-Init setzt LCD_RESET auf High, obwohl es doch an der> Stelle eigentlich Low sein sollte - zumindest hast du es vorher schon> mal auf Low gesetzt.
Der Reset wird durch die Levelshiftung via Transistor invertiert. D.h.
Atemga-High ist Display-Low und umgekehrt
> Die Bilder aus dem Beitrag 26.12.2022 18:56 sind aber nocht von Dir -> Oder?> Dort werden jeweils 3-Byte übertragen.
doch, die Bilder sind von mir.
Für jedes Byte müssen 3 Bytes übertragen werden gemäß Datenblatt
(https://www.lcd-module.de/fileadmin/pdf/doma/dogs104.pdf Seite 7, SPI)
Das war einer der Punkte, die evtl. im ersten Wurf des Codes noch nicht
berücksichtigt wurden, da ich zu dem Zeitpunkt noch dachte, dass das die
SPI-Logik des Prozessors macht.
Siehst Du da einen Fehler (Achtung: LSB-Auswertung des DSO reversiert
das erste Byte ggü der Darstellung im Datenblatt)?
Grüße und Danke
Micha
Hallo,
du bist ja bemüht alle Fragen beantworten. Aber wenn man auf den
Schaltplänen keine Pin Nummern lesen kann die wir hier auch überprüfen
wollen, dann wird das Stückwerk so leider nichts. Klingt hart ist aber
leider so. Versetze dich einmal in unsere Lage. Wir können nur das lesen
was du uns zeigst. Wir sehen nicht was du alles vor die liegen hast.
Welcher Levelshifter ist das der externe Widerstände benötigt?
Welches Display hast du konkret? DOGS102 oder ein DOGS104 oder ein
DOGM204?
Deine Angaben dazu sind leider durcheinander.
EA bietet für fast alle Display Bsp. Code an.
https://www.lcd-module.de/support/application-note.html
Michael W. schrieb:> lcd_spi.c
Wo ist denn deine Funktion main(..)?
Ohne geht's nicht.
Bitte gesamten Kontext zeigen.
Dann nochmal meine Fragen:
jo mei schrieb:> Habe ich dich beschimpft? Habe ich dich beleidigt? Was ist> unfreundlich daran nüchtern die Sachlage zu beschreiben?
Michael W. schrieb:> Anbei der allgemeine Schaltungsteil.
Ich habe es vielleicht überlesen, aber im Schaltplan fehlt die
Spannungsversorgung an AVCC. Meines Wissens nach (man darf mich da gern
korrigieren) versorgt der AVCC den Port C und damit dürften dann die
Signale für I2C an PC4 und PC5 Essig sein.
MfG von der Spree
Frank
Hi,
> Hallo,>> du bist ja bemüht alle Fragen beantworten. Aber wenn man auf den> Schaltplänen keine Pin Nummern lesen kann die wir hier auch überprüfen> wollen, dann wird das Stückwerk so leider nichts. Klingt hart ist aber> leider so. Versetze dich einmal in unsere Lage. Wir können nur das lesen> was du uns zeigst. Wir sehen nicht was du alles vor die liegen hast.
sorry - dass die Pin-Nummern beim Display nicht lesbar waren, hab ich
übersehen. Hab nochmal ein größeres Bild angehängt.
> Ich habe es vielleicht überlesen, aber im Schaltplan fehlt die> Spannungsversorgung an AVCC. Meines Wissens nach (man darf mich da gern> korrigieren) versorgt der AVCC den Port C und damit dürften dann die> Signale für I2C an PC4 und PC5 Essig sein.
AVCC ist natürlich auch angeschlossen - das fehlt(e) nur auf dem Plan
> Welcher Levelshifter ist das der externe Widerstände benötigt?
LevelShifter ist so einer:
https://www.amazon.de/ARCELI-Converter-Bidirektionales-Shifter-Arduino/dp/B07RDHR315/ref=sr_1_3?keywords=level+shifter+3.3v+5v&qid=1672081763&sr=8-3
Die gesonderten PullUps siund vermutlich nicht notwendig - die hab ich
im Rahmen der Fehlersuche angefügt.
Die Signale an sich kommen beim Display ja auch an (mit den PullUps).
High-Pegel hier 3,2V, Low-Pegel 0,03V
> Welches Display hast du konkret? DOGS102 oder ein DOGS104 oder ein> DOGM204?> Deine Angaben dazu sind leider durcheinander.
Display ist ein DOGS104N-A (War im Titel leider falsch)
>> EA bietet für fast alle Display Bsp. Code an.> https://www.lcd-module.de/support/application-note.html
Den hab ich auch mit als Basis genommen.
> Wo ist denn deine Funktion main(..)?> Ohne geht's nicht.> Bitte gesamten Kontext zeigen.
Das main.c hab ich aus Übersichtlichkeitsgründen weggelassen, weil da
nix Display-spezifisches drinsteht - dort wird (aktuell) lediglich 2
Sekunden gewartet und dann die lcd_init()-Funktion aufgerufen.
jo mei schrieb:
> Habe ich dich beschimpft? Habe ich dich beleidigt? Was ist> unfreundlich daran nüchtern die Sachlage zu beschreiben?
In Deinen ersten drei Posts hab ich mich erstmal angepampt gefühlt - und
im späteren Post ging das dann weiter ("voll scheisse", "Sollen wir etwa
hellsehen", "wer suchet der findet" etc.) - wenn das nicht so gemeint
war ok. Ich will darauf jetzt aber auch nicht weiter eingehen, weil das
OffTopic ist. Für mich war das mit der Anmerkungn erledigt.
Grüße und Danke
Micha
Du solltest lernen, mit Deinem Schaltplanzeichenprogramm eigene
Symbole zu erstellen. Das hilft Dir --unabhängig vom Problem hier--
brauchbare Schaltpläne zu erstellen.
Die Sozialkompetenz einiger Forenmitglieder läßt tatsächlich zu wünschen
übrig.
Aus meiner Erfahrung (2 Displays „gehimmelt“) reagieren die Displays aus
der DOGxxx-Serie unglaublich empfindlich auf Überspannung. Auf dem
Steckbrett mal kurz an einer Leitung 5V statt 3.3v und das wars mit dem
Display. Ab diesem Moment hilft auch keine korrekte
Initialisierungsroutine mehr.
Hallo,
Joe G. schrieb:> Aus meiner Erfahrung (2 Displays „gehimmelt“) reagieren die Displays aus> der DOGxxx-Serie unglaublich empfindlich auf Überspannung. Auf dem> Steckbrett mal kurz an einer Leitung 5V statt 3.3v und das wars mit dem> Display. Ab diesem Moment hilft auch keine korrekte> Initialisierungsroutine mehr.
den Tod dürfte/könnte das erste Display gestorben sein. Da hatte ich den
falschen Schaltregler erwischt. Daher habe ich das dann auch getauscht
und penibelst darauf geachtet, dass dies nur 3,3 V abbekommt. Daher
würde ich das beim aktuellen eher ausschließen wollen.
Weiß jemand was "messbares" mit dem ein solcher Tod festgestellt werden
kann?
Grüße Micha
Hi,
Nachtrag: ich hab grad mal testhalber nochmal ein niegelnagelneues
Display drangehängt - auch das tut kein Mucks und bekommt auch definitiv
nur 3,3V
Grüße Micha
Hallo,
kontrolliere einmal mit dem Controller Manual ob SPI auf SPI Mode 3
eingestellt ist und dann fehlt mir ein CS Pegel High als erste
Einstellung bevor überhaupt irgendwas mit SPI Übertragung beginnt. Auch
ein Reset funktioniert nur wenn der Pin vorher auf High Pegel steht.
Also High - Low - High. Welchen Takt hat dein SPI? Darf max. 1 MHz sein.
An der Display Beschaltung kann ich keinen Fehler erkennen.
Ist es dir möglich dein Programm soweit zu kürzen das sich alles nur
noch ums Display dreht? Und damit ein komplettes Programm zu zeigen wo
alles enthalten ist?
Hi,
> kontrolliere einmal mit dem Controller Manual ob SPI auf SPI Mode 3
eingestellt ist
Dies war SPI Mode 2 gestanden. Hab ich geändert (CPOL=1, CPHA=1)
> und dann fehlt mir ein CS Pegel High als erste> Einstellung bevor überhaupt irgendwas mit SPI Übertragung beginnt.
hab ich angefügt
> Auch ein Reset funktioniert nur wenn der Pin vorher auf High Pegel steht.> Also High - Low - High.
Arrg - das war die Lösung. Der Reset wurde nicht mehr auf 1 (0 im Code
aufgrund Invertierung) gesetzt :-(
> Welchen Takt hat dein SPI? Darf max. 1 MHz sein.
Systemtakt ist 2MHz, SPI damit bei 125kHz
> Ist es dir möglich dein Programm soweit zu kürzen das sich alles nur> noch ums Display dreht? Und damit ein komplettes Programm zu zeigen wo> alles enthalten ist?
Das Programm (bzw. die lcd_spi.c) ist nur Display. Aufgerufen wird
lcd_init()
Wie gesagt - das Display funktioniert nun. Es war (neben evtl. den
anderen Einstellungen) der nicht wieder gelöste Reset.
Ich hab den aktuellen Stand nochmal angehängt als Referenz für andere.
Hier muss ich noch ein bisschen aufräumen und evtl. unnötig lange delays
entfernen.
Das Display zeigt nun eine "0", einen blinkenden Cursor und auf den
restlichen Stellen Müll an (da kein cls implementiert)
Vielen vielen Dank für die Hilfe!
Grüße Micha
Hallo,
schön zu hören.
Einen Tipp noch wie ich das definieren würde. Ich würde das schon in der
Definition mit Kommentar passend ändern. Das stiftet irgendwann später
weniger Verwirrung. Und beim Lesen des Displays Manuals und der
Ansteuerfunktionen ist das für das Lesen 1:1 identisch.
1
//Reset - Achtung: Reset-Leitung wird durch Schaltung invertiert