Forum: Mikrocontroller und Digitale Elektronik EA dog 204-a Initialisierung


von Hannes (Gast)


Lesenswert?

Hallo,

ich hoffe ihr könnt mir helfen!!

Ich versuche verzweifelt das EA DOG 204-A an meinen ATXMEGA64A3U zu 
initialisieren, doch es tut sich nichts auf dem Display.

Hier die Codeschnipsel:
1
//Initialisierung des Displays
2
void LCD_init (void)
3
{
4
  
5
  _delay_ms(100);
6
  PORTE.OUTSET = 0b00000000;  // E,RS,RW auf low
7
  _delay_ms(1);
8
  PORTE.OUTSET = 0b00000001;  // Displayreset toggle
9
  _delay_ms(10);   
10
  PORTE.OUTCLR = 0b00000001;
11
  _delay_ms(1);
12
  
13
14
15
  LCD_befehl(0x32);  //Function set      
16
  LCD_befehl(0x09);  // extendet Function set
17
  LCD_befehl(0x06);  // Entry mode set
18
  LCD_befehl(0x12);  //Bias setting      
19
  LCD_befehl(0x39);  //Funktion set
20
  LCD_befehl(0x1B);  //Internal Devider
21
  LCD_befehl(0x6E);  //Follower Control
22
  LCD_befehl(0x54);  //Power control      
23
  LCD_befehl(0x70);  //Contrast set      
24
  LCD_befehl(0x38);  //Function set
25
  LCD_befehl(0x0E);  //Display on
26
  LCD_befehl(0x01);  //Clear
27
  LCD_befehl(0x02);  //Curser home
28
}
29
30
//Befehle für das Display
31
void LCD_befehl(uint8_t befehl)
32
{
33
  PORTE.OUTCLR = 0b00000011;  // E und Reset auf low
34
  PORTE.OUTCLR = 0b00000010;  //RS auf Low, damit nicht geschreiben wird
35
  PORTE.OUTCLR = 0b00000100;  //RW auf Low
36
  PORTF.OUT = befehl;
37
  
38
  PORTE.OUTSET = 0b00001000;  //E high
39
  _delay_ms(3);
40
  PORTE.OUTCLR = 0b00001000;  // E low
41
  
42
  _delay_ms(10);
43
}

Ausgänge sind auch definiert. Ich bekomme sogar die richtigen Signale 
wenn ich debugge aber auf dem Display tut sich einfach nicht.

Vielen Dank schonmal,
Gruß Hannes

von Frickelfritze (Gast)


Lesenswert?

Hannes schrieb:
> aber auf dem Display tut sich einfach nicht.

Vermutlich weil du die Initialisierungssequenz laut Flussdiagramm
im Datenblatt nicht ausgeführt hast.

von Hannes (Gast)


Lesenswert?

Ich habe die Initialisierung in verschiedenen Varianten getestet.

Natürlich genau wie das Datenblatt oder auch das andere Datenblatt zu 
dem Display selber...

Jedoch alles ohne Erfolg bis jetzt.

von Frickelfritze (Gast)


Lesenswert?

Hannes schrieb:
> Natürlich genau wie das Datenblatt oder auch das andere Datenblatt zu
> dem Display selber...

Davon ist in deinem Programm nichts zu sehen.

von Hannes (Gast)


Lesenswert?

Du meinst SSD1803 Datenblatt Seite 61?
die hatte ich genau so getestet, nur in dem Codeschnipsel ist aktuell 
ein anderer Versuch!

von Frickelfritze (Gast)


Lesenswert?


von Frickelfritze (Gast)


Lesenswert?


von Hannes (Gast)


Lesenswert?

Ich habe doch gar keine Hd44780 Controller oder ist der ssd gleich?

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


Lesenswert?

Hannes schrieb:
> PORTE.OUTCLR = 0b00000011;  // E und Reset auf low

Hannes schrieb:
> PORTE.OUTSET = 0b00001000;  //E high

Du musst dich aber schon entscheiden, wo E denn nun angeschlossen ist. 
Das gleiche gilt übrigens für RS. Einmal ist E lt. der ersten Zeile auf 
Bit 0 oder 1 und dann lt. der anderen Zeile auf Bit3.
Gleich dadrunter steht
> PORTE.OUTCLR = 0b00000010;  //RS auf Low, damit nicht geschreiben wird
was wieder auf Bit 1 zeigt.

Mach dir lieber ein paar defines, dann wird es auch für dich selbst 
klarer.

Miss dann auch mal die Spannung des Boosterteiles. Solange an Vout keine 
Spannung liegt, ist der Booster nicht initialisiert.

: Bearbeitet durch User
von Hannes (Gast)


Lesenswert?

Ja da ist n bug in den Kommentaren.
Pin0 Display reset
Pin 1 rs
Pin 2 rw
Pin 3 e

An den V_out liegt ne Spannung an.

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


Lesenswert?

Hannes schrieb:
> _delay_ms(100);
>   PORTE.OUTSET = 0b00000000;  // E,RS,RW auf low

Dann stimmt das hier aber immer noch nicht. Wenn du 0x00 ins 
PORTE.OUTSET Register schreibst, passiert nämlich gar nix.

: Bearbeitet durch User
von Hannes (Gast)


Lesenswert?

das ist gut also müsste da oben einmal PORTE.OUTCLR = 0b00001111, wenn 
man es denn überhaupt da benötigt?

von Hannes (Gast)


Lesenswert?

Sonst jemand ne Idee wo der Fehler sein könnte?
Hat schonmal jemand dieses Display initialisiert und könnte die 
entsprechende Sequenz hier posten?
Danke.

von Veit D. (devil-elec)


Lesenswert?

Hallo,

wenn der Code nun stimmen sollte, dann überprüfe nochmal die Beschaltung 
vom Display. Ansonsten kannste dich auch an den EA Support wenden.

: Bearbeitet durch User
von Hannes (Gast)


Lesenswert?

gerade nochmal gemessen, V out liegt eine Spannung an.

Veit D. schrieb:
> wenn der Code nun stimmen sollte,

ich weiß aber ja nicht ob der Code wirklich stimmt. Kann ja sein, dass 
da immer noch was nicht richtig ist.

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


Lesenswert?

Hannes schrieb:
> Kann ja sein, dass
> da immer noch was nicht richtig ist.

Ja, das kann sein. Es kann aber auch ein Verdrahtungsfehler sein. Also 
reiche dch mal den Schaltplan nach. Es macht auch im Moment überhaupt 
keinen Spass, sich durch deinen Code zu wühlen, denn das ist alles sehr 
unübersichlich mit deinen Bitmustern und fehlerträchtig.
Wir wissen doch nicht mal, wie nun alle Pins deines Displays am XMega 
hängen. Da fehlt jeglicher Kommentar oder ist sogar noch irreführend.

von Hannes (Gast)


Lesenswert?

Fehler gefunden... reset muss die ganze zeit high sein.

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.