Forum: Mikrocontroller und Digitale Elektronik Atmega168PA ADC6/ADC7


von ante (Gast)


Lesenswert?

Hallo,

ich habe hier eine Platine mit mega168PA TQFP, auf der ADC6 und ADC7 zum 
messen der Versorgungsspannung und des Stroms verwendet wird.

Nun versuche ich dafür selber Code zu schreiben und bekomme immer 0x3ff 
heraus.

Die UART-Debug-Ausgabe und alles weitere läuft.
1
uint16_t adc_read() {
2
  ADMUX |= (1<<MUX1)|(1<<MUX2); // ADC6
3
  ADCSRA |= (1<<ADSC);
4
  while (ADCSRA & (1<<ADSC) ) {
5
    asm("nop");
6
  }
7
  return ADCW;
8
}
9
10
11
void adc_init() {  
12
   ADMUX = 0;  // external reference
13
   ADCSRA = 0;     // no prescaler
14
  ADCSRA |= (1<<ADEN);
15
  
16
  ADCSRA |= (1<<ADSC);  // dumy read
17
  while(ADCSRA & (1<<ADSC)) {
18
    asm("nop");
19
  }
20
  uint8_t temp =  ADCW;
21
}

Die Referenz ist 1,235V (extern). Wenn ich nun 1.1V (Vbg) (MUX1,2,3=1) 
versuche zu bekommen, dann kommt da auch 0x3ff heraus.

Ich hoffe, mir kann jemand einen Tipp geben, was ich falsch mache...

von Stefan (Gast)


Lesenswert?

Ein Blick ins Datenblatt und du siehst dass 0x3FF kein zufälliger Wert 
ist:
The reference voltage for the ADC (VREF) indicates the conversion range 
for the ADC. Single ended channels
that exceed VREF will result in codes close to 0x3FF.

Wie oft wandelst du denn? Der Erste Wert nach dem Umstellen der 
Referenzspannung soll verworfen werden:
The first ADC conversion
result after switching reference voltage source may be inaccurate, and 
the user is advised to discard this result.

von helios (Gast)


Lesenswert?

ante schrieb:
>    ADCSRA = 0;     // no prescaler

Absicht? Mit welchem Takt läuft der µC? Außerdem schon wieder so ein 
unvollständiges Programm. Man kürzt das eventuell zu lange Programm so 
weit, daß der Fehler gerade noch auftaucht und fragt dann mit einem 
kompilierbaren Code nach Hilfe. Alles andere empfinde ich als Faulheit 
und man mag gar nicht antworten.

"By default, the successive approximation circuitry requires an input 
clock frequency between 50kHz and 200kHz to
get maximum resolution. If a lower resolution than 10 bits is needed, 
the input clock frequency to the ADC can be
higher than 200kHz to get a higher sample rate."

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
Noch kein Account? Hier anmelden.