mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LCD- Wahnsinn!


Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal den kontrast eigestellt?

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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....!  ;-) )

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch eine sehr gute Seite zum Thema

http://www.sprut.de/electronic/lcd/index.htm


MFG
Dieter

Autor: Jörg (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
sorry.hab das mal ergänzt.

Autor: Maddin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dieter B (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Jörg

Dann zeig mal deinen aktuellen Code.

MFG
dieter

Autor: Stefan Kleinwort (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich tippe mal, dass eine Datenleitung nicht funktioniert (D0).
Vielleicht funktioniert deshalb die Initialisierung auch nicht
richtig.

Stefan

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Jörg (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian Schifferle (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Absoluter Anfänger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.