Forum: Mikrocontroller und Digitale Elektronik DOGM204 per SPI Ansteuern


von Adrian (holerra)


Angehängte Dateien:

Lesenswert?

Hallo zusammen

Ich habe Probleme beim ansteuern eines DOGM204 Displays von Display 
Vision über die SPI Schnittstelle.
Ich habe im Angang mein Schema und meinen Beispielcode abgelegt.

Ich habe bereits ein paar Dinge ausprobiert:

Ich habe das Display bereits über die parallele Schnittstelle getestet 
und das hat ohne grosse Probleme funktioniert.

Jedoch habe ich bisher noch kein Erfolg mit der SPI-Schnittstelle.

Den Reset den man am Anfang durchgführen soll habe ich bereits mit 
meinem Oszi angeschaut und dieser schaut genau so aus wie es im 
Datenblatt angegeben ist.
Den Booster bekomme ich leider nicht zum laufen auf den Ausgängen (VOUT 
- V4) messe ich nur 2.6V oder weniger jeweils.
Ich habe den Booster bereits einmal extern gespiesen (12V mit 
wiederständen dazwischen) und das Display hat dann einfach nur schwarze 
Felder angezeigt.

Bei der Initialisierung bin ich einfach dem Datenblatt gefolgt aber und 
habe die übertragenen Signale auch bereits einmal mit dem Oszi 
angeschaut und habe dabei auch nichts verdächtiges festgestellt.

Ich bin noch relativ unerfahren in diesem Gebiet.

Falls also Jemand der ähnliche Probleme wie ich bereits schon einmal 
gehabt hat wäre ich um ein bischen Hilfe sehr Froh.

Freundliche Grüsse Holerra

von uff basse (Gast)


Lesenswert?

1
  DDRB |= (1 << CIPO) | (1 << COPI) | (1 << CLK) | (1 << CS);

Ich empfehle dir dringend die üblichen Bezeichnungen MOSI und
MISO zu verwenden. Der MISO Pin darf nicht auf Ausgang gesetzt
werden sonst gibt es einen Bus-Kampf.

1
  upperData &= 0xf0;
2
  lowerData &= 0x0f;
3
  upperData |= (upperData >> 4);
4
  upperData &= (0x0f);

Soviel ich weiss (ich habe das Datenblatt nicht studiert) werden
im 4-Bit Mode die Daten immer in den oberen 4 Bits gesendet bzw.
abgeholt. Bei dir sind es die vier unteren.

Es empfiehlt sich auch dringend den Port C mit Spannung zu
versorgen. Dazu muss AVcc angeschlossen werden, und ein Abblock-
Kondensator dazu.

von uff basse (Gast)


Lesenswert?

1
void SPIsendInit(char datas)
2
{
3
  SPDR = datas;
4
  while(!(SPSR & (1 << SPIF)));
5
  _delay_ms(15);
6
}

Auch bei der Initialisierung wirst du vermutlich zusätzlich
das Synchronisations-Byte senden müssen sonst weiss das SPI
nicht wann es los geht.

von Veit D. (devil-elec)


Lesenswert?

uff basse schrieb:
> DDRB |= (1 << CIPO) | (1 << COPI) | (1 << CLK) | (1 << CS);
>
> Ich empfehle dir dringend die üblichen Bezeichnungen MOSI und
> MISO zu verwenden.

Ja ne, der TO ist auf der Höhe der Zeit.

Nur sind sie sich nicht ganz einig.
https://www.heise.de/select/make/2020/4/2014805250724798204
https://www.oshwa.org/a-resolution-to-redefine-spi-signal-names/

Man darf sich nur noch wundern ...

Beitrag #7295276 wurde vom Autor gelöscht.
von Falk B. (falk)


Lesenswert?

Veit D. schrieb:
> Man darf sich nur noch wundern ...

Nein, man wünscht sich eine Katastrophe biblischen Ausmaßes, damit der 
Spuk der Luxusprobleme aufhört. Kein Scherz!

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


Lesenswert?

uff basse schrieb:
> Dazu muss AVcc angeschlossen werden, und ein Abblock-
> Kondensator dazu.

Den zweiten GND auch bitte grounden.

von Veit D. (devil-elec)


Lesenswert?

Falk B. schrieb:
> Veit D. schrieb:
>> Man darf sich nur noch wundern ...
>
> Nein, man wünscht sich eine Katastrophe biblischen Ausmaßes, damit der
> Spuk der Luxusprobleme aufhört. Kein Scherz!

Das der Spuk bald aufhören sollte ist wohl jeden klar. Aber wenn Politik 
in Sport und Technik vorgedrungen ist, weiß ich nicht wer das noch 
aufhalten soll. Wenn selbst die fürchterliche Gendersprache in 
wissenschaftlichen Abhandlungen Einzug gehalten hat, sodass man das 
nicht mehr lesen kann was man vorher schon schwer lesen konnte, dann 
hört mein Verständnis für vieles auch langsam auf. Gekrönt vom Indianer 
Kinderbücher "Verbot". Tja und dann sind noch die Kaoten der neuen 
Klimaklebergeneration, die nur zerstören wollen statt irgendwas retten. 
Alles Leute ohne Sinn und Verstand. Ich schweife ab ...

@ TO:
Übersehe ich was oder schaltest du die CS Leitung nicht?
Ansonsten hast du auf der Seite des Herstellers alle Dokumentationen.
Zum Bsp. Code Bsp.
https://www.lcd-module.de/support/application-note.html

von uff basse (Gast)


Lesenswert?

Veit D. schrieb:
> Übersehe ich was oder schaltest du die CS Leitung nicht?

Der TO verwendet offensichtlich einen 2-Wire SPI Mode bei
dem es keinen CS braucht. Datenblatt lesen hilft!
Auch mein Beitrag sollte dich hellhörig werden sollen:

uff basse schrieb:
> zusätzlich das Synchronisations-Byte

von Adrian (holerra)


Lesenswert?

Danke Vielmals für alle Komentare.
Ich werde die Vorschläge einmal testen und falls es nicht funktioniert 
werde ich wohl noch etwas weitersuchen müssen.

Danke nochmal für den Tipp mit dem AVcc das habe ich garnicht gewusst.

Die Bezeichnungen für die Serielle Schnittstelle habe ich halt so 
beigebracht bekommen (Controller out Peripheral in usw.).

Das mit dem Startbit auch für die Init. werde ich auch mal austesten, 
ist möglicherweise genau das richtige.

Freundlliche Grüsse Holerra

von uff basse (Gast)


Lesenswert?

Adrian schrieb:
> Danke nochmal für den Tipp mit dem AVcc das habe ich garnicht gewusst.

Wenn man schon einen 328 verwendet tut man gut daran aus dem
Schaltplan des Arduino Uno zu spicken. Dann kann kaum was
schiefgehen.

von Adrian (holerra)


Lesenswert?

Danke nochmal an alle Tipps und Hiweise

Es hat nun alles funktioniert.

Ich nehme an es hat an den Startbits gelegen aber alles andere ist 
sicher auch gut zu wissen. Nochmal danke an alle.

Wünsche noch Fröliche Festtage und ein gutes neues Jahr

Holerra

von Veit D. (devil-elec)


Lesenswert?

uff basse schrieb:
> Veit D. schrieb:
>> Übersehe ich was oder schaltest du die CS Leitung nicht?
>
> Der TO verwendet offensichtlich einen 2-Wire SPI Mode bei
> dem es keinen CS braucht. Datenblatt lesen hilft!
> Auch mein Beitrag sollte dich hellhörig werden sollen:
>
> uff basse schrieb:
>> zusätzlich das Synchronisations-Byte

So ganz klar ist das leider nicht. Laut Datenblatt gibts viele 
Anschlussmöglichkeiten und im Code gibt es eine CS-Pin Initialisierung 
die im Schaltplan nicht angeschlossen ist. Ist das gewollt oder nicht 
gewollt. Wurde das vergessen oder nicht. Ich weiß es nicht. Der TO müßte 
klar aussagen wie er es anschließen möchte, dann können wir prüfen ob 
das so wie gedacht richtig ist. Umgekehrt funktioniert das nicht so 
richtig.

von uff basse (Gast)


Angehängte Dateien:

Lesenswert?

Veit D. schrieb:
> So ganz klar ist das leider nicht. Laut Datenblatt .....

Stellst du dich so doof oder bist du es wirklich? Oder willst
dich nur herausreden? Mit deinem Kenntnisstand dürfte es klar
sein dass ein 3-Wire SPI auch ein 2-Wire SPI sein kann. Und
Schaltplan lesen wirst du auch können.

von Manfred (Gast)


Lesenswert?

uff basse schrieb:
> Mit deinem Kenntnisstand dürfte es klar
> sein dass ein 3-Wire SPI auch ein 2-Wire SPI sein kann.

SPI müsste eher drei- oder vierdraht sein, ChipSelect, um das Ziel 
überhaupt zu aktivieren.

Ich sehe gerade:
Veit D. schrieb:
> im Code gibt es eine CS-Pin Initialisierung
> die im Schaltplan nicht angeschlossen ist.

Den vermisse ich am Display. Aber wenn es sein einziges SPI-Gerät ist, 
sollte der offene CS nich stören, geht ja nur vorwärts vom µC zum Gerät. 
Ich hoffe nicht, dass die Software auf CS eine Antwort erwartet.

von uff basse (Gast)


Lesenswert?

Manfred schrieb:
> SPI müsste eher drei- oder vierdraht sein, ChipSelect, um das Ziel
> überhaupt zu aktivieren.

Manfred schrieb:
> Aber wenn es sein einziges SPI-Gerät ist,
> sollte der offene CS nich stören

Du hast offensichtlich von SPI noch sehr wenig Ahnung. Vor
allem keine Ahnung was alles geht. Lies das Datenblatt bevor
du hier soviel Mist bzw. Falschwissen verbreitest.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

@ uff basse
An Deiner Stelle wäre ich nicht so vorlaut. Es gibt kein "2 Wire SPI". 
Das geht sogar aus dem Display Datenblatt hervor. Entweder I2C mit 2 
Leitungen oder SPI mit 3 oder 4 Leitungen. Eine andere Option gibts 
nicht.

@ TO:
Nach nochmaliger Betrachtung deines Schaltplanes muss ich sagen das da 
nichts stimmt. Weder als SPI oder noch als I2C Beschaltung. Bitte 
nochmal darüber nachdenken was es wie werden soll.

von uff basse (Gast)


Lesenswert?

Ja, schon klar. Der Bericht des TO dass es jetzt funktioniert
bestätigt dass ein 2-Wire SPI nicht funktioniert.

Wie blöd muss man sein um darauf zu insistieren ....
Vielleicht doch die geringfügig übriggebliebene Bio-Masse
zwischen den Ohren mal aktivieren ....

von Manfred (Gast)


Lesenswert?

Veit D. schrieb:
> @ uff basse
> An Deiner Stelle wäre ich nicht so vorlaut. Es gibt kein "2 Wire SPI".
> Das geht sogar aus dem Display Datenblatt hervor. Entweder I2C mit 2
> Leitungen oder SPI mit 3 oder 4 Leitungen. Eine andere Option gibts
> nicht.

https://www.lcd-module.de/fileadmin/pdf/doma/dogm204.pdf

Ich finde diese 3-Wire / 4-Wire SPI irgendwie merkwürdig, wo CS 
lediglich über ein Gatter mit SCLK verknüpft wird.

> @ TO:
> Nach nochmaliger Betrachtung deines Schaltplanes muss ich sagen das da
> nichts stimmt. Weder als SPI oder noch als I2C Beschaltung.

Eigentlich doch, er legt den Out D2 über 22k nach GND, weil er nicht 
zurück lesen will, sieht mir nicht verboten aus.

Ob das Display beim Start den GND an D2 so interpretiert, I2C machen zu 
wollen?

von Veit D. (devil-elec)


Lesenswert?

Hallo,

okay Manfred, habe nochmals alles angeschaut. Es ist laut "3 Wire SPI 
Beschaltung" angeschlossen, nur das SOD/D2 unbenutzt bleibt und der 22k 
dranhängt. Für I2C müsste D1 und D2 verbunden sein.
War etwas verwirrend.  ;-)

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.