Forum: Mikrocontroller und Digitale Elektronik DOGM128-6 ohne Funktion. Benötige Hilfe.


von Jack (Gast)


Lesenswert?

Hallo zusammen,

ich bin auch wie viele andere am verzweifeln.
Habe das DOGM128-6 und versucht mit meinem eigenen Code zu 
initialisieren.

Leider hat dies nicht funktioniert, warum auch immer.

Darauf hin habe ich mir viele andere Code Beispiele zu angesehen und 
auch ausprobiert. Auch hier ohne Erfolg.

Ich betreibe das Display mit 3.3V (Application Notes beachetet).
1
void SPI_MasterInit(void)
2
{
3
  /* Set MOSI and SCK output, all others input */
4
  DDRB = (1<<PB3)|(1<<PB5);
5
  /* Enable SPI, Master, set clock rate fck/16 */
6
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
7
}
8
void SPI_MasterTransmit(char cData)
9
{
10
  /* Start transmission */
11
  SPDR = cData;
12
  /* Wait for transmission complete */
13
  while(!(SPSR & (1<<SPIF)));
14
}
Das ist die init sowie transmission vom Datenblatt (Atmel).

Meine main() sieht wie folgt aus:
1
#define F_CPU 8000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
#include "graphics.h"
6
#include "SPI.h"
7
8
9
int main(void) {
10
  SPI_MasterInit();
11
  disp_init();
12
  
13
  
14
  char string[] = "bla";
15
  while(1) {
16
    
17
    g_draw_string(1,1,string,0);
18
  }
19
}
die Include Datein habe ich von den Autor aus folgenden Beitrag:
Beitrag "EA DOGM128 128x64 Grafik Display"
Diese habe ich für mein Atmel (328p) abgeändert wie besprieben.

Es passiert einfach gar nichts!
Wäre echt toll wenn mir da jemand helfen könnte.


Grüße Jack

: Bearbeitet durch User
von Klaus (Gast)


Lesenswert?

Zeig mal deinen Aufbau. Bilder bitte nur PNG.
Zu dem Display brauchst du noch ne Platine wo die Kondensatoren lt. 
Datenblatt drauf sein müssen.
Ich geh mal davon aus das du ohne angeschlossen hast.

von cyprius (Gast)


Lesenswert?

Du musst noch SS als Ausgang konfigurieren, sonst funktioniert SPI als 
Master nicht.

von Jack (Gast)


Angehängte Dateien:

Lesenswert?

hier ist der Aufbau.

von Düsendieb (Gast)


Lesenswert?


von spess53 (Gast)


Lesenswert?

Hi

>hier ist der Aufbau.

Ersetze die Folienkondensatoren durch 1µ Keramik.

MfG Spess

von Bildberg (Gast)


Lesenswert?

Klaus schrieb:
> Zeig mal deinen Aufbau. Bilder bitte nur PNG.
> Zu dem Display brauchst du noch ne Platine wo die Kondensatoren lt.
> Datenblatt drauf sein müssen. Ich geh mal davon aus das du ohne
> angeschlossen hast.

Lol, super Hinweis. PNG bei Fotos ist genauso dämlich wie JPG bei 
Schaltplänen

von Jack (Gast)


Lesenswert?

Danke für die Hilfe und Quellcodes bzw. Links.

Leider kann ich keine Diskrepanz zwischen den Code und meinen 
"orginalen" selbst geschriebenen finden.

Morgen werde ich mal die Kondensatoren tauschen.

Grüße

von Klaus (Gast)


Lesenswert?

@Jack
Vllt. hilft dir, das hier weiter:

void GLCD_wrByte(unsigned char cmd, unsigned char data )
{
  Port_SPI &= ~(1<<SPI_CS1); // Zur Datenübertragung \CS1 auf 
Logisch 0 setzen

  // Überprüfen ob ein Komandobefehl oder Daten gesendet werden soll
  if ( cmd == 0 )
  {
    PORT_A0 |= (1<<PIN_A0);
  }
  else
  {
    PORT_A0 &= ~(1<<PIN_A0);
  }
  // SPI Enable und Master/Slave Select setzen
  SPCR = (1 << SPE)|(1 << MSTR);
  // Double SPI Speed Bit setzen
  SPSR = (1 << SPI2X);
  // Daten senden
  SPDR = data;
  while(!(SPSR & (1<<SPIF)));
  Port_SPI |= (1<<SPI_CS1);    // Nach Übertragun \CS1 wieder auf 
Logisch 1 setzen



}

von Jack (Gast)


Lesenswert?

Hallo zusammen,

also C Code noch mal "angepasst" und überarbeitet, aber keine wirklichen 
Fehler gefunden (kann mich natürlich täuschen)

Kondensatoren habe ich in Keramik getauscht, erst 470nF und dann noch 
mal in 1µF, daran sollte es auch nicht liegen.

So langsam erschleicht mich das Gefühl, dass das Display  nicht 
funktioniert, ist aber neu.


Grüße

von Karl H. (kbuchegg)


Lesenswert?

Jack schrieb:

> So langsam erschleicht mich das Gefühl, dass das Display  nicht
> funktioniert, ist aber neu.

Hast du das hier
Beitrag "Re: DOGM128-6 ohne Funktion. Benötige Hilfe."

jetzt schon berücksichtigt oder nicht?

Wenn du den SS Pin von deinem Mega nicht auf Ausgang schaltest, dann 
kannst du Displays tauschen bis du schwarz wirst: es wird nicht 
funktionieren!

Uresache ist in dem Fall nicht das Display sondern die SPI EInheit vom 
Mega. Ist SS nicht auf Ausgang, dann gelten Nebenbedingungen, die du 
sehr wahrscheinlich nicht eingehalten hast. SS auf Ausgang und dann ist 
zumindest dieser Punkt erst mal vom Tisch.

Das hier
1
void SPI_MasterInit(void)
2
{
3
  /* Set MOSI and SCK output, all others input */
4
  DDRB = (1<<PB3)|(1<<PB5);
5
  /* Enable SPI, Master, set clock rate fck/16 */
6
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0);
7
}
schaltet SS nicht auf Ausgang.

: Bearbeitet durch User
von Jack (Gast)


Lesenswert?

Hallo zusammen,

also ich habe noch ein wenig weiter gesucht, aber leider nichts 
gefunden.

Das Display hat 1µF Kondensatoren an den Stellen wo sie sein sollen und 
das Display wird mit einer 3.3V Festspannung betrieben.

Wenn ich den µC programmiere dann flackert das Display kurz schwarz und 
ist dann aus.
Das ist das höchste der Gefühle.

von Düsendieb (Gast)


Lesenswert?

Karl H. schrieb:
> /* Set MOSI and SCK output, all others input */
>   DDRB = (1<<PB3)|(1<<PB5);

Hast Du denn nun endlich ein:

 DDRB = (1<<PB2)| 1<<PB3)|(1<<PB5);

für ein Ausschalten des  Slave Select (PB2) hinzugefügt?

von Jack (Gast)


Lesenswert?

Morgen,

ja habe mitlerweile eine libary die funktionieren sollte, da diese viele 
verwenden.

//Should chip select (CS) be used?
#define LCD_USE_CHIPSELECT  0

//Chip select
#if LCD_USE_CHIPSELECT == 1
  #define PORT_CS  PORTC
  #define DDR_CS   DDRC
  #define PIN_CS   PORTC1
#endif


und

void init_spi_lcd() {
   DDRB |= (1<<PB2);

Das Display geht kurz ab, (schwarze striche überall) und dan ist es 
wieder aus

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


Lesenswert?

Jack schrieb:
> Das Display geht kurz ab, (schwarze striche überall) und dan ist es
> wieder aus

Klingt ein wenig so, als würdest du der Ladungspumpe den Saft wegdrehen. 
Leider habe ich mit dem DOGM128 noch nichts gemacht, das DOGM132-5 hatte 
einen Fehler im Datenblatt, den sie hoffentlich mittlerweile korrigiert 
haben.
Miss mal an der Kondensatorbank, ob du da stufenweise erhöhte Spannungen 
im Betrieb messen kannst. Das ist also V0 (Pin 21) bis V4 (Pin 25).
An Pin 32 (Vout) solltest du dann etwa 9-12V messen können.

Das Problem im Datenblatt des DOGM132 (und es scheint, das sie das beim 
DOGM128 auch falsch gezeichnet haben) war, das die Kondensatoren an den 
Pins 27-31 falsch geschaltet sind. Einer gehört zwischen Pin 27(-) und 
28(+) (der ist richtig gezeichnet), einer zwischen 29(+) und 30(-) und 
der dritte zwischen 31(-) und 32(+). Dann klappt die Ladungspumpe 
richtig und du kannst etwa 3-4 mal Vcc an Pin 32 messen.
Das bezieht sich alles auf den Single Supply Betrieb mit 3,3V. Falls du 
den Dual Supply Modus benutzt, streich dieses Posting.

: Bearbeitet durch User
von Jack (Gast)


Lesenswert?

Ich probier das gleich mal aus.. aber ich glaube was du da sagst ist 
nicht falsch und kann tatsächlich ein Problem sein.
Melde mich

von Jack (Gast)


Lesenswert?

VOut messe ich 12,6V
Verbaut sind 1µF MKT Kondensatoren, wie im Datenblatt vorgeschrieben 
verschalten.

zwischen 30 - 31 und 30 - 29 ist ein MKT geschalten.
Verpolen kann man da ja nichts.

von spess53 (Gast)


Lesenswert?

Hi

>Das Problem im Datenblatt des DOGM132 (und es scheint, das sie das beim
>DOGM128 auch falsch gezeichnet haben) war, das die Kondensatoren an den
>Pins 27-31 falsch geschaltet sind. Einer gehört zwischen Pin 27(-) und
>28(+) (der ist richtig gezeichnet), einer zwischen 29(+) und 30(-) und
>der dritte zwischen 31(-) und 32(+). Dann klappt die Ladungspumpe
>richtig und du kannst etwa 3-4 mal Vcc an Pin 32 messen.

Da ist überhaupt nichts falsch. Der Displaycontroller (ST7565P) kennt 
fünf verschiedene "richtige" Boosterschaltungen. Was du beschreibst ist 
ein 3-fach Booster. Die andere Schaltung mit Kondensatoren von CAP1P 
bzw. CAP3P nach CAP1N ist ein 4-fach Booster. Und der funktioniert bei 
mir problemlos.

>VOut messe ich 12,6V
>Verbaut sind 1µF MKT Kondensatoren, wie im Datenblatt vorgeschrieben
>verschalten.

Dann läuft den Booster. Mach mal eine Initialisierung ohne irgend ein 
Clear. Die 'schwarzen Stricht' sollten dann bleiben.

MfG Spess

von Stefan S. (mexakin)


Lesenswert?

Also dein Troubleshooting...

Lass dirs Datenblatt raus, prüf alle Spannungen an den Pins nach, da 
sind von 3V bis 12 V alle irgendwo dabei.. die prüfst du erstmal ab, 
falls das alles koreekt ist, was ich glaube, sonst würds nicht flackern, 
dann prüfst du mit Oszi oder logic analyzer mal deinen SPI-Bus nach, 
falls nicht vorhanden musst du solange deinen Code rumprobieren bis es 
eben geht, ich glaube die dogm typen haben doch auf ihrer HP alle 
mgöichen Initialisierungsbeispiele für verschiedene Controller.

Ich perönlich steuer meins mit Texas MSP430 an, da funktioniert deren 
Code mit SPI Anpassung prima.

von Alexander H. (alex1)


Lesenswert?

Hast Du die Möglichkeit Signale nachzumessen, z.B. ob das /CS passend 
kommt, oder ob die Daten mit der entsprechend passenden CLK rausgehen?

Alex

von Jack (Gast)


Angehängte Dateien:

Lesenswert?

Alexander H. schrieb:
> Hast Du die Möglichkeit Signale nachzumessen, z.B. ob das /CS passend
> kommt, oder ob die Daten mit der entsprechend passenden CLK rausgehen?
>
> Alex

Nein leider nicht :(
Aber ich denke ich werde da nicht drum herum kommen.

Ich habe mal den Code angehängt. Vielleicht findet jemand einen Fehler 
im Code unter Berücksichtigung dass ich ein Atmega328p verwende.

Ich bin so langsam übel am verzweifeln, ich brauch dringend ein Oszi!

von Alexander H. (alex1)


Lesenswert?

Ich denke, es hat etwas mit Deinem Pin "A0 Port" zu tuen. Das soll ja 
dem Display CMD oder Data angeben. Der Pin wird ja spaeter als Ausgang 
geschaltet, gehoert aber zum SPI. Vielleicht hängst Du das A0 vom 
Display mal an einen anderen PIN und definierts den Natürlich auch in 
der dogm-graphic.h um und versuchst es damit noch mal.

Alex

von Jack (Gast)


Lesenswert?

Alexander H. schrieb:
> Ich denke, es hat etwas mit Deinem Pin "A0 Port" zu tuen. Das soll
> ja
> dem Display CMD oder Data angeben. Der Pin wird ja spaeter als Ausgang
> geschaltet, gehoert aber zum SPI. Vielleicht hängst Du das A0 vom
> Display mal an einen anderen PIN und definierts den Natürlich auch in
> der dogm-graphic.h um und versuchst es damit noch mal.
>
> Alex

Ach verdammt, dass war der Fehler!
Es läuft danke.

von Maik W. (werner01)


Lesenswert?

Kumpel glaube mir das DISP funktioniert. solange du keine Wickelkondies 
nimmst ist alles gut!

Lese das Datenblatt denn so habe ich es hinbekommen. SI CLK ist für SPI, 
A0 entscheidet ob DAten oder Befehl, und CS machst du auf low am besten 
oder zumindest so lange wie du das DISP benutzt

von Jack (Gast)


Lesenswert?

Wie gesagt das Display "geht"
Ich habe jetzt leider nur kleine Pixel überall und evtl. eine Schrift 
die ständig durchläuft.
Bin mir noch nicht sicher an was das liegen könnte.

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


Lesenswert?

spess53 schrieb:
> Da ist überhaupt nichts falsch. Der Displaycontroller (ST7565P) kennt
> fünf verschiedene "richtige" Boosterschaltungen.

Ich hatte ausdrücklich gesagt, das ich nur das DOGM132-5 kenne. Und da 
funktioniert die im Datenblatt angegebene Schaltung nicht. Mit dieser 
taucht an Vout nur eine unbrauchbare Spannung im Bereich von 2-4V auf, 
unabhängig von der Einstellung des Boosters.

Deine angebliche Schaltung für 3-fach Booster taucht im Datenblatt des 
DOGM128 nicht auf und wird im Datenblatt des DOGM132 auch nicht als 
solche erwähnt. Die funktionierende 4-fach Booster Schaltung (und es ist 
ein 4-fach Booster, wie man eindeutig messen kann), die ich beschrieb, 
wird in keinem der beiden Datenblätter richtig gezeichnet, läuft aber 
bei mir seit Jahren und bringt ein deutliches helles Display.

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.