Forum: Compiler & IDEs LCD Problem


von Gizmo (Gast)


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.

von Jörg Wunsch (Gast)


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.

von Gizmo (Gast)


Lesenswert?

was heist das jetzt ?

von Peter Fleury (Gast)


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

von Gizmo (Gast)


Angehängte Dateien:

Lesenswert?

hier mal meine LCD.h hab alles eingestellt, aber es funzt trotzden net

von A.K. (Gast)


Lesenswert?

Nicht die Pin-Nummer am Chip, sondern die Bitnummer am Port. Wenn DB4 an
PB0 hängt, dann heisst das PB0 oder einfach 0 und nicht Pin 11 vom
Gehäuse.

von Gizmo (Gast)


Lesenswert?

in welcher Zeile stellt man das ein ?

von A.K. (Gast)


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.

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.