LCD-8bit Ansteuerung

Gast #1195549
Lesenswert?

Hallo zusammen, ich weiß es ist ein leidiges thema...aber auch ich habe
probleme mein lcd zum laufen zu bekommen! habe das tutorial schon
betrachtet! denkmal ich seh den wald vor lauter bäumen einfach nicht!
1
#include <util/delay.h>
2
#include <avr/io.h> 
3
#include "LCD.h"
4

5
#define LCD_PORT       PORTC
6
#define LCD_DDR        DDRC
7
#define LCD_RW         PD1
8
#define LCD_EN         PD2
9
#define LCD_IO1        PD0
10
#define LCD_IO2        PD3
11

12
#define CLEAR    0x01
13
#define HOME    0x02            
14

15
  // PORTC = DB0-7
16
  // PORTD0 = I/OC1
17
  // PORTD1 = RW
18
  // PORTD2 = E
19
  // PORTD3 = I/OC2
20

21
void lcd_init(void)
22
{
23
  LCD_DDR  = 0xff;
24
  DDRD |= (1<<DDD0) |  (1<<DDD1) |(1<<DDD2) |(1<<DDD3);
25

26
  _delay_ms(1000); //LCD Zeit für den eigenen Reset geben
27

28
  write_command(0b11111000);//Set funktion mode instruction[SF] 8bit modus, font 5x8 dot, 4lines x 64words
29
  write_command(0b01010000);//Set entry mode[SE] curser is incr after writing data
30
  lcd_clear();
31
  write_command(0b00111000);//Set display mode instruction[SD] all Display on, curser display on  
32
}
33

34
void lcd_enable(void)
35
{
36
   PORTD |= (1<<LCD_EN);
37
    _delay_us(1);                   // kurze Pause
38
   PORTD &= ~(1<<LCD_EN);
39
}
40
void write_data(unsigned char data)
41
{
42
  // Write RAM data[WD]
43

44
  PORTD &= ~(1<<LCD_IO1) & ~(1<<LCD_RW);
45
  PORTD |= (1<<LCD_IO2);
46
  LCD_PORT = data;
47
  lcd_enable();
48
  _delay_us(20);
49
}
50

51
void write_command(unsigned char command)
52
{
53
  PORTD &= ~(1<<LCD_IO1) & ~(1<<LCD_IO2) & ~(1<<LCD_RW);
54
  LCD_PORT =  command; 
55
  lcd_enable();
56
  _delay_us(20);
57
}
58

59
void lcd_clear(void)
60
{
61
   write_command(CLEAR);
62
   _delay_ms(2);
63
}
64
 
65
 
66
void lcd_home(void)
67
{
68
   write_command(HOME);
69
   _delay_ms(5);
70
}
timings sind alle eingehalten, hardware hab auch auch überprüft :(
Benutze einen Atmega32, int.8mhz ! lcd50530 von pollin!

was hab ich falsch gemacht !?
Gast #1195952
Lesenswert?

Der LCD-Controller M50530 ist nicht 44780-kompatibel, vielleicht liegt 
dort das Problem. Kann die Bibliothek lcd.h mit diesem Controller 
umgehen? Da ich mit einer anderen Plattform arbeite, kann ich dazu 
nichts sagen, aber oftmals unterstützen solche Libs nur die 44780er.
Gast #1196903
Lesenswert?

hallo zusammen,
das display initialisiert sich jetz und zeig mir auch was an!
es lag an der kontrastspannung! der poti war hin...naja ich hoffe aus 
dieser dummheit lerne ich :(

hab jetzt ein weiters kleines problem! ich kann die cursor adresse 
schreiben und der cursor springt auch fröhlich dorthin!

zb. WC = 0x05

schieb ich ein data byte hinterher zb.WD = 'A', springt der cursor auf 
adresse 0x02 und zeig nichts an!

lass ich das schreiben der cursor adresse und sende einfach ein clear 
und dann das data byte, wir es mir angezeigt! wie zu erwarten auf 
adresse 0x00, da der clear befehl ja die cursor und display_start 
adresse auf 0x00 schreibt!


jemand ne idee ?
Gast #1197091
Lesenswert?

>jemand ne idee ?

Erstmal ein Grammatikkurs. Was schreibe ich groß, wo kommen Kommas und 
Punkte hin.

>schieb ich ein data byte hinterher zb.WD = 'A', springt der cursor auf
>adresse 0x02 und zeig nichts an!

Natürlich. Du hast auf Cursoradresse, oder besser Position ein 'A' 
geschrieben. Der Cursor rückt automatisch eins weiter. Das macht wohl 
jedes LCD so. Kann aber meineswissens bei der Intitalisierung gesperrt 
werden.

Ich würde sagen: Datenblatt des LCD-Controllers befragen.
Gast #1197212
Lesenswert?

hallo, danke für die schnelle antwort;) das mit den kommata sehe ich 
ein!
aber groß-und kleinschreibung hätte man schon lange abschaffen sollen^^
funktioniert ja auch im englischen ganz gut ohne ;)

ich initialisiere das display mit cursor inrement!... :(
ich gehe davon aus, dass das display sich richtig initalisiert, da die 
auflöung und die anzahl der zeilen stimmt!

es zeigt ja auch was an, wenn ich ihm nur daten gebe und er 
incrementiert auch fröhlich weiter! (schreibt dann das ganze display 
voll)

nur halt nicht, wenn ich die cursor adresse und display start adresse 
vorher verändere! :(
Gast #1200870
Lesenswert?

smoin zusammen!
das probl hat sich erledigt! war noch ein kleiner fehler auf meinen 
versuchsboard! eine der "guten" steckbrücken von co**** hat mal wieder 
versagt! :(

danke euch und noch ein schönes we :)

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