Hallo zusammen, ich bin gerade dabei ein LCD-Display zu betreiben, hierfür verwende ich die fleury-Dateien, welche auch wundebar funktionieren. Nun will ich auf dem Display einen ADC-Wert ausgeben, was auch wunderbar soweit funktioniert. Versuche ich nun meinen zweiten ADC-Wert auf dem Display auszugeben funktioniert das nicht, es wird immer noch der erste Wert ausgegeben, am zweiten allerdings tut sich nüschd. Wenn ich im Multiplexredister den zweiten AD-Kanal (PA1) auswähle, meinen unteren Teil (der hinter "//test) ausblende, dann kann ich den zweiten Wert über nen Poti verstellen. Also diese Zuweisung funktioniert. Nun will ich aber den PA0 und den PA1 auf dem Display ausgeben, und da verliesen sie ihn... In meinem Projekt verwende ich ein 4-Zweilen Display und einen ATMEGA32. Im Voraus vielen Dank für eure Hilfe Thorsten
Wo stößt du denn die zweite Konvertierung an, und wo wartest du auf deren Ergebnis?
in der lcdadc.c unter dem //test Also: ADMUX=ADC1; /*Ausgabe ADC1-Wert*/ result1=ADC; /*AD-Wandlungsergebnis aus ADC-Register abholen*/ itoa(result1,buffer1,10); /*10Bit Anpassung des ADC Wertes als Integer Wert*/ lcd_gotoxy(15,0); /*Cursor auf Display zweite Temp.*/ lcd_puts(buffer1); Die Ausgabe erwarte ich dann bei lcd_puts. Für den ersten Wert hat dies ja auch genügt, es sind nur die Variablen verändert... Thorsten
Da stellst du den Multiplexer um und liest den Wert aus. Nochmals, wo stößt du die Wandlung an und wartest auf das Ergebnis, so wie du es bei der ersten Wandlung getan hast? > Für den ersten Wert hat dies ja auch genügt, es sind nur die Variablen > verändert... Wo ist dann das
1 | ADCSRA |= _BV(ADSC); /*ADC-Wandler neu "ansto�m*/ |
2 | while (ADCSRA & _BV(ADSC) ) /*warten bis die AD-Wandlung fertig ist*/ |
3 | {
|
4 | }//end while |
für die zweite Wandlung?
Muss ich dass etwa vor jedem neu einzulesenden ADC-Wert schreiben? Hab das nämlich eben gleich probiert, hat aber leider auch nichts bewirkt... Thorsten
Bring mal ein bischen Ordnung in Dein Program. Diese 4 Teile gehören zu JEDER Wandlung: * Multiplexer setzen * AD-Wandlung starten * Warten, bis AD fertig * Ergebnis aus ADC auslesen Dass das "auch nichts bewirkt" hat, wird wohl daran liegen, dass Du den MUX NACH der 1.Wandlung setzt und VOR der 2.Wandlung. Häng Deinen Code doch einfach nochmal an, nachdem Du was geändert hast. Stefan
...anbei meine geänderte Datei. Mach ich da einen prinzipiellen Fehler?!? * Multiplexer setzen * AD-Wandlung starten * Warten, bis AD fertig * Ergebnis aus ADC auslesen diese Reihenfolge hab ich eingehalten. Zudem wird mein MUX nun vor jeder Wandlung gesetzt... Thorsten
> Muss ich dass etwa vor jedem neu einzulesenden ADC-Wert schreiben?
Natürlich.
Jetzt sieht es eigendlich ganz ok aus, misst Du wirklich noch 2* denselben Wert? Hier stimmt noch was nicht:
1 | #define ADC0 00000;
|
2 | #define ADC1 00001;
|
3 | #define ADC2 00010;
|
4 | #define ADC3 00011;
|
5 | #define ADC4 00100;
|
6 | #define ADC5 00101;
|
7 | #define ADC6 00110;
|
8 | #define ADC7 00111;
|
Im Manual sind die Werte ADC0 - ADC7 in Bitdarstellung gezeigt. Was Du hier schreibst, sind aber "normale" Dezimalzahlen. Auch das Semikolon hinten ist nicht ok. Besser:
1 | #define ADC0 0
|
2 | #define ADC1 1
|
3 | #define ADC2 2
|
4 | #define ADC3 3
|
5 | #define ADC4 4
|
6 | #define ADC5 5
|
7 | #define ADC6 6
|
8 | #define ADC7 7
|
Für die Werte ADC0 und ADC1 ist das Ergebnis aber (zufällig) dasselbe, daran kann Dein Problem also nicht liegen. Stefan
Sorry, ich glaub ich hab mich falsch ausgedrückt, werds aber nocmal versuchen... Ich habe deine Ändeungen in meinen defs nun gemcht und das Ergebnis ist immer noch unverändert, ich bekomme nur einen ADC-Wert auf das Display ausgegeben, obwohl ich nach der Ausgabe des ersten ADC den MUX neu setze, die AD-Wandlung neu anstoße und diesen Wert dann über buffer1[6] auf mein Display in Zeile 1 Zeichen 15 schreibe. Tatsächlich aber funktioniert dies nicht. Der erste Wert ist vollständig i.O. und wird auch ohne Probleme ausgegeben. Um die Funktion und Anbindung von meinem POTI zu überprüfen habe ich spasshalber meinen ersten MUX auf ADC1 (also PA1) gestellt und den zweiten auf ADC0. Die Folge war dann dass ich mein zweites Poti verstellen konnte und das erste dafür nichtmehr. Also HW ist soweit OK.... Thorsten
sorry, ich sehe keinen Fehler mehr. Wieviel zeichen hat Dein Display? Kannst Du "normalen" Text an die Pos(15, 0) schreiben? Stefan
> ich bekomme nur einen ADC-Wert auf das Display ausgegeben
Ach, das heißt, ein zweiter Wert wird gar nicht angezeigt? Ich dachte,
es käme derselbe wie bei der ersten Messung oder immer 0 oder sowas
raus. Wenn gar nix angezeigt wird, liegt's wohl eher an der
LCD-Ansteuerung als am ADC-Einlesen.
...mittlerweile bin ich einen Schritt weitergekommen, und zwar hab ich einfach mal die restliche Ausgabe vom LCD ausgeblendet, und siehe da, es kommen zwei ADC-Werte an die ich mit zwei unterschiedlichen POTIS unterschiedlich verstellen kann. Also prinzipiell genau dass was ich haben möchte. Nach ner kleinen Untersuchung hab ich nun festgestellt dass mir meine "gotoxy-Befehle" irgendwie negativ ins Zeug spielen. Woran kann dass liegen und gibt es eine andere Möglichkeit meinen Cursor aufm Display zu versetzen? Thorsten
...ich habe den Code nun nochmals geschrieben und der Fehler ist weg... Vielen lieben Dank für eure Unterstützung.... Thorsten PS Eine Frage hätte ich aber noch: Ist es normal dass je mehr adc-Werte auf dem Display ausgegeben werden desto blasser (bis fast unsichtbar) werden die einzelnen?!?
>PS Eine Frage hätte ich aber noch: >Ist es normal dass je mehr adc-Werte auf dem Display ausgegeben werden >desto blasser (bis fast unsichtbar) werden die einzelnen?!? Du machst nichts anderes als auf Dein lcd zu schreiben. Zuerst schreibst Du einen festen String rein, dann kommt der AD-Wert drüber, dann wieder von vorne. Das das nicht gut aussieht, ist klar. Warte mal eine Weile zwischen den Ausgaben, dann wird das Bild auch korrekt sein. Oder schreibe nicht ständig die konstanten Strings ins lcd (dabei überschreibst Du nämlich die dort stehenden AD-Werte mit Leerzeichen). Am besten, Du änderst die AD-Werte auf dem lcd nur dann, wenn sie sich wirklich geändert haben. Stefan
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.