Hallo Ich habe auf meinen STK-Kit mit ATMega ein Poti angeschlossen und will die Spannung auf ADC0 messen. Wenn ich das Poti drehe zählt der aber nicht rauf sondern zeigt einfach sonst einen Mist an. Ich gebe nur den Low Bereich auf LEDs aus. Mit allen anderen Microcontroller(kleineren) habe ich das fertig gebracht nicht aber mit dem ATMega16. Habe ich irgendwo einen Offet oder irgendwas nicht berücksichtig? Gruss Weihnachtsmann
Zwischen GND und VTG (STK500 Board) und schleifer auf PA0
Kann es sein, dass du den ADC zu oft ausliest? Denn deine Mainloop hat keine "Bremse". ...
Setz das Bit ADLAR in ADMUX auf 1, lies das high-Byte aus, invertiere es und gib es an den LED´s aus. MfG Andi
Hallo zusammen Danke für die Hilfe Also Ich habe jetzt eine Warteschleife eingebaut das hat nicht geholfen. Erste nach dem ich das ADLAR-Bit gesetzt habe geht es. Mein Englisch ist nicht so gut. Verstehe ich es richtig dass mit diesem Bit "ADC Left Adjust Result" die "Linke" also niederwertigen Bit zuerst angezeigt werden? Gruss Weihnachtsmann
Nachtrag Leider habe ich festgestellt dass es doch nicht ganz geht. Hänge ich den AD-Eingang auf GND leutet LED0 also das niederwertigste Byte. Wenn ich AD-Eingang auf Vcc hänge dann leuchten alle ausser LED0 nicht.
Türlich geht das! Wenn Du von 10 Bits nur die oberen 8 Bits anzeigen läßt und ein ADC-Wert von 1019 erzeugt wird (1111111011) ist das in Ordnung. Häng Dir doch mal einen Spannungsteiler mit Widerstand und Poti an den ADC-Pin. MfG Andi
Irgendwie verstehe ich im Moment gar nichts mehr. Der Wandler hat 10 Bit Auflösung Wenn ich den AD-Wandler auf Vcc hänge müssen alle 10 Bit eine 1 anzeigen. Also: ADCL = 11111111 DACH = 00000011 Mich interessieren in erste Linie mal die unteren Bits von Bit0 -Bit7
Also zuerst sehe ich in deinem Code, das du ADFR (=ADATE) gesetzt hast. Du willst also anscheinen den ADC im "Free Running Mode" laufen lassen. Dazu mußt doch jedoch die Trigger Quelle im SFIOR Register richtig auswählen. Ich selber habe mit frei laufenden ADC bisher keine so guten Erfahrungen gemacht. Deshalb starte ich den ADC immer "von Hand" (sprich ADFR=0) Weiterhin sehe ich das du das erst die ADC Wandlung startest und dann erst ADMUX setzt. Das ist GIFT für den ADC. Man muß es andersherum machen. Nach dem Setzen von ADMUX hat es sich als praktisch erwiesen vor der wirklichen Wandlung erst noch eine Dummywandlung durchzuführen (deren Ergebniss dann verworfen wird). Weiterhin mußt du abwarten ob der ADC schon fertig ist bevor du ausließt. Das prüfe ich immer damit ob das ADIF bit in ADCSRA gesetzt ist. Da du weder das ADIE bit gesetzt hast noch den ADC Interuptvector gesetzt hast ist das "SEI" auch überflüssig. cu Hauke P.S. der Code ist noch nicht getestet und deshalb ohne Gewähr
Das Programm hat zwar noch einen schreibfehler funktioniert jetzt aber einwandfrei. Danke an alle Gruss Weihnachtsmann
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.