Forum: Compiler & IDEs AVR32 LCD Init Problem


von Michael (Gast)


Lesenswert?

Hallo,

ich verwende ein AVR32UC3A mit LCD.

Es funktioniert zwar, doch beim Einschalten läuft das Display erst nach 
mehrmaligem Einschalten mit anschließendem Reset an.

Könnte es an der falschen Initialisierung oder falscher Reihenfolge der 
Initialisierung liegen?

So sieht der Code aus:
1
//Definieren der PINS
2
         gpio_enable_gpio_pin(D0_PIN);
3
  gpio_enable_gpio_pin(D1_PIN);
4
  gpio_enable_gpio_pin(D2_PIN);
5
  gpio_enable_gpio_pin(D3_PIN);
6
  gpio_enable_gpio_pin(D4_PIN);
7
  gpio_enable_gpio_pin(D5_PIN);
8
  gpio_enable_gpio_pin(D6_PIN);
9
  gpio_enable_gpio_pin(D7_PIN);
10
11
  gpio_enable_gpio_pin(WR);
12
  gpio_enable_gpio_pin(RD);
13
  gpio_enable_gpio_pin(RS);
14
  gpio_enable_gpio_pin(BUSY);
15
  gpio_enable_gpio_pin(CSEL1);
16
17
//Datenrichtung setzen
18
AVR32_GPIO.port[1].gpers = 0xffff0000;     // Activiert PB19-PB31
19
AVR32_GPIO.port[1].oders = 0xffff0000;     // setzt PB19-PB31 als Ausgang
20
21
//LCD Init
22
AVR32_GPIO.port[1].ovr = 0xffffffff;
23
msecDelay(100);
24
gpio_clr_gpio_pin(RD);
25
gpio_clr_gpio_pin(WR);
26
RS_COMMAND
27
CSELECT
28
msecDelay(100);
29
30
STROBE_WR
31
RDSEND
32
CUNSELECT
33
msecDelay(50);
34
35
36
WriteCommand(0x01,0xF3);//system clock F3 schneller
37
WriteCommand(0x02,0x02);//advance power setup register
38
WriteCommand(0x03,0x80);//advance display setup register
39
WriteCommand(0x10,0x38);//cursor control register  28
usw.

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Michael schrieb:

> Es funktioniert zwar, doch beim Einschalten läuft das Display erst nach
> mehrmaligem Einschalten mit anschließendem Reset an.
>
> Könnte es an der falschen Initialisierung oder falscher Reihenfolge der
> Initialisierung liegen?

Welche Wartezeit gibst du dem LCD nach einem Power-ON? Die Controller 
auf solchen LCDs machen da genaue Mindestvorgaben im paar 10 ms Bereich. 
Füge mal die gesund lange Warteschleife als ersten Befehl im main() 
ein.

2. Tipp:

Die Befehle

RS_COMMAND
CSELECT
STROBE_WR
RDSEND
CUNSELECT

kann man mangels Sourcecode und Angaben zum LCD Controller nicht 
überprüfen.

von Tilo (Gast)


Lesenswert?

Ich hab mit dem AVR noch nicht gearbeitet, aber auf den ersten Blick hat 
der uC einen externen Speicherbus. Ist es nicht einfacher, das Display 
an den Speicherbus anzuschließen?

von Michael (Gast)


Lesenswert?

Hallo,

die Wartezeit habe ich probiert bis 1000ms leider keine Veränderung.

Die Defines sehen so aus:
1
#define  CSELECT      gpio_clr_gpio_pin(CSEL1);
2
#define  CUNSELECT      gpio_set_gpio_pin(CSEL1);
3
#define   STROBE_WR      gpio_clr_gpio_pin(WR);gpio_set_gpio_pin(WR);
4
#define  RS_COMMAND      gpio_clr_gpio_pin(RS);
5
#define  RS_DATA      gpio_set_gpio_pin(RS);
6
#define   RDSEND        gpio_set_gpio_pin(RD);

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Um welches Display geht es denn überhaupt?

Falls es ein 44780 Derivat ist:
> #define   STROBE_WR      gpio_clr_gpio_pin(WR); gpio_set_gpio_pin(WR);
Ist das die richtige Polarität für den Write-Impuls?
Im Datenblatt ist E im Ruhezustand Low.

Ist der Write-Impuls lang genug (480ns)?

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.