LCD- Wahnsinn!

Gast #72515
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
Gast #72518
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
Gast #72519
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....!  ;-) )
Angehängte Dateien:
Gast #72520
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
Gast #72523
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
Gast #72524
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.
Gast #72525
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?
Gast #72526
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
Angehängte Dateien:
Gast #72527
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.
Gast #72530
Ich tippe mal, dass eine Datenleitung nicht funktioniert (D0).
Vielleicht funktioniert deshalb die Initialisierung auch nicht
richtig.

Stefan
Gast #72531
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
Gast #72532
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
Gast #72533
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.
#72534
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
Gast #72535
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!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.