Hallo Leute, bin noch ziemlich am Anfang mit µC und wollte mich nun am A/D-Wandler versuchen. Meine Hardware: µC: Atmega8 - funktioniert bis jetzt alles einwandfrei LCD: 4-zeilig - funktioniert soweit auch, nur für die nachfolgende Fehlerschaltung nicht http://www.alekto-programming.com/modules.php?name=Content&pa=showpage&pid=12 Habe mir als Test-Beispiel für den A/D-Wandler diese Tutorial Seite genommen und habe nun noch versucht den Analogwert auszugeben. Das Tutorial-Programm an sich funktioniert auch nicht richtig, die 3 LED's leuchten durchgehend... und bei meinem Zusatz mit dem LCD wird gar nichts angezeigt. Ich finde soweit keine Fehler... aber das liegt glaub ich eher an meinem Nichtwissen. Header File und Source File sind aus dem mikrocontroller.net-Tutorial. Es wäre toll wenn ihr mir auf die Sprünge helfen könnt! Danke schonmal im Voraus für eure Hilfe! Beste Grüße Rob
Moin, du machst die Ausgabe aufs LCD in der Funktion HINTER dem return.... Der Code wird also niemals ausgeführt. Gruß, Flo
Vielen Dank für deine Antwort Flo! Dein Hinweis hat natürlich sofort Wirkung gezeigt, besten Dank. Nun hab ich die abgeänderte C-Datei mit angehängt. Mein Display zeigt nun permanent 1023 an. Bei Änderung der Poti-Stellung und neuem Brennen des Programms zeigt er auch 1023 an, also es ändert sich einfach nicht. Wäre froh über jede Hilfe, dankeschön. Gruß Rob
Moin, Ein Schaltplan wäre sinnvoll zur Fehlersuche... Wie genau ist dein Potentiometer angeschlossen? Im Kommentar der ReadChannel Funktion steht das die interne Referenz benutzt wird. Wenn ja, dann solltest du auch diese Referenzspannung am Poti anliegen haben und nicht VCC des Controllers. Besser wäre VCC als Referenz zu nehmen und das Poti dort auch anzuklemmen. Gruß, Flo
Also ich bin einer dieser Anfänger, die mit einem fertigen Board anfangen. Habe ein Board von myavr. Schaltplan ist hier: -> http://www.myavr.info/download/produkte/myavr_board_mk2/techb_schaltplan-myavr-board-mk2-usb.png Mein Poti liegt demnach an C0, habe auch nachgemessen, U verändert sich an C0. Habe die Referenzspannung auf Vcc gelegt, mit Hilfe
1 | ADMUX |= (0<<REFS1) | (1<<REFS0); |
Nun liegen 5V als Referenzspannung an Pin 20 und es wird weiterhin der Maximalwert von 1023 angezeigt. Grüße, Rob
So wie Aref verschaltet ist, solltest du lieber 'externe Referenzspannung' auswählen.
Hallo!
So
>ADMUX |= (0<<REFS1) | (1<<REFS0);
setzt man nicht REFS1 auf Null.
Da aber der Reset-Zustand 0 ist, hat es hier keinen Einfluß.
@ Route_66: Vielen Dank für deinen Hinweis, habe meinen Mist sofort abgeändert! @ Karl Heinz: Habe nun, wie im Anhang ersichtlich, die Referenzspannung auf extern geschaltet. Nun, wenn ich 5V an AREF anlege (Pin 21), gehen alle Lichter und mein Display aus. Irgendwas stimmt da nicht. Freue mich schon auf meine Einzelteile, dass ich endlich unabhängig von dem Board bin... nervt mich schon.
Robert schrieb: > @ Karl Heinz: Habe nun, wie im Anhang ersichtlich, die Referenzspannung > auf extern geschaltet. Nun, wenn ich 5V an AREF anlege (Pin 21), gehen > alle Lichter und mein Display aus. Irgendwas stimmt da nicht. Hmm. Das sollte eigentlich nicht sein, auch wenn ich im Schaltplan nicht gut genug geschaut habe. Da ist ja gar kein Punkt auf der ARef Leitung und der senkrechten, in der die Spule sitzt. D.h. da liegt gar nicht extern Vcc an Aref an. Sorry, aber das hab ich gestern nicht gesehen (ist aber auch besch... gezeichnet) Nichts desto trotz: Wenn du Aref per Programm auf extern stellst und an ARef 5V anhängst, darf da nichts passieren. Richtigen µC-Typ in der Programmierumgebung eingestellt? Kannst du überprüfen, ob du auch wirklich dein neuestes Programm in den µC geladen hast?
Ja es ist wirklich ziemlich unübersichtlich gezeichnet... bei Schaltplänen ist man anderes gewöhnt. Kein Problem, ist ja nichts kaputt gegangen :) Hab das eingestellte Device im AVR Studio und im Programmer (myavr...) gecheckt und in beiden ist der richtige eingestellt: Atmega8 Das Programm auf dem µC habe ich auch nochmal überprüft und es entspricht dem aktuellen Programm. Kann es sein, dass da irgendwo eine weitere Definition des A/D-Einangspins fehlt, oder reicht die nachfolgende Zeile wirklich um Pin C0 als Eingang des Wandlers zu definieren?
1 | adc_value = ReadChannel(0); |
Hallo, bei meinem MK2 springt diese kleine Programm sofort an ... anbei die elf und der Code ... probier das mal die elf drauf zu flashen ... ich glaub nicht dass es an dem board liegt geht ja bei mir auch was soll an einem potentiometer am port C falsch sein? Grüße Jahat
Hey Jahat, vielen Dank für die Antwort und das Programm! Hab deine .elf draufgeschmissen, aber mein LCD zeigt dann lediglich den Wert "10?3" an. Ich kann drehen was ich will, aber es tut sich nichts. Wenn du magst könntest du ja vll. mal meine .elf auf deinem Board ausprobieren. Ich dachte nicht an einen Fehler beim Anschluss an C0, sondern rein die Definition im Programm. Ob dort praktisch nur diese eine Zeile reicht um "C0" als Eingang zu definieren. Gruß Rob
Robert schrieb: > Ich dachte nicht an einen Fehler beim Anschluss an C0, sondern rein die > Definition im Programm. Ob dort praktisch nur diese eine Zeile reicht um > "C0" als Eingang zu definieren. Ja das reicht.
Schmeiss doch noch mal dein Programm, sow wie es jetzt ist, auf den Markt. Das gibts ja gar nicht. Die zu messende Spannung hast du direkt am µC-Pin gemessen (also nicht am Poti, weil du ja 'weißt', das da ein Draht hingeht)? Direkt mit dem Voltmeter am µC-Pin. (Das hatten wir nämlich heute schon mal: Dreimal nachgefragt ob er die UART auch wirklich am µC Pin gemessen hat. Dreimal ja. Und im Endeffekt hat sich rausgestellt, dass er ganz woanders gemessen hat und implizit angenommen hat, dass die Verbindung zu seinem Messpunkt schon bestehen wird, was sie natürlich nicht tat). ARef hast du jetzt wie beschaltet? So wie im Schaltplan weiter oben. D.h. keine externe Spannung an ARef. Wobei du, nachdem das Programm läuft, dort 5V messen können müsstest (weil per Programm draufgeschaltet)
Okay, gut wenn das i.O. ist, vielen Dank. Habe jetzt mal alle 3 aktuellen Projektdateien angehängt. So wie sie jetzt hochgeladen sind, sind sie auf meinem µC. Ja bin direkt mit dem Multimeter auf Pin 23 (PC0) gegangen und hab dort die anliegende Ausgangsspannung vom Poti gemessen. (nur um den schlimmsten Fall von heute auszuschließen: U hat sich an Pin 23 mit dem Drehen am Poti mitgeändert ;) ) Aref habe ich z.Z. gar nicht beschaltet, da ja wie beschrieben meine Spannung zusammenbricht sobald ich 5V auf Aref lege. Wie im Programm ersichtlich, fahre ich zur Zeit auf AVcc und an Pin 20 (AVCC) liegen 5V. Mein LCD gibt immer noch "1023" aus, egal wie ich das Poti drehe. Vielen Dank für eure tatkräftige Hilfe!
moin
>>>
char Buffer[20]; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
int i = adc_value; <<<<<<<<<<<<<<<<<<<<<<<<<<<<
utoa( i, Buffer, 10 );
lcd_setcursor(0,1);
lcd_string( Buffer );
<<<<
Wo sind denn deine Variablen deklariert ?
Deklariere mal testweise am Anfabg deines Prg. die Variablen i und
buffer als global !
mfg
Ahoi, ich bin leider noch ziemlich neu bei den µC-Wissenschaften. Wie genau deklariert man den eine Variable global? Ich habe nur einen Lösungsansatz gefunden beim Stöbern:
1 | extern unsigned int i; |
2 | extern char Buffer; |
Kann ich das so vor dem main als global deklarieren?
Robert schrieb: > Ahoi, > > > ich bin leider noch ziemlich neu bei den µC-Wissenschaften. > Wie genau deklariert man den eine Variable global? genau so, wie du die anderen auch deklariert hast. (Du brauchst ein C-Buch) > Kann ich das so vor dem main als global deklarieren? Kann man. Aber das ist nicht dein jetziges Problem. Lass mich mal hier einen Testaufbau fertig machen, damit ich das mal in Aktion sehen kann.
Das hab ich mir schonmal überlegt mit dem C-Buch.. ist wohl wirklich mal nötig, da mir doch einiges fehlt an Sprache. Okay, wow, vielen Dank. Da bin ich schon gespannt was bei dir rauskommt.
Hmm. Programm hat auf Anhieb funktioniert. (Die LCD Routinen hab ich gegen meine ausgetauscht, aber dort sollte das Problem ja nicht sein. Ich wollte mir nur die Arbeit ersparen, deine Routinen an meine Belegung anzupassen)
also in dem programm was ich dir geschicktz habe werden nur 8 bit werte angezeigt ... 1023 kann von meiner elf gar nicht aufs display kommen ... da ist irgendwas ganz gewaltig faul ... für mein prog musst du den jumper "READ" auf dem display auf "AUS" schalten ... hatte ich vergessen zu sagen hast mal die werte von der usart die ich sende am pc eingelesen? gruß Jahat
Der korrekte Weg sowas zu Debuggen ist die serielle Schnittstelle. Erstens sende Daten zum Controller und zeige sie auf dem Display an. Dann lasse wandeln und sende die Werte ueber die Schnittstelle. Wenn dann beides laeuft, dh der Wandler, und der Display, dann erst kann man die gewandelten Werte auf dem Display anzeigen. Alles vorher ist etwas auf der muehsamen seite.
Hmm.. komisch.. ich hab keinen Plan was ich falsch machen könnte. Es ist alles richtig angeschlossen, die Spannung vom Poti steht auch an C0 an. Das Programm scheint auch nicht falsch zu sein. Jetzt bleibt vielleicht noch die Fehlerquelle Programming Tool... ich muss ja mit dem myavr-ProgTool meinen Controller programmieren. Aber iwie glaube ich das auch nicht. Sorry, aber mit UART o.Ä. habe ich noch keine Erfahrungen, da müsste ich mich erst reinarbeiten. Ich dachte ja nicht, dass das mit A/D-Wandler so schwierig sein könnte. Grüße Rob
Robert schrieb: > Jetzt bleibt vielleicht noch die Fehlerquelle Programming Tool... ich > muss ja mit dem myavr-ProgTool meinen Controller programmieren. Aber > iwie glaube ich das auch nicht. Überprüf das mal. Ist mir auch schon passiert, dass ich das falsche Hex-File in den µC geschossen habe. Schreib ein Programm welches deine LED blinken lässt. Reinbrennen und nachsehen ob sie wirklich blinken. Dann würd ich folgendes machen: Um Fehler in der Entwicklungsumgebung (irgendwo eine falsche projektspezifische Einstllung) auszuschliessen, fang ich einfach ein neues Projekt an. Kopiere den Source Code per Copy&Paste da hinein. Auch das ist mir schon passiert, dass irgendwo eine falsche Einstellung parout nicht zu finden war (allerdings nicht im AVR-Studio). Neues Projekt angefangen, die notwendigen Änderungen gemacht und dann gings.
Vielen Dank für den Ratschlag, werde das mal versuchen!
So, hab das mal ausprobiert. Hab ein Programm für die 3 LEDs geschrieben.. alles funktioniert einwandfrei. UND Ein neues Projekt gestartet, dort den Code reinkopiert und rübergeschickt.. aber leider das Gleiche wie vorher. Also irgendwie hab ich wirklich großen Mist gebaut, ... sonst müsste das doch funktionieren. Gruß Rob
Falls noch jemand einen Rat, ich wär froh um irgendeinen Tipp. Versuch mal das ganze auf meinem Breadboard aufzubauen.. mal sehen ob es da irgendwie geht.
Noch ein Versuch: Um sicherzustellen, dass die LCD-Routine richtig geht, schreib mal statt "int i = adc_value;" z.B. "int i = 15;" (irgend eine Konstante). Ändert sich die Anzeige entsprechend? Gruß Dietrich
Hey Dietrich, also hab die LCD-Ausgabe geändert, so wie du es beschrieben hast. -> Mein LCD gibt die "15" aus. Also meine Routinen sind in Ordnung. Dankeschön trotzdem für deinen Tipp! Gruß Rob
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.