www.mikrocontroller.net

Forum: Compiler & IDEs ADC mit STK500-Kit


Autor: Joba (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

Ich weiß es gibt schon unmengen an Beiträgen zu Problemen mit dem ADC, 
aber ich konnte den ganzen Mittag keine Lösung finden.

Ich benutze das STK500-Kit von Atmel und einen ATMEGA32. Ich habe an 
Port A ein 5-k Poti zwischen VCC (5V) und GND gelegt und die 
eingeregelte Spannung auf PA0.
        _
GND----/   \
       |    |----PAO
VCC----\___/

Den ADC betreibe ich mit 5V Referenzspannung die über AREF des Boards am 
µC anliegt. Die Werte werden left adjusted ausgegeben und ich möchte 
über ADCH den 8bit Wert auslesen und über PORTB auf die LEDs des Boards 
legen. Leider wird egal wie das Poti eingestellt ist der Wert 0 auf Port 
B gelegt (nach verstellen des Potis führe ich einen Reset aus...).

C Code liegt bei. Was für einen Anfängerfehler habe ich begangen, bzw 
kann mir wer helfen?

Liebe Grüße
joba

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Joba wrote:
> Den ADC betreibe ich mit 5V Referenzspannung die über AREF des Boards am
> µC anliegt.
Das ist schonmal Käse. AVCC kann intern als Referenz ausgewählt werden. 
An AREF kommt nur ein kleiner Kondensator gegen Masse. Eine Spannung 
wird grundsätzlich nur dann an AREF angelegt, wenn eine Referenz 
verwendet werden soll, die der µC intern nicht zur Verfügung stellen 
kann.

> Die Werte werden left adjusted ausgegeben und ich möchte
> über ADCH den 8bit Wert auslesen und über PORTB auf die LEDs des Boards
> legen.
Dem steht nichts im Wege...

> Leider wird egal wie das Poti eingestellt ist der Wert 0 auf Port
> B gelegt (nach verstellen des Potis führe ich einen Reset aus...).
Kommt überhaupt was raus? Sollte mich wundern. Schließlich löschst Du 
mit dieser Zeile
ADCSRA = (1<<ADSC);
alle Einstellungen im ADCSRA, die Du vorher gemacht hast. Du schaltest 
damit den kompletten ADC ab. Da dürfte sich normalerweise gar nichts 
tun. Wenn am Port nichts ankommt, dann liegt das nicht daran, dass der 
ADC 0 ausgibt, sondern daran, dass er überhaupt nicht arbeitet.

> C Code liegt bei.
Und warum als .txt und nicht als .c-Datei?

Autor: roboterbastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
while ( ADCSRA & (1<<ADSC))  //Auf Abschluss warten
  {
    ;
  }

ich glaube, das ding wird wegoptimiert. mach mal irgend etwas 
läuffähiges rein in der while-dings-bums.

Autor: Joba (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke Johannes!
Natürlich lag es an dieser Zeile
ADCSRA = (1<<ADSC);
Muss natürlich
ADCSRA |= (1<<ADSC);
heißen. Bin ich seit heut Mittag um 1 nicht drauf gekommen. naja...

Der Rest passt alles. ich weiß, dass ich AREF nicht verwenden müsste. 
Aber ich wollte es gleich mit Ausprobieren.

.txt und nicht .c war ein versehen

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
roboterbastler wrote:
> while ( ADCSRA & (1<<ADSC))  //Auf Abschluss warten
>   {
>     ;
>   }
>
> ich glaube, das ding wird wegoptimiert. mach mal irgend etwas
> läuffähiges rein in der while-dings-bums.
Nö. Das darf gar nicht wegoptimiert werden, weil alle I/O-Register 
(und dazu zählt auch ADCSRA) volatile sind.

Autor: Manuel Kauf (mkauf)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Misra meckerts auf jeden fall an wenn nichts in deinen {} hast ;)


Wegoptimieren darf es dir der Compiler nicht da wie schon genannt IOs 
volatile sind.

Würde da aber noch ein Nop reinsetzen und gut. Dann bist dir da sicher 
:)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johannes M. wrote:

>> Den ADC betreibe ich mit 5V Referenzspannung die über AREF des Boards am
>> µC anliegt.

> Das ist schonmal Käse.

Nö, für den STK500 ist das normal.  Sonst musst du aufpassen, dass du
den AREF-Jumper noch rausziehst, weil die interne Referenz am AREF-Pin
rausgeführt wird und dort mit der STK500-eigenen Varef kollidiert.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Manuel Kauf wrote:

> Würde da aber noch ein Nop reinsetzen und gut.

Das ist Quatsch.  Ein Befehl mehr, den keiner braucht und der für
nichts gut ist.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.