mikrocontroller.net

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


Autor: Shouti Huang (shutian)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Jörg X. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was kommt denn bei einer gekürzten Fassung raus?
void usart_put_int(int data)
{
    char buffer[7];
    itoa(data, buffer, 10); // #include <stdlib.h> ist noetig
    USART_puts(buffer);
}

int main (void)
  {
  DDRA = 0b11100000;
  USART_init();
  do
  {
    qvi=adc_do(0);      
    pi=adc_do(1);
    ti=adc_do(2);
    li=adc_do(3);
/* OHNE die Rechnung
 als ADC-Test */
    usart_put_int(pi);
    usart_put_int(ti);
    usart_put_int(qvi);
    usart_put_int(li);
  }
  while (1)
    ;
  return 0;
Wenn das geht, musst du deine Formeln überarbeiten ..

hth. Jörg

Autor: Shouti Huang (shutian)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl (Gast)
Datum:

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

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: yalu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Noch etwas:

Du solltest
  ADMUX = kanal;
  ADMUX |= (1<<REFS1) | (1<<REFS0);    
durch
  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 ;-)

Autor: Shouti Huang (shutian)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Shouti Huang (shutian)
Datum:

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

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

Bewertung
0 lesenswert
nicht 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!

Autor: Shouti Huang (shutian)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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... ;-)

Autor: Shouti Huang (shutian)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Michael U. (amiga)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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

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

Bewertung
0 lesenswert
nicht lesenswert
Karl heinz Buchegger wrote:

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

Naja, eher 1023. ;-)

Autor: Shouti Huang (shutian)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

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.