Forum: Mikrocontroller und Digitale Elektronik Problem mit DOGM204W-A Display und Atmega 328 P


von Bernhard K. (besen)


Lesenswert?

Hallo,

ich bin noch recht neu in diesem Bereich deshalb brauche etwas Hilfe.

Ich habe hier ein DOGM204W-A Display von EA, welches ich über den 8 Bit 
Mode mit einem Atmega 328P ansteure. Ich habe die Pins PD0 - PD7 an die 
Pins D0 - D7, des Displays angeschlossen (PD0 an D0 usw.) und den Enable 
Pin an PB0 angeschlossen. Der Rest ist wie im 8-Bit Beispiel vom 
Datasheet angeschlossen.

Jetzt zum Problem:
Ich bekomme es einfach nicht zum laufen/ initialisiert.
(Es erscheint kein blinkender Cursor.)



Hier mein C-Code:
1
#define F_CPU 10000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
void InitDisplay();
7
void SendData(int Data);
8
9
int main(void)
10
{
11
  DDRD=0xFF;
12
  DDRB=0xFF;
13
  InitDisplay();
14
    while(1)
15
    {
16
    }
17
}
18
19
void InitDisplay(){
20
  _delay_ms(200);
21
  SendData(0x3A);//1.Command
22
  SendData(0x09);//2.
23
  SendData(0x06);//3.
24
  SendData(0x1E);//4.
25
  SendData(0x39);//5.
26
  SendData(0x1B);//6.
27
  SendData(0x6E);//7.
28
  SendData(0x57);//8.
29
  SendData(0x72);//9.
30
  SendData(0x38);//10.
31
  SendData(0x0F);//11.
32
  PORTB=0;
33
  PORTD=0;
34
}
35
36
void SendData(int Data){
37
  PORTD=Data;
38
  _delay_ms(1);
39
  PORTB=0x01;//Enable 1
40
  _delay_ms(1);
41
  PORTB=0x00;//Enable 0
42
  _delay_ms(1);
43
}
Wo liegt der Fehler?

Es gibt hier schon ähnliche Posts, diese haben mir aber nicht wirklich 
weitergeholfen.

von g457 (Gast)


Lesenswert?

> Der Rest ist wie im 8-Bit Beispiel vom Datasheet angeschlossen.

Schließt "der Rest" auch RS und R/W mit ein? Falls ja: wie hast Du die 
angeschlossen. Falls nein: wie hast Du die angeschlossen?

von Bernhard K. (besen)


Lesenswert?

RS hängt an PC1 und R/W an PC0.

von 346623574 (Gast)


Lesenswert?

dreh mal den contrast auf.....

von 346623574 (Gast)


Lesenswert?

Cursor at Home
oder
Clear Display
braucht bei den alten Controllern 1,53ms.
Will mir aber jetzt nicht das Datenblatt vom neuen durchlesen.
Must du machen ;)
und schauen ob der neue das schneller kann.
Sonst könnte die 1ms zu kurz sein.

von g457 (Gast)


Lesenswert?

> RS hängt an PC1 und R/W an PC0

Werden C0 und C1 auch irgendwo(tm) initialisiert oder bleiben die immer 
Hi-Z?

von Bernhard K. (besen)


Lesenswert?

Ich habe nun den Kontrast und die Wartezeit erhöht und es tut sich immer 
noch nichts.
1
  SendData(0x3A);//1
2
  SendData(0x09);//2
3
  SendData(0x06);//3
4
  SendData(0x1E);//4
5
  SendData(0x39);//5
6
  SendData(0x1B);//6
7
  SendData(0x6E);//7
8
  SendData(0x57);//8
9
  SendData(0x7F);//9
10
  SendData(0x38);//10
11
  SendData(0x0F);//11
12
  SendData(0x01);//12
13
  
14
  PORTB=0;
15
  PORTD=0;
16
}
17
18
void SendData(int Data){
19
  PORTD=Data;
20
  _delay_ms(2);
21
  PORTB=0x01;
22
  _delay_ms(2);
23
  PORTB=0x00;
24
  _delay_ms(2);
25
}

von Bernhard K. (besen)


Lesenswert?

g457 schrieb:
>> RS hängt an PC1 und R/W an PC0
>
> Werden C0 und C1 auch irgendwo(tm) initialisiert oder bleiben die immer
> Hi-Z?

Nein, die werden nicht initialisiert und sie sind immer auf 0.

von g457 (Gast)


Lesenswert?

> Nein, die werden nicht initialisiert und sie sind immer auf 0.

Warum sind sie (logisch) 0 wenn sie nicht initialisiert sind? Externe 
pull-down-Widerstände? Oder hat der SSD1803 solche drin?

von Bernhard K. (besen)


Lesenswert?

g457 schrieb:
>> Nein, die werden nicht initialisiert und sie sind immer auf 0.
>
> Warum sind sie (logisch) 0 wenn sie nicht initialisiert sind? Externe
> pull-down-Widerstände? Oder hat der SSD1803 solche drin?

Mit 0 meinte ich einfach nur, dass sie nicht initialisiert sind(War 
etwas blöd geschrieben) und es sind keine pull-down-Widerstände 
vorhanden.

von g457 (Gast)


Lesenswert?

> [..] nicht initialisiert [..] keine pull-down-Widerstände [..]

Ersteres heisst beim atmega Hi-Z und zweiteres erlaubt beliebiges 
rumgeflatter. Schon mal mit initialisieren versucht?

von Bernhard K. (besen)


Lesenswert?

g457 schrieb:
>> [..] nicht initialisiert [..] keine pull-down-Widerstände [..]
>
> Ersteres heisst beim atmega Hi-Z und zweiteres erlaubt beliebiges
> rumgeflatter. Schon mal mit initialisieren versucht?

D.h. mit DDRC=0xFF; initialisieren?

von g457 (Gast)


Lesenswert?

..gemäß Datenplatt halt. Ich tippse mal auf R/W output/low für schreiben 
(output/high für lesen) und RS output/low für Instruktionen (output/high 
für Daten).

von Bernhard K. (besen)


Lesenswert?

g457 schrieb:
> ..gemäß Datenplatt halt. Ich tippse mal auf R/W output/low für schreiben
> (output/high für lesen) und RS output/low für Instruktionen (output/high
> für Daten).

Gemacht. Immer noch nichts...
1
#define F_CPU 10000000UL
2
3
#include <avr/io.h>
4
#include <util/delay.h>
5
6
void InitDisplay();
7
void SendData(int Data);
8
9
int main(void)
10
{
11
  DDRD=0xFF;
12
  DDRB=0xFF;
13
  DDRC=0xFF;
14
  InitDisplay();
15
    while(1)
16
    {
17
    }
18
}
19
20
void InitDisplay(){
21
  _delay_ms(200);
22
  PORTC=0;
23
  SendData(0x3A);//1
24
  SendData(0x09);//2
25
  SendData(0x06);//3
26
  SendData(0x1E);//4
27
  SendData(0x39);//5
28
  SendData(0x1B);//6
29
  SendData(0x6E);//7
30
  SendData(0x57);//8
31
  SendData(0x7F);//9
32
  SendData(0x38);//10
33
  SendData(0x0F);//11
34
  SendData(0x01);//12
35
  
36
  PORTB=0;
37
  PORTD=0;
38
}
39
40
void SendData(int Data){
41
  PORTD=Data;
42
  _delay_ms(2);
43
  PORTB=0x01;
44
  _delay_ms(2);
45
  PORTB=0x00;
46
  _delay_ms(2);
47
}

von F. F. (foldi)


Lesenswert?

Vielleicht findest du hier was?
http://www.mikrocontroller.net/articles/DOGMxxx_LCD_Routinen

Vor allem diesen Satz fand ich interessant:

Nachtrag eines Users. Ich hatte in der while(busy) Schleife die delay 
Zeit auf 0.4 stellen müssen damit das Display richtig funktioniert.

von Bernhard K. (besen)


Lesenswert?

F. Fo schrieb:
> Vielleicht findest du hier was?
> http://www.mikrocontroller.net/articles/DOGMxxx_LCD_Routinen
>
> Vor allem diesen Satz fand ich interessant:
>
> Nachtrag eines Users. Ich hatte in der while(busy) Schleife die delay
> Zeit auf 0.4 stellen müssen damit das Display richtig funktioniert.

Ich habe das mal ausprobiert und die Pins im Header und die 
Init.-Routine entsprechend angepasst. Nur leider immer noch nichts.

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.