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...
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):
Summer ist eine von mir erstellte Funktion und bringt den Summer zum summen.Code:#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 ..... */ }
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:
funktioniert alles wie es soll.Code:while(1) { summer(1,30); /* weiterer code ..... */ }
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.
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]
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...
kann es sein, daß der Busy Flag vom LCD abgefragt wird ?
Linus TorvaldSoftware is like s e x: its better when its free.
Kein Ahnung
Ich benutze die LCD Funktionen ohne wirklich zu wissen wie sie das machen was sie machen. Glaube das nennt man Blackbox-Verfahren
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
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
Linus TorvaldSoftware is like s e x: its better when its free.
Hast du das Interface auf 4 Bit eingestellt?
Disclaimer: none. Sue me.
Hmm ich hab außer den Ports in der lcd.h nichts weiter eingestellt.
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...
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.
Linus TorvaldSoftware is like s e x: its better when its free.
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...
Lesezeichen