LCD-8bit Ansteuerung

Gast #1195549
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 !?
hmm sorry, das hab ich vergessen zu schreiben!
die gibt es natürlich und da rufe ich auch die funktion write_data auf!

ich bin davon ausgegangen, das ich hier nen fehler hab! in der main 
steht sonst auch nicht viel ^^
jemand ne idee !?
Gast
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
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
>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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.