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!
Es gibt doch bestimmt jem., der das so bei sich hat. Könntet ihr das dnn bitte posten? Hab erst vorgestern mit Mikrocontrollern angefangen.
Hört sich nach falsch initialisiert an. Kug mal hier: http://www.geocities.com/dinceraydin/djlcdsim/djlcdsim.html
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.
Danke, dass hilft mir schon alles weiter, hat jemand vielleicht ein programm, welches funktioniert?? bin da leider noch sehr unbeholfen.
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.
Danke, das werde ich gliech mal ausprobieren. Wieviel MHZ hast du?? FeeJai
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.
Entschuldigung! Werds mir mal genau ansehen und dann mal versuchen, in Assemblercode zu überstzen.
Hmmm bei mir läuft das, nur leider hab ich keine Fernbedienung mit dem das Funktioniert! Aber sieht schick aus!
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!
Ich hab schon wieter rumgespielt, aber ich kriegs einfach nicht hin. ich bin zu blöd.
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
hat der 8ter nich einen internen 4Mhz? brauchste keinen kaufen... Gruß AxelR
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 habe das selbe Problem :-( Allerdings versuche ich es mit dem AT90S2313. Bei mir erscheint auch nur ein schwarzer Balken...
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
Also das mit den LEDs hab ich ja auch schon gemacht ;-) nur halt ohne Zählschleife... ...ich kenn die Befehle ja noch gar nicht...
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.
Hm. so nützt das gar nix, sehe ich gerade, da fehlen Dir noch ein paar defines und so. Also saug dir mal WinZip, und dann schau mal elber rein. e.
Danke! Ne, saugen tu ich hier lieber nicht... ;-) ...ich kann ja warten...
Proggst du in assembler??? Wenn ja, kanns du mal den SOurce uploaden?? ich kriegs leider nicht hin FeeJai
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
@ emax Das ist ja alles in C geschrieben. Ich versuch mit dem Assembler klar zu kommen ;-)
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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.