Hallo! Bin kurz vor dem verzweifeln! Habe ein LCD (4x16, mit einem HD44780) und will das Ding im 8 Bit Modus ansteuern. Ich kriegs nicht hin das DIng zu initialisieren. Alles was er mir zeigt sind schwarze Klötze in der 1. und 3 Reihe,die zeigt er auch wenn ich nur Versorgungsspannung anlege. Sprich: Er macht gar nüschd. Hat vielleicht jemand ein richtig simples Programm in c, am besten schon für nen Atmega8? (lcddemo.c funktioniert auch nicht) Wäre dankbar für jegliche Hilfe, sonst gibt es hier bald lcd Schrott! jörg
Na ja, also ich seh ja was , nur eben nicht das was ich will. zu wenig kontrast kanns ja nicht sein, die Balken sind ja absolut klar...
Hallo Jörg Das Zeile 1 und 3 schwarz sind zeigt doch schonmal, das deine Initalisierung des LCD nicht klappt. Sonst wären alle 4 Zeilen gleichmässig schwarz, je nach Kontrast. Wartezeiten eingehalten ?? Poste deinen Code und dir wird geholfen. MFG Dieter
Ich hoff ihr lacht euch nicht gleich schlapp wenn ihr meinen Code seht, denke es ist recht deutlich zu erkennen dass ich das noch nicht lange mache. Also, vielleicht hilft es ja was. Kann es sein dass meine Pausen zu ungenau sind? also zu kurz kann es fast nicht sein, das hab ich schon probiert, aber vielleicht zu lang? (Oder einfach sch....! ;-) )
Hallo Jörg Auf den ersten Blick fehlen mir die Konfigurationen der Ports. DDRB, DDRD eingang oder Ausgang, sollte man schon einstellen. Schreib mal, welchen Takt und wo genau die Steuerports liegen, habe wenig Lust die jetzt zu suchen. Am besten oben in die Datei rein als Kommentar. Dieter
Hab das eben mal schnell überflogen, weiß auch nicht welchen Compiler du benutzt, aber das dürfte so nicht funktionieren: "outp(00111000,PORTD);" Du hast es nicht als binär gekennzeichnet, deshalb wird es als Dezimal angesehen, und das haut nicht hin. 0b00111000 oder 0x38 oder 56. Ob noch andere Fehler drin sind, danach hab ich jetzt nicht geguckt, aber versuch es erstmal mit den Zahlen. Gruß, Maddin
hallo, also das hab ich schon probiert, aber das mit dem 0b001... akzeptiert der compiler nicht. invalid suffix aber ich probiers mal mit hex zahlen, danke. ich hab winavr.
Hallo! Erfolg! Das mit den verdrehten zahlen wars! wenn ich sie al sHex Zahlen eingebe dann funktionierts und er knallt mir alles mit A´s voll! Vielen dank! Aber dann hab ich noch ne Frage: Wie kann ich ihm denn sagen dass es eine binär zahl ist, wenn 0b nicht funktioniert?
Hallo Jörg War wohl etwas langsam. Schau den Code mal an. Du solltest dir mal überlegen, ob man im 2. Schritt eine Funktion zum schreiben von Befehlen erstellen sollte. Weiterhin viel Spaß Dieter
Ja danke, das werde ich wohl als nächstes in Angriff nehmen, zumindest wenn ich mein nächstes Problem gelöst habe. Ich wollte jetzt so Spasshalber einfach mal nacheinander die Buchstaben für "Hallo" ausgeben. Dabei gibts 2 Probleme. 1. Er fängt an der letzten Stelle der ersten Zeile an zu schreiben. Ich ehme an da hab ich einfach was falsch initialisiert, oder? 2. Was mich mal wieder ziemlich verwirrt: Ich kann nur jeden 2. Buchstaben ausgeben. Also es er gibt z.B immer nur ein "C" aus wenn ich eigentlich ein "B", will, ein F wenn ich ein E will. Woran kann das liegen? Also falls jemand eine Idee hat wäre ich sehr dankbar. Ansonsten schöne Ostern allerseits.
Zu 2.nochmal: also er gibt ein C aus wenn ich ein B will und er gibt aber auch ein c aus wenn ich ein c will. Nur der vollständigkeit halber.
Ich tippe mal, dass eine Datenleitung nicht funktioniert (D0). Vielleicht funktioniert deshalb die Initialisierung auch nicht richtig. Stefan
Der Tip mir Datenleitung D0 ist gut. Schätze mal der liegt dauernd auf HIGH. Kannst du das Display über den Befehl löschen ?? Dürfte dann aber auch nicht gehen. MFG Dieter
Morgen! Ihr hattet mal wieder recht! Hatte mir eine schöne Lötbrücke zwischen Vcc und D0 eingebaut. Jetzt kommen alle Buchstaben wunschgemäß. allerdings immer noch von der falschen Seite. Aber den Fehler werd ich schon noch finden, kann ja eigentlich nur an der Initialisierung liegen... Danke Jörg
Hallo Jörg (Aber dann hab ich noch ne Frage: Wie kann ich ihm denn sagen dass es eine binär zahl ist, wenn 0b nicht funktioniert?) Die binäre Darstellung von Konstanten mit 0bXXXXXXXX ist im C-Standard nicht vorgesehen. Einige Compiler stellen so was zur Verfügung, damit verlierst du jedoch die Portierbarkeit auf andere Systeme. Du könntest dir jedoch ein Includefile basteln, in welchem du mittels #define alle benötigten Zahlen einträgst. Beispiel: #define 0b00000000 0 #define 0b00000001 1 #define 0b00000010 2 #define 0b00000011 3 etc.
Wenn Du portabel sein willst, geht das sehr einfach mit nachfolgendem Macro: #define B8(y) ( 0x##y & 1 \ | 0x##y >> 3 & 2 \ | 0x##y >> 6 & 4 \ | 0x##y >> 9 & 8 \ | 0x##y >> 12 & 16 \ | 0x##y >> 15 & 32 \ | 0x##y >> 18 & 64 \ | 0x##y >> 21 & 128 ) test() { P0 = B8(1); P0 = B8(11); P0 = B8(111); P0 = B8(0000111); P0 = B8(1000); P0 = B8(10000000); P0 = B8(11111111); } Peter
Hey Peter! Dein geniales Macro hat mich mächtig beeindruckt. Ich habe es auch schon getestet. Ich suche schon seit Längerem eine Möglichkeit, für Initialisierungen Binärwerte eingeben zu können. Ich habe ein paar Fragen hierzu: Wenn man nun die Zeile "P0 = B8(111);" hernimmt: Ist dieses Macro wie ein Unterprogramm, das angesprungen wird zu verstehen oder wird der angegebene Wert während des Compilierens fix in das Programm integriert? Was ich damit meine - Geht es schneller, wenn ich schreibe: P0 = 0x07; statt B8(111); Kannst du mir bitte das Makro etwas genauer erklären? Ich würde es nämlich gerne auf 16Bit ausdehnen. Danke Tschüss!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.