Hallo, ich versuch grade die spannung in zahlen zw. 0 und 1023 am LCD auszugeben, aber es will nicht so klappen. Könntet ihr mal meinen Code betrachten?
Hab den Code betrachtet, sieht schön aus. Gruss, Felix
"nicht klappen". Das heisst so viel wie: Findet mal raus, was hier schief läuft und warum. Geht's noch? Zerleg das Programm und nimm es stückweise in Betrieb.
>"nicht klappen". Das heisst so viel wie: Findet mal raus, was hier >schief läuft und warum. Geht's noch? Zerleg das Programm und nimm es >stückweise in Betrieb. Hallo, Wenn ich das Programm zerlege... wie soll ich dann rausfinden ob es klappt? Dann hab ich ja keine Anzeige oder sonstiges.
Die Frage ist, was nicht geht: 1. wird das Programm ohne Fehlermeldungen compiliert 2. Klappt das Flshen nicht 3. Was macht das Display 4. Wie sieht die Hardware aus Otto
Hallo, 1.) Also da kommt: Assembly complete, 0 errors. 2 warnings Hier die Warnungen: C:\Users\Michael\Documents\ADC.asm(14): warning: Register r26 already defined by the .DEF directive C:\Users\Michael\Documents\ADC.asm(15): warning: Register r27 already defined by the .DEF directive 2.) Das Flashen selbst klappt einwandfrei. 3.) Das Display zeigt einfach einen schwarzen Streifen an. 4.) Falls du das meinst: Hab einen ATmega8 und ein "Displaytech" Display. Der Controller ist mit dem Display (4bit) richtig verbunden, da die Textausgabe funktioniert. Dann ist noch AREF über einen 0,1µF Kondensator an Masse geschaltet, GND rechts auch an Masse und ADC0 geht über einen Poti an einen 7805, an welchem 5V probeweise gemessen werden sollen.
und wo sind: lcd_enable delay5ms lcd_command Otto
R26 und R27 haben bereits Namen, nämlich XL und XH. Der AVR hat aber nicht nur 16 Register, sondern 32. Es gibt nämlich auch noch die Register R0 bis R15. Die meisten Arbeiten lassen sich damit auch erledigen, nur eben keine Konstanten-Zugriffe. Dumme Frage: Was soll das LCD mit Steuerzeichen 13 (CR) machen? Wenn Du schon Code aus verschiedenen Programmen zusammenkopierst, dann solltest Du auch versuchen, ihn zu verstehen. Ansonsten wird das nix. KH
Hallo, >lcd_enable >delay5ms >lcd_command Die sind schon dabei. ich dachte, alle Routinen kopier ich nicht mit hin >Der AVR hat aber nicht nur 16 Register, sondern 32. Es gibt nämlich auch >noch die Register R0 bis R15. Die meisten Arbeiten lassen sich damit >auch erledigen, nur eben keine Konstanten-Zugriffe. naja, das ist ja egal. Is ja register R26 & R27 und nicht eins von 0-15 Dann lösch ich das mit dem Carriage Return am besten mal wieder, wenns nix bringt.
1. prüfe ob der Controller läuft: - lasse eine LED blinken 2. prüfe, ob das LCD funktioniert - nimm ein unverändertes Programm, dass ein LCD ansteuert 3. Modifiziere es erst dann Otto
Naja, wenn es egal ist, dann ist es ja gut. Ich würde Pointerregister (r26..r31) jedenfalls nicht für Variablen zur Zeitzählung verschwenden. Das geht mit unteren Registern oder RAM genausogut. Auf die unteren Register hatte ich nur hingewiesen, weil ich den Eindruck hatte, dass Du sie meidest wie der Teufel das Weihwasser. Die sind nicht zum Spaß da, man kann sie auch benutzen. Ansonsten muss ich Otto beipflichten, geh' systematisch ran, wildes Herumstochern bringt nix. KH
Hallo, >Naja, wenn es egal ist, dann ist es ja gut. g natürlich weiß ich nicht genau obs egal ist. >Ich würde Pointerregister (r26..r31) jedenfalls nicht für Variablen zur >Zeitzählung verschwenden. Das geht mit unteren Registern oder RAM >genausogut. Also gut. Dann werde ich versuchen, auch untere Register mit einzubringen, ich dachte nur man braucht die gar nicht unbedingt, wenn obere auch frei sind. >1. prüfe ob der Controller läuft: >- lasse eine LED blinken Ja, das hab ich schon getestet. Der Mega8 ist in Ordnung >2. prüfe, ob das LCD funktioniert >- nimm ein unverändertes Programm, dass ein LCD ansteuert Hm, ein Programm nur mit Textausgabe funktioniert schon einmal. >3. Modifiziere es erst dann Ich kann jetzt natürlich probieren, das Programm schrittweise zu modifizieren. Nur weiß ich dann ja nie, ob es soweit noch funktioniert.
> Nur weiß ich dann ja nie, ob es soweit noch funktioniert.
weshalb - lass die Textausgabe (so wie sie funktioniert) drin und
ergänze zuerst das Programm für die ADC-Abfrage und dann für die
Umrechnung -
Läuft es dann immer noch, gib das Ergebnis hinter dem Text auf dem LCD
aus.....
Wenn es ab einem Punkt nicht mehr läuft, untersuche woran es liegt.
Otto
Hallo, OK, habe das nun gemacht - das Display zeigt immer brav "Test" an, bis zu der Stelle: ;an LCD Senden mov zeichen, ztausend ; Zehntausender Stelle rcall lcd_data mov zeichen, tausend ; Tausender Stelle ausgeben rcall lcd_data mov zeichen, hundert ; Hunderter Stelle ausgeben rcall lcd_data mov zeichen, zehner ; Zehner Stelle ausgeben rcall lcd_data mov zeichen, adlow ; Einer Stelle ausgeben rcall lcd_data ldi zeichen, 10 ; LF, Line Feed (Neue Zeile) rcall lcd_data Wenn ich das mit hinzufüge, erscheinen nun das ganze Display über immer das gleiche wirre Zeichen...
@Gast3 (Gast) >Wenn ich das mit hinzufüge, erscheinen nun das ganze Display über immer >das gleiche wirre Zeichen... Es fehlt zum Beginn der LCD-Ausgabe ein LCD-Home bzw. LCD Clear.
1 | ; Sendet den Befehl zur Löschung des Displays |
2 | lcd_clear: |
3 | ldi temp1, 0b00000001 ; Display löschen |
4 | rcall lcd_command |
5 | rcall delay5ms |
MFG Falk
Könntest du bitte das nächste mal einen ausagekräftigeren Betreff wählen? zb AVR LCD programmierprobleme
Hi! mal ne blöde Frage, wo eigentlich verwendest du in "lcd_data" das Register "zeichen?" In eine neue Zeile springt man aber auch nicht mit: > ldi zeichen, 10 ; LF, Line Feed (Neue Zeile) > rcall lcd_data jedenfalls nicht auf einem LCD. Wenn du kein fauler Sack bist solltest du mit den letzten Hinweisen deine Fehler finden. merke: Fehler die du selbst gefunden hast merkst du dir bis in die Steinzeit. Viel Erfolg, Uwe
Hallo, Prima, ich bin schon weiter ich danke euch :-) Nun erscheinen schon mal Zahlen: 00000 .... aber 0V wollt ich eig. net messen
Hallo, So, mittlerweile hab ich den Controller so weit, dass er ab und an eine Zahl anzeigt. Die hab ich mit verschiedenen Spannungen überprüft und mit einem MM verglichen - stimmt ungefähr. Jedoch passiert eigentlich immer etwas anderes, wenn ich den Strom anschalte.. mal sind Fragezeichen dabei, mal sind Vierecke, die eine Reihe bilden (meist 5) und oft springen die Dinge immer 5 Kästchen weiter, oder verdecken irgendwann die Zahlen.... etc. Komischerweisse funktioniert das Programm auch nur, wenn ich vorher einmal einen Text ausgeben lasse.. der is natürlich auch so schnell wieder weg, dass man ihn nicht sehen kann. Hat noch jemand Ideen?
klingt nach einem Resetproblem. Lasse mal dem LCD erstmal etwas Zeit zum "Einleben", also mal paar 10ms oder 100ms oder so, dann erst dessen Initialisierung machen. Falls Du das Problem beim relativ schnellen Aus/Einschalten bekommst, dann evtl. einen Entlade-R über Ub schalten, oder den Elko kleiner machen, wenn da ein dickerer ist. Daselbe für den Reset-C/R - die Zeitkonstante nicht unnötig groß machen. Oder einen Reset-IC verwenden. Das letzt Problem könnte vielleicht was mit 'nem fehlenden LCD-Home bzw. LCD Clear zu tun haben (wie Falk schon vermutete), was Du bei Textausgabe vermutlich mit drin hast, im anderen Fall vielleicht nicht.
Hallo, also das Zeit lassen vor dem Einleben hat leider nichts gebracht. Den Reset-Pin habe ich gar keinen Kondensator... nur einen 10k Widerstand. Ich versuchs mal mit einem C noch parallel dazu. Zumindest das letzte Problem scheint beseitigt zu sein, nachdem ich bei der Init Cursor on eingestellt habe. >Haste hier schonmal geschaut? ja, habe ich mal durchgelesen. Ich habe auch die ASM-Routinen, die dort vorgestellt wurden, (http://www.mikrocontroller.net/articles/LCD_Codesammlung_f%C3%BCr_AVR) getestet.... die funktionieren bei mir gar nicht. Da es dort anscheinend oft zu Problemen kommt, sollte ich noch erwähnen, dass ich einen KS0070B Chip am LCD habe. Die Init ist ein bisschen umgeschrieben, sollte aber ja in Ordnung gehen, wenn die Textausgabe funktioniert.
mit "Zeit lassen" ist was anderes gemeint. Dein Controller soll erstmal ein paar Ehrenrunden drehen, bevor er das Display mit Daten befeuert. JMP Anfang Anfang: warte zB. 100ms Initialisiere Dispay Main So ist das gemeint
>mit "Zeit lassen" ist was anderes gemeint. >Dein Controller soll erstmal ein paar Ehrenrunden drehen, bevor er das >Display mit Daten befeuert. Ja, das hab ich schon richtig verstanden... hat aber leider nichts gebracht, der Kond. auch nicht. Immer noch das gleiche Problem :-(
es ist mal wieder Zeit, Dein Programm zu posten..... Otto
> es ist mal wieder Zeit, Dein Programm zu posten.....
Oder auch nicht, die Luft ist eh raus. ;-)
KH
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.