hallo allerseits
Ich gehe nach dem Buch von Dr. G. Spanner "AVR-Mikrocontroller in C
programmieren" vor, um ein 2x16 LCD am atmega8 anzuschliessen. Ich habe
den LCD 2x16 genauso wie im Buch beschrieben am atmega8 angeschlossen,
nämlich: Die Daten-Pin 4-7 am LCDPORT D4-D7, RS an PIN D2 und RS an PIN
D3. Was noch fehlt sind die Kondensatoren und der externen Quarz, dafür
verwende ich die interne Frequenz 1000000 vom ATmega8. Als Code habe ich
die Header-Datei auf S. 160 f. übernommen (siehe auch Anhang
LCD_display.h). Als Software benutze ich den Programmer's Notepad 2 von
WinAVR 20100110 und als Programmer ein Pocket Programmer von sparkfun.
Den Programmer habe ich schon vielfach erfolgreich für den Atmega32
eingesetzt. Meine zwei Fragen lauten:
1. Wenn ich den ATmega8 über den Programmer's Notepad 2 programmiere,
geschieht vorerst gar nichts. Wenn ich aber dem LCD kurz den Saft
abdrehe (z.B. USB Stecker ziehen) und wieder einschalte erscheint mein
übermittelter Text. Was ist hier los? Das Header File findet Ihr im
Anhang.
2. Ich möchte gerne das busy Flag lesen. Welcher freie Pin kann ich
hierzu verwenden? Ich habe irgendwo etwas vom Pin D7 gelesen, aber
dieser wird ja bereits als Datenpin verwendet.
Bin echt froh, wenn mir jemand auf die Sprünge helfe könnte! Danke.
Ich kann Dir zwar bei dem C-Programm nicht helfen, weil ich es nicht
beherrsche, habe aber dennoch diesen Effekt schon erlebt.
Es lag daran, daß der Kontroller schon die Initialisierungssequenz
zum Display schickt, während das noch nicht "wach" ist.
Ich habe es so gelöst, daß ich die sog. Startup-Time des Kontrollers
per Fusebits auf Maximum gesetzt habe, oder als alte Naive,
äh Alternative einmalig bei Programmstart ca. 200ms warten ließ.
MfG Paul
So ist das halt wenn man Quatsch aus nem Buch zusammenkopiert anstatt
mal selber zu denken. Hast du dir überhaupt mal das Datenblatt zum LCD
Controller angeguckt? Nein warum auch. Darum hast du auch vom Busy Flag
keinen Schimmer. Ach was reg ich mich auf... bringt doch nix.
Polo H. schrieb:> 1. Wenn ich den ATmega8 über den Programmer's Notepad 2 programmiere,> geschieht vorerst gar nichts. Wenn ich aber dem LCD kurz den Saft> abdrehe (z.B. USB Stecker ziehen) und wieder einschalte erscheint mein> übermittelter Text. Was ist hier los? Das Header File findet Ihr im> Anhang.
Das man mit diesem Initialisierungs-Code
ein LCD nicht aus jedem beliebigen Zustand heraus zuverlässig
initialisieren kann, wundert mich nicht wirklich.
Die korrekte Initialisierungssequenz ist ausgeklügelt, so dass sie das
LCD zuverlässig(!) aus jedem Modus (wenn also das LCD entweder im 4-Bit
Modus ODER im 8-Bit Modus ist UND auch dann noch, wenn gerade ein
anderes Kommando im Gange ist) korrekt in einen 4-Bit Modus bringen
kann. Diese korrekte Initialisierung abzukürzen wird dann eben so
bestraft, dass man das LCD nur noch aus dem einzig zuverlässig
annehmbaren Zustand nach dem Anlegen der Versorgungsspannung in den
gewünschten Modus bringt.
Sprich: Diese Initialisierung ist Pfusch.
> 2. Ich möchte gerne das busy Flag lesen.
Wozu?
Busy Flag wird bei diesen LCDs überschätzt. Das bringt nicht wirklich
viel. Wenn überhaupt. Wenn du mit den Ausgaben auf das LCD nicht zu
rande kommst, dann rettet das Busy Flags auch nichts mehr.
>Busy Flag wird bei diesen LCDs überschätzt.
Und kann während der Initialisierung gar nicht abgefragt werden.
Wenn man den korrekten Software Reset durchführt braucht
man die Delays sowieso.
Hat jemand mal ne Hausnummer was die Busy Abfrage wirklich bringt?
Außer das das Programm klemmen bleibt wenn kein Display dran ist
sehe ich keinen Vorteil in einer Busy Abfrage.
Durch das Busy-Flag braucht man halt keine Befehlspezifischen
Wartezeiten mehr. Jedes Kommando braucht ja im Prinzip ne andere
Wartezeit. Und oftmals macht das auch keiner und man wartet immer die
gleiche Zeit nach einem Befehl, und meist viel zu lange. Durch das
Busy-Flag kann man das im Code einheitlich machen und wartet garantiert
nie zu lange oder zu kurz.
Allerdings natürlich nicht während dem Init. Da hat man nen festen
Ablauf und für jeden Schritt ne feste Wartezeit.
gruß cyblord
holger schrieb:> Hat jemand mal ne Hausnummer was die Busy Abfrage wirklich bringt?
Best Practice. Wer vernünftig mit irgendeinem Peripheral umgeht, wird
immer ein vorhandenes Busysignal verwenden bzw. einen entsprechenden
Interrupt einsetzen.
Wenn das nicht so wäre, hätten wir heute noch Delays für 5MB Festplatten
im SATA Treiber (es könnte ja jemand eine Platte via SATA - PATA
Konverter anschließen).
Und wer beim LCD mal genauer nachliest, wird feststellen, daß spätestens
nach der dritten Wiederholung des ersten Init-Bytes die Readyleitung
funktioniert. Und wenn man dann auch noch nicht am Ende eines
Schreibzyklus auf Ready wartet, sondern das nächste Byte erst schreibt,
wenn das Display (oder jedes andere Device) Ready ist (wie man das
generell machen sollte), erreicht man die höchstmögliche
Ausgabegeschwindigkeit. Ansonstens addieren sich Delay und
Datenaufbereitung.
Zuguterletzt, wer ohne Timeout auf ein irgendein Signal wartet ....
MfG Klaus
Hi
AABest Practice. Wer vernünftig mit irgendeinem Peripheral umgeht, wird
Aimmer ein vorhandenes Busysignal verwenden bzw. einen entsprechenden
>Interrupt einsetzen.
Bei einem Grafikdisplay sehe ich das ein. Bei einem Textdisplay dieser
Größenordnung ist es vollkommen egal.
MfG Spess
cyblord ---- schrieb:> ich mich auf... bringt d
Diesen Beitrag ist für den A... und hättest Du Dir und mir ersparen
könnnen.
Wenn Ihr unter Euch schon mal nicht über das Busy Flag einig seid,
bringen destruktive Beiträge überhaupt nichts. Das Busy Flag möchte ich
verwenden, da ich nicht für jeden Befehl seine Ausführungszeit eintippen
will!
Karl Heinz Buchegger schrieb:> Wenn du mit den Ausgaben auf das LCD nicht zu> rande kommst, dann rettet das Busy Flags auch nichts mehr.
Darum geht es mir überhaupt nicht!
Polo H. schrieb:> Karl Heinz Buchegger schrieb:>> Wenn du mit den Ausgaben auf das LCD nicht zu>> rande kommst, dann rettet das Busy Flags auch nichts mehr.>> Darum geht es mir überhaupt nicht!
Ja ok. Aber worum gehts dann?
Den R/W Pin vom LCD an irgendeinen freien Portpin zu verdrahten und den
noch laut Handbuch mitzubenutzen kann doch jetzt nicht wirklich das
große Problem sein, wenn du weißt was du tust.
Solange du allerdings derartige Sätze konstruierst
> Welcher freie Pin kann ich hierzu verwenden? Ich habe irgendwo> etwas vom Pin D7 gelesen, aber dieser wird ja bereits als Datenpin> verwendet.
bezweifle ich allerdings letzteres.
Und da frage ich mich, ob du die Sache nicht erst mal zurückstellen
solltest bis du mehr Erfahrung gesammelt hast. Zumal der Gewinn durch
das Busy nicht wirklich berauschend ist. Solch gewaltige Datenmengen
bewegt man nicht an ein Text-LCD, als das das groß ins Gewicht fallen
würde.
Spess53 schrieb:> Bei einem Grafikdisplay sehe ich das ein. Bei einem Textdisplay dieser> Größenordnung ist es vollkommen egal.
Mag sein, aber wer einmal schlampt ...
MfG Klaus
holger schrieb:> Hat jemand mal ne Hausnummer was die Busy Abfrage wirklich bringt?
Zahlen hab ich keine.
Aber die Fleury Lib benutzt Busy. Testweise hab ich da mal einfach bei
einem 16*2 die Busy Abfrage durch einen delay ersetzt.
Ausser das das Init bei nicht angeschlossenem LCD nicht mehr hängt,
konnte ich keinen praktischen Unterschied feststellen. Mag sein, dass
die Texte einen Tick langsamer rauskamen. Das fällt aber schon mehr in
die Kategorie 'ich erahne es, weil ich weiß, das es langsamer sein
müsste'
Karl Heinz Buchegger schrieb:> Ja ok. Aber worum gehts dann?> Den R/W Pin vom LCD an irgendeinen freien Portpin zu verdrahten und den> noch laut Handbuch mitzubenutzen kann doch jetzt nicht wirklich das> große Problem sein, wenn du weißt was du tust.
Es ist nicht "laut Handbuch" und das RW ist tatsächlich kein grosses
Problem.
Viele Posts ohne grossen Inhalt, geschweige denn Lösungsvorschläge. Dass
der Code aus dem Buch zu wünschen übrig lässt, war schon vorher klar.
Offenbar können sich einige User hier nur dann profilieren, wenn sie
andere runtermachen. Dieses Forum ist für mich gestorben. Tschüss.
Polo H. schrieb:> Karl Heinz Buchegger schrieb:>> Ja ok. Aber worum gehts dann?>> Den R/W Pin vom LCD an irgendeinen freien Portpin zu verdrahten und den>> noch laut Handbuch mitzubenutzen kann doch jetzt nicht wirklich das>> große Problem sein, wenn du weißt was du tust.>> Es ist nicht "laut Handbuch"
wonach denn sonst?
Im Datenblatt des LCD sind die genauen Vorgänge aufgeschlüsselt.
Nur damit das klar ist: wir reden hier von der einzig relevanten Bibel:
Das Datenblatt zum LCD bzw. dessen Kontroller. Dein halbseidenes Buch
kannst du vergessen. Das interessiert keinen, solange da solche
Codebeispiele drinnen sind.
> Offenbar können sich einige User hier nur dann profilieren,> wenn sie andere runtermachen.
Niemand macht dich runter. Aber in erster Linie machst DU deine Arbeit
und nicht wir. Wenn du hier her gekommen bist, mit der Erwartung, dass
dir jemand sagt: verbinde Pin sowieso mit Pin sowieso und dann noch
diese Code-Änderungen, dann hast du mit Zitronen gehandelt. Dann das
wird nicht passieren.
ALso: Such dir einen schönen Pin aus, sieh dir im Datenblatt an, wie man
die R/W Leitung ansteuern muss und dann ... programmiere es.
> andere runtermachen. Dieses Forum ist für mich gestorben. Tschüss.
Tschüss.
>Bei einem Grafikdisplay sehe ich das ein. Bei einem Textdisplay dieser>Größenordnung ist es vollkommen egal.
Wobei es ja auch nur sinnvoll ist etwas darauf zu schreiben
wenn der Inhalt sich ändert. Kleiner RAM Buffer erspart
dann die Zeit für das längste Kommando -> ClearScreen.
Überschreiben statt löschen.
So ein lustiger Kauz. Das erste was ich jemals mit Mikrocontrollern
gemacht habe ist mir alles, für genau so ein Display wie du es hast,
selber zu schreiben. Also Initialisierung, Buchstaben senden, Sätze
senden, Zahlen mit veränderbarem Kommazeichen und solchem
Schnickschnack. Das war ohne große Probleme an einem Tag zu schaffen,
wenn man sich nur mal mit dem Datenblatt und dergleichen
auseinandersetzt. Keiner in diesem Forum möchte Lösungen für jemand
präsentieren der nicht einmal die Grundlagen durcharbeitet und dann noch
motzt. Ich denke mit der Art wird es im nächsten Forum nicht besser. :)
>Zuguterletzt, wer ohne Timeout auf ein irgendein Signal wartet ....
Ich hab irgendwo noch ne State Machine rumliegen die das Programm
selbst als Delay für das Display benutzt. Da warte ich auf gar nichts.
Einfach irgendwo in die Main Loop reinkopieren. Jedes mal wenn es da
vorbei kommt wird ein State zum schreiben auf das Display ausgeführt.
State 1 Daten anlegen, State 2 Enable high, State 3 Enable low usw.
Geht auch;) Ist nur etwas gewöhnungsbedürftig.
holger schrieb:> Ich hab irgendwo noch ne State Machine rumliegen die das Programm> selbst als Delay für das Display benutzt. Da warte ich auf gar nichts.> Einfach irgendwo in die Main Loop reinkopieren. Jedes mal wenn es da> vorbei kommt wird ein State zum schreiben auf das Display ausgeführt.> State 1 Daten anlegen, State 2 Enable high, State 3 Enable low usw.> Geht auch;) Ist nur etwas gewöhnungsbedürftig.
Wer so denkt, kann dann auch mal eine Debugausgabe in einen
Interrupthandler kodieren, ohne das Timing zu stören. Best Practice ...
MfG Klaus
1. Ich wünsche dass ich mein Account von diesem Forum gelöscht wird
2. Da dieser Thread von den meisten Usern vorwiegend als Kotzeimer ohne
Bezug zu meinen Fragen benutzt haben, wünsche ich ebenfalls die
Löschung
des Strangs.
H. Polo schrieb:> 1. Ich wünsche dass ich mein Account von diesem Forum gelöscht wird> 2. Da dieser Thread von den meisten Usern vorwiegend als Kotzeimer ohne> Bezug zu meinen Fragen benutzt haben, wünsche ich ebenfalls die> Löschung> des Strangs.
LOL!
1. Was fürn Account? Da steht Gast...
2. Les endlich das Datenblatt oder kauf dirn Arduino da is alles für
Leute wie dich vorgekaut (Lösungsvorschlag!)
3. Leg dir eine dickere Haut zu, wenn du in Internet-Foren verkehrst.
Wenn du wegen dem bischen hier im Thread schon angepisst bist ...
Na, prost Mahlzeit. Da hast du noch nie erlebt wie es ist, wenn
die Wogen mal wirklich hoch gehen.
4. Ich wünsch mir auch viel wenn der Tag lang ist
5. Was isn nun? Hast du die Initialisierung laut LCD-Datenblatt soweit
korrigiert, dass sie das LCD zuverlässig aus jedem Zustand in den
4-Bit Modus bringen kann?
Soll mal wer drüber schauen?
6. Die Diskussion über Sinn und Nutzen der Abfrage des Busy Bits und
damit zusammenhängender Strategien zum LCD Update ist keineswegs
ein 'Kotzeimer'. Du könntest daraus was lernen.
Nur zur Erinnerung: Wir halten hier im Forum sehr viel davon, dass DU
die Arbeit machst. Und nicht wir dir hier die Dinge auf einem
Silbertablett servieren. Du kriegst gerne Hinweise und Tips und je nach
Schwierigkeitsgrad auch Code. Aber für einfache Sachen, die man noch
dazu an jeder Internet-Ecke finden kann, gibts selten mehr als
entsprechende zielführende Hinweise.
Martin Wende schrieb:> Les endlich das Datenblatt oder kauf dirn Arduino
Ich habe bereits 4x16, 4x20 und 2x16 LCD zum Laufen gebracht. Offenbar
ist hier keiner in der Lage herauszufinden, dass im ldc_init() bloss ein
bit gefehlt hat, um das LCD richtig zu initialisieren. Und ebenfalls die
Aussagen zum busy Flag: ellenlangen Diskussionen ohne Inhalt. Für dieses
Forum braucht man nicht nur eine dicke Haut, sondern muss auch eine
grosse Portion Dummheit.
H. Polo schrieb:> sondern muss auch eine> grosse Portion Dummheit.
Na wenn du das sagst ....
Danke übrigens, dass du uns mitteilst, dass die Hersteller des
Standard-Controller-ICs ihren eigenen Chip nicht kennen. Denn: laut
denen fehlt in deiner Initialisierung nicht nur 1 Bit. Aber was wissen
denn die schon?
Nene, hier wird nur nix aufm Silbertablett gereicht ;)
>Ich habe bereits 4x16, 4x20 und 2x16 LCD zum Laufen gebracht.
Mit Copypaste kann das auch meine Katze!
Karl Heinz Buchegger schrieb:> Danke übrigens, dass du uns mitteilst, dass die Hersteller des>> Standard-Controller-ICs ihren eigenen Chip nicht kennen.
Ich denke, meine Ausgangskonfiguration habe ich in meinem ersten Post
beschrieben, mit Chip und Code.
Ich bin jetzt an der Arbeit. Meinen Account sende ich heute Abend und
bitte diesen zu schliessen.
H. Polo schrieb:> Karl Heinz Buchegger schrieb:>> Danke übrigens, dass du uns mitteilst, dass die Hersteller des>>>> Standard-Controller-ICs ihren eigenen Chip nicht kennen.>> Ich denke, meine Ausgangskonfiguration habe ich in meinem ersten Post> beschrieben, mit Chip und Code.
Welchen Teil von:
Deine Initialisierung ist nicht vollständig
verstehst du nicht.
Im Datenblatt des LCD-Controllers steht drinnen, wie die korrekte
Ansprache zu Beginn sein muss, damit man danach auf jeden Fall IMMER im
4-Bit Modus landet. Und zwar egal in welchem Zustand das LCD vorher war.
Du führst dich hier auf wie der große Zampano und weigerst dich
beharrlich endlich mal einen Blick ins Datenblatt zu werfen und dir
anzusehen, was das Datenblatt über die korrekte Initialisierung in den
4-Bit Modus zu sagen hat. Und das, obwohl dir das seit gestern immer
wieder nahe gelegt wurde!
> Ich bin jetzt an der Arbeit. Meinen Account sende ich heute Abend und> bitte diesen zu schliessen.
Du hast hier keinen Account, weil du dich gar nicht angemeldet hast.
Wenn du mal dein Posting ansiehst, dann steht da ein "(Gast)" neben
deinem Namen. Das Zeichen für: Du hast keinen Account
Aber auch das wurde dir schon gesagt. Ignorierst du eigentlich auf
Arbeit auch alles, was andere dir sagen?
Karl Heinz Buchegger schrieb:> Du hast hier keinen Account, weil du dich gar nicht angemeldet hast.> Wenn du mal dein Posting ansiehst, dann steht da ein "(Gast)" neben> deinem Namen. Das Zeichen für: Du hast keinen Account
Hier liegst Du falsch. Ok, vor meinem ersten Post habe ich mich leider
nicht angemeldet. Meine Registrierung stammt aber vom 4.12.2012 als:
atmegafreak
> Aber auch das wurde dir schon gesagt. Ignorierst du eigentlich auf> Arbeit auch alles, was andere dir sagen?
Überhaupt nicht, sofern es auch zutrifft. Im allgemeinen gelte ich als
lernfähig, nicht umsonst habe ich ein Masterdiplom und habe kürzlich
eine Prüfung in Elektotechnik mit der Maximalnote abgeschlossen.
Ich bin oft in Foren unterwegs, nicht nur die Robotik interessiert mich
sehr, sondern auch Sport oder die Programmierung, so dass ich gerne in
einschlägige Foren schreibe oder mitlese. Nur, ein derartiger Mob wie
hier ist mir in einem Forum noch nie begegnet. Kritik ist das eine, aber
bloßstellen hat mit Mobbing zu tun.
Was heisst "große Zampano"? Dessen bin ich mir überhaupt nicht bewusst.
Ich habe zwei konkrete Fragen gestellt und habe auch konkrete Antworten
erhalten. Wenn es so sein sollte, dass man vorher gewissen Leuten lange
in den A.. kriechen muss um eine Antwort zu erhalten, bin ich hier
wirklich fehl am Platz.
Polo H. schrieb:> Karl Heinz Buchegger schrieb:>> Du hast hier keinen Account, weil du dich gar nicht angemeldet hast.>> Wenn du mal dein Posting ansiehst, dann steht da ein "(Gast)" neben>> deinem Namen. Das Zeichen für: Du hast keinen Account>> Hier liegst Du falsch. Ok, vor meinem ersten Post habe ich mich leider> nicht angemeldet. Meine Registrierung stammt aber vom 4.12.2012 als:> atmegafreak
Aha.
Und das soll ich woher wissen?
Schau dir deine Postings an. Steht da irgendwo atmegafreak?
Ausserdem können das die Moderatoren nicht. Schreib Andres eine Mail und
er löst deinen Account auf.
Komm lass es.
Mir wird das zu blöd.
Polo H. schrieb:> Hier liegst Du falsch. Ok, vor meinem ersten Post habe ich mich leider> nicht angemeldet. Meine Registrierung stammt aber vom 4.12.2012 als:> atmegafreak
Und woher soll jemans Wissen dass dein Gast Account Polo und atmegafreak
diesselbe Person ist? Und warum schreibst du nicht unter deinem
richtigen Account?
> Überhaupt nicht, sofern es auch zutrifft. Im allgemeinen gelte ich als> lernfähig, nicht umsonst habe ich ein Masterdiplom und habe kürzlich> eine Prüfung in Elektotechnik mit der Maximalnote abgeschlossen.
Maximalnote ist doch 4 oder? 5 ist bei uns "nicht bestanden" :-p
In der Zeit in der du hier rumzeterst und über Accountlöschung streitest
hättest du dir mal das Datenblatt zu deinem LCD(-Controller) ansehen
können. Das war eigentlich das Hauptproblem in diesem Thread. Dass du
irgendwie keine Ahnung von dem Zeug hast, munter Code kopierst und dann
hier wirre Fragen stellst die man nicht ordentlich beantworten kann,
weil da von deiner Seite schon zu wenig Kentnisse da sind. Kannst du
aber ändern. Oder du machst halt nen rauschenden Abgang und alle andere
sind voll doof.
gruß cyblord
> // 4-bit Modus config> sbi(LCDPORT, LCD_PIN_D5); cbi(LCDPORT, LCD_PIN_D4);>> // 4-Bit Modus start> sbi(PORTD, LCD_PIN_E); cbi(PORTD, LCD_PIN_E);> _delay_ms(5);
Hm, würde ausprobieren mehr Warteschleifen dazwischen plazieren. Z.B.
zwischen sbi() und cbi() o.Ä. Vielleicht ist 1MHz für den Teil zu
schnell?
Eumel schrieb:> cyblord ---- schrieb:>> Masterdiplom>> Aha, ein Masterdiplom. Scheint ein neuartiger Abschluss zu sein.>> Witzfigur.
Hast recht, aber das Zitat ist nicht von mir. Bitte richtig zitieren!
Tjo nur sagt son Master nix aus was derjenige wirklich kann.
Studiere grade technische Informatik und das Studium hat mit der Praxis
nicht wirklich viel zu tun.
Hastes denn jetzt eigentlich endlich mal geschafft das Datenblatt zu
lesen?
Bin sogar mal so nett es zu verlinken:
http://www.alldatasheet.com/datasheet-pdf/pdf/63673/HITACHI/HD44780.html
Hier noch AUSFÜHRLICHSTE Informationen, hätte man mit etwas Google
finden können!:
http://www.sprut.de/electronic/lcd/
Karl Heinz Buchegger schrieb:> Mir wird das zu blöd.
Da sind wird entlich einmal gleicher Meinung. Die letzten Post aus dem
Mob zu kommentieren, bringt eh nichts. Deshalb bin ich jetzt weg.
Polo H. schrieb:> Da sind wird entlich einmal gleicher Meinung. Die letzten Post aus dem> Mob zu kommentieren, bringt eh nichts. Deshalb bin ich jetzt weg.
Viel Spaß noch mit deinem Masterdiplom :)