Forum: Mikrocontroller und Digitale Elektronik Problem beim auslesen des ADC vom AT90CAN


von Tim R. (herrvorragend)


Lesenswert?

Hallo,

momentan bin ich dabei, werte von zwei sensoren (bpw21) per 
transimpedanzverstärker über den adc des µC auszulesen.

in allen beiträgen im forum zum adc des at90can habe ich gesehen, dass 
das "ADCW" register ausgelesen wird um den wert zu erhalten.
siehe z.B. :
Beitrag "AVR AT90CAN128 ADC"
Beitrag "Probleme mit AD Wandler am AT90CAN128"

scheinbar haben alle dieselbe quelle verwendet, jedoch finde ich dieses 
register in den datenblatt garnicht. die suche durch pdf hat auch keinen 
treffer ergeben. laut datenblatt würde ich auch meinen, dass über ADCL 
und ADCH die werte ausgelesen werden müssen. ich hoffe das problem kann 
mir jemand näher erläutern

mein zweites problem ist, ich habe das ADCW testweise genutzt und es 
kamen auch akzeptable werte heraus. jedoch weichen die werte immer um 
100-120mV ab, was finde ich recht viel ist.
die ansteuerung für den adc habe ich aus den beiträgen genommen:
1
ADMUX = mux;                  // Kanal waehlen
2
  ADMUX |= (0<<REFS0);              // AVCC als Referenzspannung nutzen
3
  
4
  ADCSRA = (1<<ADEN) | (1<<ADPS1) | (1<<ADPS0);  // Frequenzvorteiler
5
  // setzen auf 8 (1) und ADC aktivieren (1)
6
  
7
  /* nach Aktivieren des ADC wird ein "Dummy-Readout" empfohlen, man liest
8
     also einen Wert und verwirft diesen, um den ADC "warmlaufen zu lassen" */
9
  
10
  ADCSRA |= (1<<ADSC);              // starte eine ADC-Wandlung 
11
  while ( ADCSRA & (1<<ADSC) ) {
12
    ;                      // auf Abschluss der Konvertierung warten 
13
  }

ich hoffe jemand kann mir behilflich sein

danke im voraus
liebe grüße

von Helfer (Gast)


Lesenswert?

ADCW ist eine 16-Bit Zusammenfassung der beiden 8-Bit Register ADCL und 
ADCH. Das ist bei manchen C Toolchains und manchen AVRs möglich, so 
anscheinend auch bei deinem AVR.

Der gezeigte Codeabschnitt ist IMHO zu knapp, weil man seine Anwendung 
im Programm nicht sieht. Denke an die Punkte aus dem AVR-GCC-Tutorial:
Ersten ADC Wert nach der ADC Initialisierung verwerfen.

Wie stellst du den vermeintlichen Offset Error (=> Datenblatt) von 
100-120mV fest? Hast du mal die AVref mit dem gleichen Multimeter und 
dem gleichen Bezugspunkt GND gemessen, mit dem du die Eingangsspannung 
am ADC-Eingangskanal misst?

von Tim R. (herrvorragend)


Angehängte Dateien:

Lesenswert?

danke für deine antwort

ADCW scheint wohl für word zu stehen. habe ich gerade aus dem tutorial 
auch herausgefischt hehe
die ADC initialisierung ziehe ich auch so durch
also avref mit osziloskop ergab 5,1-5,2V.
im programm wird direkt eine messung gemacht, verworfen und dann eine 
richtige messung welche ich mir auf einem display ausgeben lasse. dann 
habe ich den wert mittles formel umgerechnet und dort kommt leider etwas 
anderes heraus als auf dem messgerät

mein problem habe ich bisher denke ich dahin gehend eingegrenzen können, 
dass mein lichtsensor die pwm der LED(die auf den sensor strahlt) 
feststellt und somit schwingt. dies sieht man sehr schön auf dem oszi. 
ich habe ein schwingen von 100mV, was garnicht schön ist, wenn ich unter 
1V gesamt messen möchte. der eine volt ist wegen der LED(die schwach 
leuchtet) bedingt. die messung soll bei tageslicht auf 5v gehen(just for 
info)
die krieg ich das schwingen weg ?

um den offset-error habe ich mich ehrlich gesagt noch nicht gekümmert, 
werd ich mir gleich mal ansehen. was muss ich dabei genau beachten ?

ich habe den schaltplan dazu mal mit angehängt
hoffe mir kann da jemand weiter helfen, denn so lässt sich nicht 
ordentlich messen :(

liebe grüße

von Tim R. (herrvorragend)


Lesenswert?

ich mache aus den 10bit 8bit... die unteren 2bit lasse ich weg. sprich 
ich lasse mir komplett das high register ausgeben. damit verschwindet 
ein fehler von ca. 20mV oder sowas schonmal, ich hoffe das war auf die 
eine frage bezogen die richtige antwort

von Tim R. (herrvorragend)


Lesenswert?

hm kann keiner helfen ? :/

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.