LCD Problem

Gast #182497
Lesenswert?

Hi Leute

sorry das ich nun schon wieder mit dem lcd anfange, aber ich bekomm es
einfach nicht hin.

Ausgangssituation:
ATMEL STK 500
AT MEGA 32
44780 Kompatiebles LCD

Pinbelegung:

PortB stk500        44780 LCD Controller

     PB4 ------------- PIN4  (RS)
     PB6 ------------- PIN5  (R/W)
     PB5 ------------- PIN6  (E)
     NC  ------------- PIN7  (DB0)
     NC  ------------- PIN8  (DB1)
     NC  ------------- PIN9  (DB2)
     NC  ------------- PIN10 (DB3)
     PB0 ------------- PIN11 (DB4)
     PB1 ------------- PIN12 (DB5)
     PB2 ------------- PIN13 (DB6)
     PB3 ------------- PIN14 (DB6)

das LCD soll im 4 Bit Modus betrieben werden
der Compiler compiliert alles schön keine Probleme wenn ich auf
programm gehe, flackert das lcd kurz auf, aber sonst passiert nix.

ich habe in der lcd.h den atmega 32 folgender maßen ergänzt:

#elif defined(_AVR_AT90S4414_) || defined(_AVR_AT90S8515_) ||
defined(_AVR_ATmega64_) || \
      defined(_AVR_ATmega8515_)|| defined(_AVR_ATmega103_) ||
defined(_AVR_ATmega128_) || \
      defined(_AVR_ATmega161_) || defined(_AVR_ATmega162_) ||
defined(_AVR_ATmega32_)

das ist doch inordnung oder ?

mein PIN Definitionen in der lcd.h sehen so aus:

#define LCD_PORT         PORTB       /**< port for the LCD lines   */
#define LCD_DATA0_PORT   LCD_PORT     /**< port for 4bit data bit 0 */
#define LCD_DATA1_PORT   LCD_PORT     /**< port for 4bit data bit 1 */
#define LCD_DATA2_PORT   LCD_PORT     /**< port for 4bit data bit 2 */
#define LCD_DATA3_PORT   LCD_PORT     /**< port for 4bit data bit 3 */
#define LCD_DATA0_PIN    4            /**< pin for 4bit data bit 0  */
#define LCD_DATA1_PIN    5            /**< pin for 4bit data bit 1  */
#define LCD_DATA2_PIN    6            /**< pin for 4bit data bit 2  */
#define LCD_DATA3_PIN    7            /**< pin for 4bit data bit 3  */
#define LCD_RS_PORT      LCD_PORT     /**< port for RS line         */
#define LCD_RS_PIN       0           /**< pin  for RS line         */
#define LCD_RW_PORT      LCD_PORT     /**< port for RW line         */
#define LCD_RW_PIN       1            /**< pin  for RW line         */
#define LCD_E_PORT       LCD_PORT     /**< port for Enable line     */
#define LCD_E_PIN        2            /**< pin  for Enable line     */

ist das richtig ?

was habe ich falsch gemacht ?
habe mehr mals Beispiele aus dem Forum ausprobiert und weiß absolut
nicht mehr weiter.
Gast #182498
Lesenswert?

Kein Busy?  Großer Fehler.  Dann musst du exorbitant lange warten
(viel länger als normalerweise nötig) um sicher zu gehen, dass du
auch wirklich das nächste Kommando rausschicken darfst.
Gast #182500
Lesenswert?

@Gizmo

Du musst nicht einfach ATmega32 irgendwo in lcd.h einflicken.
Für was diese #elif Abfrage ist, steht im Kommentar drunter.

Die LCD_xxx_PIN nummern müssen natürlich mit den effektiven Pins vom
STK500 übereinstimmen:

Also wenn du oben schreibt:
>  PB4 ------------- PIN4  (RS)

muss die entsprechende Definition lauten:
#define LCD_RS_PIN       4
Gast #182504
Lesenswert?

Wenn
    PB0 ------------- PIN11 (DB4)
dann nicht
    #define LCD_DATA0_PIN    4
und nicht
    #define LCD_DATA0_PIN    11
sondern
    #define LCD_DATA0_PIN    PB0
weil: Fleury's Bit 0 ist des LCDs DB4.

Den Rest darfst Du selber rauskriegen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren