ADC am ATMeha644p geht nicht

Gast #1207113
Ich bekomme den ADC an meinem ATMega644p nicht zum laufen. Hier mein 
Code:
1
#include <stdlib.h>
2
#include <avr/io.h>
3
#include "uart.h"      
4

5
#define F_CPU 16000000L
6

7
void main(void)
8
{
9
//init UART
10
  uinit();
11
  //ADC aktiv, ADC starten, Freerunning mode, Prescaler = 128
12
  //ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADPS0 ) | (1<<ADPS1) | (1<<ADPS2); 
13
  ADCSRA=(1<<ADSC)|(1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
14
  //ADC auf Pin 1
15
  ADMUX = 0x01;
16
  //interne 2.56 Volt Ref., 
17
  ADMUX = (1<<REFS1) | (1<<REFS1);
18
    uint16_t x;
19
  char text[4];
20
    while(1)
21
    {
22
    x = ADCL;
23
    x += (ADCH<<8);
24
    itoa(x, text, 10);
25
    uputs(text);
26
    uputs("\n\r");
27
    }
28
}

Ich verwenden ein STK500. An den Pin PA1 habe ich ein Poti als 
Spannungsteiler geschaltet. Egal was ich dort einstelle, über die 
serielle Schnittstelle wird immer nur 1023 ausgegeben.
Gast #1207131
Danke. Bei dieser Reihenfolge ändert sich leider auch nichts.
1
  //ADC auf Pin 1
2
  ADMUX = 0x01;
3
  //interne 2.56 Volt Ref., 
4
  ADMUX = (1<<REFS1) | (1<<REFS1);
5
  //ADC aktiv, ADC starten, Freerunning mode, Prescaler = 128
6
  //ADCSRA = (1<<ADEN) | (1<<ADSC) | (1<<ADFR) | (1<<ADPS0 ) | (1<<ADPS1) | (1<<ADPS2); 
7
  ADCSRA=(1<<ADSC)|(1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);

@Hubert:
> Mit dem ADMUX = (1<<REFS1) | (1<<REFS1);
> stellt du den ADC wieder auf 0.

Aber so stelle ich doch auf interne Ref.spannung um, oder?

@Ernst:
wenn es "nur" am warten liegt, sollten doch nur die ersten Werte falsch 
sein. Es wird aber dauern 1023 ausgegeben.
Gast #1207142
Meinst Du so:
1
  //interne 2.56 Volt Ref., 
2
  ADMUX = (1<<REFS1) | (1<<REFS1);
3
  //ADC auf Pin 1
4
  ADMUX = (1<<MUX0);
5
  //ADC aktiv, ADC starten, Freerunning mode, Prescaler = 128
6
  ADCSRA=(1<<ADSC)|(1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
kommt aber noch immer 1023 raus...:-(
Gast #1207157
das wäre dann so, oder?:
{c]
  //interne 2.56 Volt Ref., ADC auf Pin 1
  ADMUX = (1<<REFS1) | (1<<REFS1) | (1<<MUX0);
  //ADC aktiv, ADC starten, Freerunning mode, Prescaler = 128
  ADCSRA=(1<<ADSC)|(1<<ADEN)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1);
[/c]
immer noch 1023...
Gast #1207174
> du schreibst  ADMUX = (1<<REFS1) | (1<<REFS1) | (1<<MUX1);
Sollte das nicht MUX0 am Ende sein wenn ich Pin1 abfragen will?
Egal, es bringt beides nur 1023.

> ADC erst abfragen wenn ADIF gesetzt ist, ansonst ist der Wert
undefiniert oder alt.

Ich wollte den Code auf ein absolutes Minimum beschränken um den Fehler 
zu finden / zu verstehen.

Wenn der Wert alt oder undef. ist, müste ja mal was anderes als 1923 
rauskommen. Darum denke ich, dass ich noch was anderes falsch mache.
#1207180
Ralf wrote:
>> du schreibst  ADMUX = (1<<REFS1) | (1<<REFS1) | (1<<MUX1);
> Sollte das nicht MUX0 am Ende sein wenn ich Pin1 abfragen will?

was den nun, Pin 1 oder A1

hast du denn überhaupt mal nachgemessen, was an dem Pin anliegt?
Gast #1207191
> was den nun, Pin 1 oder A1
PA1, nach Datenblatt ist das ADC1.


> hast du denn überhaupt mal nachgemessen,
> was an dem Pin anliegt?

Ja, habe ich. Eine Spannung die ich mit einem Poti von 0V bis 4,9V 
verändere ohne dass sich mein "gemessener" Wert ändert.

Sorry für die vielleicht dummen Fragen und danke für die Gedult ;-)
Gast #1207227
Auf dem STK500 steckte der Jumper AREF noch. Wenn ich ihn entferne geht 
es. Ich dachte mit dem Umschalten auf interne Referenzspannung:
1
ADMUX = (1<<REFS1) | (1<<REFS1)

wäre der Jumper bedutungslos.

Danke an alle und sorry, dass ich das mit dem Jumper nicht eher abgklärt 
habe.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.