Hallo,
Also ich bin jetzt kurz vorm verzweifeln. Ich habe unzählige
Forenbeiträge angeschaut, viele verschiedene fertige Quellcodes (in C)
und Bibliotheken modifiziert und trotzdem nicht mein 1x16 Zeichen
Display zum arbeiten bewegen können.
In Bascom habe ich ein funktionierendes Programm:
Nur in C wills mir nicht gelingen. Ich hab das Display an einen Atmega8
angehängt. Pinbelegung steht im obigen Bascom Programm. Hab gleich mal
das Datenblatt des LCDs angehängt.
Vielleicht kann mir mal jemand ein Programm schicken, das funktionieren
sollte.
danke
Hallo Tim,
wo ist denn dein Datenblatt hin? -- malsogefragt
ich würde mich wundern, wenn einer hier dir ein fertiges Programm
schickt, du musst die Lösung schon selber herausarbeiten...
Lass mal zuerst die grundlegenden Sachen ausschliessen:
1.) kannst du in C Programmieren??
Wenn "nein": erst das hier lesen und verstehen:
http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial
2.) Ist es dir klar, wie ein LCD angesteuert wird??
Wenn "nein" : guggstdu hier:
http://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD
3.) wenn du die beiden oberen Links durchgearbeitet hast, so kannst du
definitiv kein Problem mehr haben --> Problem gelöst, Thread
geschlossen :-)
Gruss:
"Ich bekomme mein LCD nicht zum laufen" -
Seufzernichtmehrhörenkannmensch
Und nochwas: Hier im Forum gibt es eine Suchfunktion, mit Hirn benutzt
bringt sie echt was.....
@ Dennis (Gast)
> wo ist denn dein Datenblatt hin? -- malsogefragt
Das Datenblatt hatte Tim versehentlich an einen anderen Thread
angehängt. Er hatte auch darum gebeten, dass jemand diesen Lapsus
korrigiert.
Ich hatte hier als 3. Nachricht einen Link auf den anderen Thread
gesetzt.
Leider ist inzwischen der Thread mit dem Datenblatt sowie mein Hinweis
darauf spurlos verschwunden.
Ich hatte aber aus Neugier das Datenblatt heruntergeladen und hänge es
jetzt an...
> der Rest deiner Nachricht...
Verschlägt mir die Worte.
>> der Rest deiner Nachricht...>Verschlägt mir die Worte.
anderen verschlaegts die sprache, wenn jeden zweiten tag die gleichen
fragen auftauchen, obwohl sich einige leute einen haufen arbeit machen
und ganze tutorials drueber schreiben:
http://www.mikrocontroller.net/forum/1?filter=lcd
déjà vu wrote:
>>> der Rest deiner Nachricht...>>Verschlägt mir die Worte.> anderen verschlaegts die sprache, wenn jeden zweiten tag die gleichen> fragen auftauchen, obwohl sich einige leute einen haufen arbeit machen> und ganze tutorials drueber schreiben:>> http://www.mikrocontroller.net/forum/1?filter=lcd
Stell dir vor die gleichen Fragen würden nicht mehr regelmäßig
auftauchen - Google müsste seine ganze Werbung umkrempeln ;-)
>anderen verschlaegts die sprache, wenn jeden zweiten tag die gleichen>fragen auftauchen
Offenbar nicht, oder warum kommt von diesen "anderen" stets ein
grenzwertiger Spruch so in Richtung "Du bist so blöd und ich bin der
Oberpeiler, werde dir aber nicht helfen"?
man muss kein oberpeiler sein, um die suchfunktion benutzen zu koennen.
aber lassen wir das. da koennte man auch mit einer wand reden,
spaetestens uebermorgen kommt die naechste frage nach lcds,
led-vorwiderstaenden oder nach dem ultimativ richtigen controller fuer
einsteiger. ich hoffe die 'aehliche
beitraege'-funktion(Beitrag "Neue Funktion: ähnliche Beiträge (experimentell)") wird
bald eingefuehrt, dann hat das endlich ein ende.
Ich danke für die freundlichen Hinweise auf die Tut's. Trotzdem hakts
noch wo. Hab mal den Code gepostet, so wie er im LCD-Tutorial steht -
aber auf mein LCD umgebogen.
temp2=temp2&0x0F;// unteres Nibble holen und maskieren
51
PORT_LCD&=0xF0;
52
PORT_LCD|=temp2;// setzen
53
lcd_enable();
54
55
DELAY50US();
56
}
57
58
// erzeugt den Enable-Puls
59
voidlcd_enable(void)
60
{
61
PORT_LCD|=(1<<LCD_EN);
62
asm("nop");
63
asm("nop");
64
asm("nop");
65
PORT_LCD&=~(1<<LCD_EN);
66
}
67
68
// Initialisierung:
69
// Muss ganz am Anfang des Programms aufgerufen werden.
70
// LCD_PORT (DDRx) muss bereits als Ausgang eingestellt sein.
71
voidlcd_init(void)
72
{
73
unsignedchartemp3=50;
74
75
while(temp3!=0)
76
{
77
_delay_ms(5);// 5ms = 250ms warten
78
temp3=temp3-1;
79
}
80
81
// muss 3mal hintereinander gesendet werden zur Initialisierung
82
PORT_LCD&=0xF0;
83
PORT_LCD|=0x03;// 0b00000011
84
lcd_enable();
85
PORT_LCD|=0x03;
86
lcd_enable();
87
PORT_LCD|=0x03;
88
lcd_enable();
89
90
// 4bit-Modus einstellen
91
PORT_LCD|=0x02;
92
lcd_enable();
93
_delay_ms(5);
94
95
// 4Bit / 1 Zeile / 5x8
96
lcd_command(0x20);
97
98
// Display ein / Cursor aus / kein Blinken
99
lcd_command(0x0C);
100
101
// inkrement / kein Scrollen
102
lcd_command(0x06);
103
}
104
105
// Sendet den Befehl zur Löschung des Displays
106
voidlcd_clear(void)
107
{
108
lcd_command(CLEAR_DISPLAY);
109
_delay_ms(5);
110
}
111
112
// Sendet den Befehl: Cursor Home
113
voidlcd_home(void)
114
{
115
lcd_command(CURSOR_HOME);
116
_delay_ms(5);
117
}
Die main.c ist auch die selbe wie im Tutorial aber DDRB statt DDRD
eingestellt.
Das, was ich am LCD zu sehen bekomme ist, dass die ersten 8 Kästchen
durch die Hintergrundbeleuchtung komplett schwarz sind und sich lauter
"w" darin befinden. Also 8 w's nebeneinander.
auf freundliche unterstützung hofft
tim