Forum: Compiler & IDEs ADC gibt nur den halben Wert raus


von Shouti H. (shutian)


Angehängte Dateien:

Lesenswert?

Hallo Jungs,
erstmal vielen Dank für euer Interesse. Alle Tipps sind willkommen.
Laut Formel müsste ADC=Vin/Vref*1024 sein. Die Vref ist 2,56V, so steht 
im Handbuch(ATMEGA32).
Kriege nicht raus, wo ich den Mist gebaut habe. Bitte seid nicht geizig 
mit euren guten Tipps. Danke

von Jörg X. (Gast)


Lesenswert?

Was kommt denn bei einer gekürzten Fassung raus?
1
void usart_put_int(int data)
2
{
3
    char buffer[7];
4
    itoa(data, buffer, 10); // #include <stdlib.h> ist noetig
5
    USART_puts(buffer);
6
}
7
8
int main (void)
9
  {
10
  DDRA = 0b11100000;
11
  USART_init();
12
  do
13
  {
14
    qvi=adc_do(0);      
15
    pi=adc_do(1);
16
    ti=adc_do(2);
17
    li=adc_do(3);
18
/* OHNE die Rechnung
19
 als ADC-Test */
20
    usart_put_int(pi);
21
    usart_put_int(ti);
22
    usart_put_int(qvi);
23
    usart_put_int(li);
24
  }
25
  while (1)
26
    ;
27
  return 0;
Wenn das geht, musst du deine Formeln überarbeiten ..

hth. Jörg

von Shouti H. (shutian)


Lesenswert?

Hallo Jörg,
Danke für deine schnelle Antwort.

Habe probiert. Leider sind die Werte auch daneben. Bei 0,4V am Eingang 
habe ich Werte um die 50 (Spannungsschwankung), bei 0,8V ist um die 160 
rausgekommen. bei 1,2V auch um 160.

In meiner Formel bin ich von 10bits=1024 ausgegangen. Wenn es 512 wäre, 
dann stimmen alles. Habe den Verdacht, dass 1024= -512 bis +512. Wenn so 
ist, wie kriege ich den vollen Bereich von 1024?

Danke

von Karl (Gast)


Lesenswert?

Hört sich irgendwie so an, als ob Vref doch 5 V wäre. Also kontrollier 
das nochmal genau nach.

von yalu (Gast)


Lesenswert?

Was hast du am AREF-Pin angeschlossen?

- Nichts? Gut.

- Einen Kondensator gegen GND? Besser.

- 5 V? Ganz schlecht.


> bei 0,8V ist um die 160 rausgekommen. bei 1,2V auch um 160.

Ist das so zu verstehen, dass 160 der maximale Wert ist, egal wie hoch
die Eingangsspannung ist? Das wäre wirklich komisch.

von yalu (Gast)


Lesenswert?

Noch etwas:

Du solltest
1
  ADMUX = kanal;
2
  ADMUX |= (1<<REFS1) | (1<<REFS0);
durch
1
  ADMUX = (1<<REFS1) | (1<<REFS0) | kanal;
ersetzen. Warum?

Mit deiner ersten Anweisung schaltest du die Referenz auf extern, mit
der zweiten auf 2,56 V. Gleich darauf erfolgt die Messung. Zitat aus
dem Datenblatt:

  "The first ADC conversion result after switching reference voltage
  source may be inaccurate, and the user is advised to discard this
  result."

Weil du die Referenz vor jeder Messung umschaltest, solltest du auch
jede Messung discarden ;-)

von Shouti H. (shutian)


Lesenswert?

Vielen Dank für die vielen Tipps.

Ich bin jetzt von 512 ausgegangen.  Die Werte stimmen.

Meine Frage ist, warum nicht 1024, sondern 512? Habe 2,56V am Eingang, 
ADC gibt nur 512 raus. Habe es umgepolt, kommt nur "NULL" raus. Ist ja 
ein 10 Bit ADC. Ich möchte so gern den vollen Bereich von 1024 benutzen.
Die Vref sollte schon 2,56V sein. Weiß nicht wo ich die Angabe sonst 
noch finde. Kann jemand mir sagen? Danke.

@yalu: Danke. Die Werte schwanken nicht mehr hin und her.

von Shouti H. (shutian)


Lesenswert?

Hallo Jungs,
ich habe was gefunden. In der Bedienungsanleitung steht 5V Intern.
Herzlichen Dank an euch allen.

von Johannes M. (johnny-m)


Lesenswert?

Shouti Huang wrote:
> ich habe was gefunden. In der Bedienungsanleitung steht 5V Intern.
Wie bitte? Wenn Du REFS0 und REFS1 im ADMUX setzt (also so wie es oben 
steht), ist die interne 2,56V-Referenz aktiv, und nix mit 5V!

von Shouti H. (shutian)


Lesenswert?

@Johannes
Danke.

So habe ich auch vor. Aber irgend wie kriege ich nicht aus 2,56V 1024. 
In der Beschreibung von meinem Board steht Intern 5V. Weiß natürlich 
nicht ob es wirklich die Vref gemeint ist.
Wenn ich doch die 2,56V habe, warum kriege ich bei 2,56V am Eingang nur 
512 raus?

Man bedankt sich.

von Gast (Gast)


Lesenswert?

Wie schon gefragt wurde:
> Was hast du am AREF-Pin angeschlossen?
> - Nichts? Gut.
> - Einen Kondensator gegen GND? Besser.
> - 5 V? Ganz schlecht.
sag mal, was jetzt wirklich von außen dranhängt... ;-)

von Shouti H. (shutian)


Lesenswert?

@Gast

entschuldige, habe vergessen die Frage von Yalu zu beantworten.
Danke, dass du mich daran erinnerst.

Ich habe am AREF PIN nichts angeschlossen.
Aber in der Bedienungsanleitung steht so ein Satz:
      Auswählbare Referenzspannung Intern=5V / Extern durch Jumper.

Heißt doch, dass von der Boardgestaltung her 5V statt üblicher 2,56V. 
Oder?

von Michael U. (amiga)


Lesenswert?

Hallo,

@Shouti Huang:
>Heißt doch, dass von der Boardgestaltung her 5V statt üblicher 2,56V.

Solltest Du das nicht am einfachsten selbst rausfinden können?

Du hast das Board, die Beschreibung und hoffentlich auch den 
Schaltplan...
Da sollte es doch relativ einfach sein, rauszufinden, was WIRKLICH am 
AREF Pin angeschlossen ist, oder?

Wir kennen das Board nicht, die Schaltung nicht, eventuelle 
Jumperstellungen nicht.

Gruß aus Berlin
Michael

von Karl H. (kbuchegg)


Lesenswert?

Zur Not schnapst du dir einfach mal ein Multimeter und misst
die Spannung am AREF Pin nach.
Dies ist deine Referenzspannung. Wenn der ADC Eingang die Höhe
dieser Referenzspannung hat, meldet der ADC 1024

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Karl heinz Buchegger wrote:

> Wenn der ADC Eingang die Höhe
> dieser Referenzspannung hat, meldet der ADC 1024

Naja, eher 1023. ;-)

von Shouti H. (shutian)


Lesenswert?

Vielen Dank für die Tipps.
Habe im Schaltplan die 5V an AREF PIN gefunden.

Werde öfter in die Pläne reinschauen.

Jungs, ihr seid spitze. Weiter so.

von Gast (Gast)


Lesenswert?

> Habe im Schaltplan die 5V an AREF PIN gefunden.
na hoffentlich hats deine interne Referenz überlebt. (Du hast ja 2,56V 
von intern mit 5V von extern "kurzgeschlossen"). Deshalb ist (so finde 
ich) die beste Außenbeschaltung ein simpler Kondensator. So bist du 
komplett frei. Da kannst du von innen 2,56V oder 5V auswählen. Und wenns 
wirklich einmal nötig sein sollte, ohne Probleme eine andere Spannung 
außen anlegen.
Jedenfalls hast du das Problem jetzt gefunden und wirst es auch lösen.

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.