LCD- Wahnsinn!

Gast #72515
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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 #72525
Lesenswert?
• ▲
▼
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 #72527
Lesenswert?
• ▲
▼
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 #72532
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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
Lesenswert?
• ▲
▼
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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

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.