Hallo Mikrocontroller-Freunde!
Hab mir ein 2x16 Zeichen Display von reichelt gekauft, nach tutorial
angeschlossen und geproggt. Leider funzt das teil nicht.
Hab einen 8 Mhz Oszillator dran und einen 4433. bitte helft mir, es
bleibt einfach ein schwarzer Balken stehen.
FeeJai
PS: Codebeispiele wären super!
1.) 14 Min zwischen der ersten und der zweiten Anfrage sind deutlich zu
kurz.
2.) Du hättest die Zeit besser genutzt um mit dem Stichwort "schwarzer
Balken" mal in die Suche zu gehen. Da tauchen dann erstaunlicherweise
die verschiedensten Einträge auf.
3.) Meistens liegt es an der Kontrasteinstellung deines Displays.
Hallo,
ich habe das gleiche Display an einen Atmege8 angeschlossen,
meines läuft bis 4 Mhz problemlos.
Bei 8 MHz bleibt auch bei mir das Display mit schwarzen Balken stehen,
also ist es sehr wahrscheinlich ein Timing-Problem.
Veränder mal die Zeitschleifen.
Gruss
Gerd
Du wirst u.U. nicht drumrumkommen, und z.B. mit AVRStudio step by step
durch Dein Programm zu gehen.
Schau Dir auf der linken Seite an, was Deine "Stopwatch" sagt, da
kannst Du genau sehen, welche "Prozessorzeit" gerade ist.
Dann schau Dir die Portausgänge an, besonders natürlich den, an dem das
Display hängt.
Nun musst Du für jede Ausgabe an den LCD-Pins genau schauen, WAS das
ausgegeben wird, und WANN es ausgegeben wird (Stoppwatch).
Achte auch auf das DDR! Und beachte auch den Enable-Pin fuer das LCD
genau!
Das ist zwar alles etwas mühsam, führt aber IMMER zu tiefgreifenden
Erkenntnissen, auch über so manch andere Dinge, die da passieren.
Ich habe beim ersten Mal so etwa eine Stunde gebrauchtm, bis ich hinter
alles gestiegen bin, was da so falsch lief.
Du kannst übrigens den LCD-Ausgabe-Port auch loggen. Die Ausgabedatei
enthält alle ausgegeben Muster inclusiver genauer
Prozessor-"Uhrzeit".
Wenn Du das in Excel weiterverarbeitest, und ein paar Makros
drumrumprogrammierst, dann kriegste exakt, was Du wissen willst: Timing
und Daten am LCD-Port. Ist dann so eine Art virtuelles Oszi inclusive
Logik-Analyser...
WICHTIG: im AvrStudio den Prozessortakt auf deine Takt einstellen (ich
glaube das geht bei den Debug-Optionen).
Damit kannst Du alles rauskriegen, was Du wissen musst.
e.
Ich habe eine Demo mit Stoppuhr, LCD-Display, DCF-77,
Infrarot-Fernbedienung usw. geschrieben. Da ist alles drin, was Du
braucht. Allerding ist meine LCD-Ansteuerung und auch die
Initialisierung etwas anders aufgebaut, als die meisten das machen.
Die Initialisierung arbeitet einfach eine Tabelle mit den Kommandos ab,
die das Diaplay braucht. Dieses Verfahren kann (wenn man auch die
Timings mit in die Tabelle schreibt) für alle möglichen Displays
verwendet werden.
Im Betrieb wird das Display asynchron von einer eigenen Engine
angesteuert. Es wird einfach im Programm ein DisplayBuffer beschrieben,
egal, ob das Display gerade "Zeit hat", oder nicht.
In einer Interrupt Service Routine wird dann aus diesem Buffer (sofern
was drinsteht) immer je ein Zeichen ans Display übertragen und dann aus
dem Buffer gelöscht.
Das funktioniert prima, nur ob es zum Lernen optimal ist, weiss ich
nicht.
Die neueste Version findest Du hier:
http://www.mikrocontroller.net/forum-extern/read-4-65410.html
Schau aber ganz unten in Thread, weil immer wieder mal ein Update
hinzukommt. Aktuell ist es V1.5rc2, kannst Du hier runterladen:
http://www.mikrocontroller.net/attachment.php/66658/main-1.5rc2.zip
Wenn Du aber auch im Programmieren Anfänger bist, dann such Dir
vielleicht was Anderes...
Viel Spass damit.
e.
Ja mei, alles muss Du Dir jatzt aber nicht vorkauen lassen. Les doch
erst mal die Kommentare in der Source. Was da nicht frin steht, dass
kannste gerne fragen.
Hierzu ein Tipp:
Irgendwo auf dieser Site hier oder aber bei avrfreaks habe ich eine
IR-Demo gesehen. Lade Dir die runter, und teste, welche Zahlencodes
deine Fernbedienung hat. Dann suche folgende Stelle im Programm:
// Definitionen Fernbedienung, passend fuer Tevion (aelteres Modell)
#define RC_RIGHT 54
#define RC_LEFT 53
#define RC_UP 32
#define RC_DOWN 33
#define RC_HELP 41
#define RC_OK 23
#define RC_MUTE 19
#define RC_KEY_M 55
und trage die entprechenden Tasten (oder die, die Du nehmen willst)
ein, Wenn Du dann neu kompilierst, muss es auch mir Deienr
Fernbedienung gehen.
e.
Hört sich kalasse an. Das wäre auch recht interessant für meine
anwengung. Muss aber mal was einkaufen fahren, sonst haben wir heut
abend nich viel zu essen. :-)
Werde mich aber nacher mal damit bescheftigen.
Vielen Dank!
So leute, ich glaub ich kauf mir jetzt dann nen atmega8 und einen 4 Mhz
quarzoszillator, damit sollte es dann funktionieren. Trotzdem danke für
deine hilfe!
hai,
es liegt nicht am avr, frag einfach mal das bussy bit vom lcd ab !! hat
dir das noch keiner geschrieben ??
du musst auch ein paar nop befehle zw. den enable und eneable des
display einfügen !! das display ist wesentlich langsamer als der
atmel.
gruss
boris
Ja, eigentlich will ich mir ja weder nen mega8 noch nen 4mhz oszi
kaufen, aber wenn ich keine Progs für find und es selber net
hinkrieg,... dann bleibt eigentlich nix anderes übrig
ich hab dir dem Code nochmal angeschaut.
Wird nicht durch das "ret" bei "delay5ms" das Programm ständig
wiederholt. Fäng das "powerupwait" dann nicht immer wieder von vorne
an???
Ich versteh das nicht ganz...
Vielleicht kann mir ja einer Helfen...
bei mir lief die initialisierung zu schnell, war ein timingproblem,
ich habe einfach zwischen den Befehlen eine zählschleife als Pause
eingefügt, statt das BusyBit abzufragen (das hat irgentwie nicht
funktiioniert)
Gruß
Axel
da ich erst vor einer Woche mit µC und so angefangen habe, sagt mir das
mit der Zählschleife nicht besonders viel.
Könntest du mir vielleicht ein Beispiel Code zeigen?
Danke!
@die Greenhorns: wie wäre es denn wenn Ihr Euch erstmal ein paar
Grundlagen aneignet und nicht gleich wild mit LCD's hantiert?
Das bringt nichts, außer Frust!
Also probiert erstmal was einfaches, nen LED Blinker oder sowas, da
könnt Ihr solche Sachen, wie Portpin-Ansteuerung und
Warte/Zählschleifen austesten...
Und wenn das klappt und Ihr auch wisst, was Ihr da macht, nehmt Euch
nen Datenblatt von nem LCD und lest das!
Tip: Wenn man das Busy-Flag nicht abfragt muss man Sicherheiten
einrechnen und sollte das LCD nur mit ca. 10-20kHz Datenrate belasten.
also muss ein AVR der mit 8MHz läuft ne menge Warteschleifen
vollführen... oder man bedient sich des Timers und schreibt sich ne
Interrupt-Routine...
Marian
so... habs nun endlich geschafft mit dem LCD-Display...
Nun hab ich aber noch eine Frage.
Wie kann ich Texte in der 2. Zeile anzeigen lassen?
Geht das nur mit 8-Bit???
Warum ignoriert ihr die Antworten? Oben im Thread ist doch ein ganz
klarer Hinweis auf eine Source, in der gibts auch eine Lösung für die
Cursorpositionierung auf die zweite Zeile.
e.
Ups... stimmt ;-)
...allerdings hab ich hier im Büro (mach grad Schülerpraktikum :-) kein
winZip... :-P
Muss ich wohl warten bis ich wieder zu Hause bin...
Kein WinZip? Wo gibts denn sowas?
Da Du aber offensichtlich ins Internet kannst, warum hast Dir dann
nicht längst Winzip gesaugt? Kopfschüttel...
Also gut:
/*-----------------------------------
LCD-Cursor Positionieren
-----------------------------------*/
void LcdGotoXy(uint8_t Col, uint8_t Line)
{
const char HD_LineAddr[] = { 0x00, 0x40, 0x14, 0x54 };
LcdPutch(HD_SET_DD_ADR + (Col % 40) + HD_LineAddr [Line % 4],
HD_CMD);
} // LcdGotoXy
Col steht für die x-Position, Line fuer die Zeile.
Obs für 4-Zeiler auch geht, hab ich nicht getestet.
e.
Also, ich hab nen 4MHZ Quarz hingehängt und noch ein wenig im code
rumgeschrieben, jetzt funtkioniert es; werd noch versuchen, auch für 8
Mhz zu bauen.
MfG,
FeeJai
Schtümmt.
Du bist mir nicht böse, wenn ich das jetzt nicht alles in Assembler
umschreibe? ;-)
Aber Du könnstest Dir sicher einige Assembler-Teile ansehen, die der
gcc draus macht....
Müsstest Du Dir dann natürlich optimieren.
e.