www.mikrocontroller.net

Forum: Compiler & IDEs LCD-8bit Ansteuerung


Autor: Till H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!
#include <util/delay.h>
#include <avr/io.h> 
#include "LCD.h"

#define LCD_PORT       PORTC
#define LCD_DDR        DDRC
#define LCD_RW         PD1
#define LCD_EN         PD2
#define LCD_IO1        PD0
#define LCD_IO2        PD3

#define CLEAR    0x01
#define HOME    0x02            

  // PORTC = DB0-7
  // PORTD0 = I/OC1
  // PORTD1 = RW
  // PORTD2 = E
  // PORTD3 = I/OC2

void lcd_init(void)
{
  LCD_DDR  = 0xff;
  DDRD |= (1<<DDD0) |  (1<<DDD1) |(1<<DDD2) |(1<<DDD3);

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

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

void lcd_enable(void)
{
   PORTD |= (1<<LCD_EN);
    _delay_us(1);                   // kurze Pause
   PORTD &= ~(1<<LCD_EN);
}
void write_data(unsigned char data)
{
  // Write RAM data[WD]

  PORTD &= ~(1<<LCD_IO1) & ~(1<<LCD_RW);
  PORTD |= (1<<LCD_IO2);
  LCD_PORT = data;
  lcd_enable();
  _delay_us(20);
}

void write_command(unsigned char command)
{
  PORTD &= ~(1<<LCD_IO1) & ~(1<<LCD_IO2) & ~(1<<LCD_RW);
  LCD_PORT =  command; 
  lcd_enable();
  _delay_us(20);
}

void lcd_clear(void)
{
   write_command(CLEAR);
   _delay_ms(2);
}
 
 
void lcd_home(void)
{
   write_command(HOME);
   _delay_ms(5);
}
timings sind alle eingehalten, hardware hab auch auch überprüft :(
Benutze einen Atmega32, int.8mhz ! lcd50530 von pollin!

was hab ich falsch gemacht !?

Autor: Mike (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Funktion *int main (void)* ist nicht vorhanden. Denn aus dieser 
können erst die anderen Funktionen aufgerufen werden.

Im AVR-GCC Tutorial unter Kapitel 5 Einführungsbeispiel findest Du 
weitere Informationen.

http://www.mikrocontroller.net/articles/AVR-GCC-Tu...

Autor: Till H. (mohman)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 !?

Autor: Lowtzow .... (lowtzow)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
eventuell brauchen die pollin lcd eine negative kontrastspannung!?
hab von denen auch welche daheim die eine negative brauchen würde mich 
nicht wundern wenn es bei deinen auch so wäre.

hast du ein anderes kcd zuj testen da?

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der M50530 benötigt eine positive Displayspannung, die das Pollin 
Display aber selbst erzeugt.
Die Initsequenz sieht auch gut aus. Damit sollte zumindest das LCD an 
gehen.

Autor: Till.H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Matthias Lipinsky (lippy)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Till.H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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! :(

Autor: Till.H (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.