PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Wenn LCD aktiv, geht nix mehr



coCo
01.11.2006, 20:19
Hi,
ich hab folgendes Problem. Ich hab an PD7 einen Summer angeschlossen und möchte nun am Port C (Pin1-7, Pin0 ist noch nicht belegt) ein 16x2 Zeichen LCD im 4 Bit Modus betreiben. Ich habe nun folgenden Code (nur der wichtige Ausschnitt):



#include "lcd.c"

/* weiterer code ...... */

DDRD |= (1 << PD7);

lcd_init(LCD_DISP_ON);

while(1) {

lcd_clrscr();
lcd_puts("hallo");
summer(1,30);
/* weiterer code ..... */
}

Summer ist eine von mir erstellte Funktion und bringt den Summer zum summen.
Wenn ich nun das Programm übertrage, passiert erst einmal nichts. Schließe ich jedoch an PC7 GND an, fängt der Summer an zu summen wie er soll. Lasse ich alle LCD Funktionen weg, sprich:


while(1) {
summer(1,30);
/* weiterer code ..... */
}
funktioniert alles wie es soll.

Was noch komisch ist, dass genau das selbe Programm auf dem Steckbrett ohne Probleme lief.
Ich kann mir dieses "Phänomen" nicht erklären. Ach ja, und es liegt nich an PC7, wenn ich in der lcd.h für LCD_DATA3_PIN einfach 0 statt 7 eintrage, dann funktioniert der Summer auch nur wenn ich GND an PC0 anschließe. Ebenso kann ich den LCD_PORT beliebig ändern, es kommt immer dasselbe Phänomen vor... :(
Ich würde deshalb annehmen, dass das Problem irgendwo bei LCD_DATA3_PIN und der lcd.h zu suchen ist, aber ich kann mir nicht erklären wie das Programm vor ner Woche auf dem Steckbrett funktionierte und jetzt nimmer. :-k

Ich komm echt nimmer weiter, würde mich über Hilfe freuen :)

MfG

ps: hab das mal ins GCC Forum gepostet, weil ich mal davon ausgehe, dass an der Software etwas net stimmt...[shadow=red:752d97e97b][/shadow:752d97e97b]

coCo
02.11.2006, 19:22
Also habe etwas neues festgestellt. Sobald ich das LCD initialisiere funktioniert gar nichts mehr, erst wenn ich an LCD_DATA3_PIN GND anlege. Hatte denn noch nie jemand dieses Problem?

Muss ja irgendwie an einer Endlosschleife oder so liegen...

izaseba
02.11.2006, 19:43
kann es sein, daß der Busy Flag vom LCD abgefragt wird ?

coCo
02.11.2006, 19:50
Kein Ahnung ](*,)
Ich benutze die LCD Funktionen ohne wirklich zu wissen wie sie das machen was sie machen. Glaube das nennt man Blackbox-Verfahren :D

Also ich hab für den RW Pin einen Schalter installiert, damit ich umschalten kann zwischen GND und PC2. Es geht weder wenn ich den Pin mit GND verbinde noch mit PC2.

In der Software (lcd.h) muss ich nichts umstellen, außer die uC Pins anpassen, so wie im Wiki beschrieben. Früher hat das ganze eigentlich so auch funktioniert-.-

MfG

izaseba
02.11.2006, 20:01
Und was lernt man daraus ?

LCD Ansteuerung ist ganz einfach, da braucht man kaum fremde Software.

Versuch mal rauszufinden, was in lcd_init() , lcd_clrscr(); und lcd_puts();
passiert.

Wenn Du in den Funktionen hängst, müssen sie wohl auf irgendwas warten,
und das ist ja bei Busyabfrage ein LOW auf Bit 7 .

Gruß Sebastian

SprinterSB
02.11.2006, 20:53
Hast du das Interface auf 4 Bit eingestellt?

coCo
02.11.2006, 21:16
Hmm ich hab außer den Ports in der lcd.h nichts weiter eingestellt.

coCo
03.11.2006, 11:14
Ich habe jetzt mal die Befehle aus der Funktion lcd_waitbusy() als Kommentare definiert und jetzt klappts auch. Alles läuft obwohl ich das LCD initialisiert habe :)

Was jetzt noch net geht ist das LCD. Es erscheint nur in der ersten Zeile ein schwarzer Balken...
Das war aber bevor ich die lcd_waitbusy() umgeschrieben hab auch so...

izaseba
03.11.2006, 17:19
Meinst Du, jemand hat lcd_waitbusy() aus Spaß geschrieben ? ](*,)
Wenn Du Busyflag nicht abfragen willst, mußt Du für ausreichende Wartezeiten sorgen, Dattenblatt zu Deinem LCD lässt grüssen.

Das hab ich aber schon mal gesagt.

coCo
03.11.2006, 17:43
Ja ich werd mal schauen, aber mit lcd_waitbusy gings ja auch net -.-

Und früher wo ich das noch auf Lochraster aufgebaut hatte, hat auch alles super geklappt...