Forum: Mikrocontroller und Digitale Elektronik AVR & ADC mal wieder


von Bob (Gast)


Lesenswert?

Hallo,

ich versuche zum ersten mal einen adc in betrieb zu nehmen, aber es
will nicht so wie ich will.. Problem: wert 1024 ist bei ca 1.6V
erreicht

Anschluss (Mega128)

AVCC,AREF an +5V (mit spule und 10nF kondi gelättet)
AGND an GND

den eingang (ADC1) habe ich mit nem 1kOhm geschützt und mit nem
weiteren 10nF gegen masse geglättet. habe ein 5K spindeltrimmer
(mittelabgriff an dem 1k, rest an 5V und GND) damit ich erstmal so
werte einstellen kann.


hier der Bascom code

$regfile = "m128def.dat"
$crystal = 16000000
$baud = 9600

Config Adc = Single , Prescaler = Auto , Reference = Off

Start Adc


Dim W As Word

Channel = 0

Do
  W = Getadc(1)
  Print " value " ; W
Waitms 500
Loop
End
'################## ENDE CODE ######################

von Michael von Gersdorff (Gast)


Lesenswert?

Hallo Bob
Du hast vergessen die Variable "Channel" zu dimensionieren. Du
verwendest diese nicht wie im Bascom-Beispiel.
Bist Du sicher das Dein Eingangssignal auf ADC 1 angeschlossen ist?
oder vielleicht doch an ADC 0

Michael

von Bob (Gast)


Lesenswert?

die zeile habe ich rausgenommen, sorry das sie hier noch drin steht.
aber das ändert nix daran, weil ich nur kanal 1 auslese. Hängt an PF1

von Michael von Gersdorff (Gast)


Lesenswert?

Hallo Bob
Druckt er überhaupt etwas? also dauwernd Null oder dauernd 1023 und
hast Du die 5 Volt an die Eingänge AVcc und Aref angeschlossen.
Michael

von Bob (Gast)


Lesenswert?

Ja hatte ich doch geschrieben. aal-glatte 5v an aref aud avcc. ich
kriege werte von 0 bis 1023 je nachdem was ich am poti einstelle. aber
nur bis 1,6V!?

von Michael von Gersdorff (Gast)


Lesenswert?

Hallo Bob
Wenn Du wirklich nur diesen code geladen hast (und das nicht nur ein
Auszug ist) ist die Sache sehr merkwürdig. Bei mir funktioniert das
seit Jahren in vielen Anwendungen, so wie Du es programmiert hast,
problemlos.
Melde Dich doch nochmal wenn das Problem gelöst ist. Würde mich
interessieren woran es lag.
Michael

von Bob (Gast)


Lesenswert?

also laut code müsste die maximalspannung (1023) gleich der
referenzspannung sein? kann der adc evtl defekt sein?

von Michael von Gersdorff (Gast)


Lesenswert?

Hallo Bob
Das kann schon sein aber dann müßtest Du ihn irgendwie zerstört haben.
Hinweis: Die Eingangsspannung der Analogsignale darf nie höher sein als
die verwendete ADC-Referenzspannung.
Michael

von André K. (andre-)


Lesenswert?

In Bascom 1.11.7.9 gibts in der getadc() nen kleinen Bug (tritt
zumindest beim Mega88 auf). Ob der nun auch beim Mega128 von Belang
ist, weiss ich nicht.

Ersetze den entsprechenden Teil in der mcs.lib durch folgenden:

[_GETADC]
_GetADC:
* #IF _CHIP >30
* LDS R24, ADCSR
* Ori R24, 128+64
* STS ADCSR , R24
*_GetADC_1:
* LDS R24, ADCSR
* SBRC R24,6
* Rjmp _GetADC_1   ;  not ready
* #ELSE

* Sbi ADCSR,6    ;  start conversion
_GetADC_1:
* Sbic ADCSR,6   ;  skip next instruction if ready
Rjmp _GetADC_1   ;  not ready

;--- remark the next 4 lines for single conversion
* Sbi ADCSR,6            ; we need 2 conversions for a good result
_GetADC_2:
* Sbic ADCSR,6           ; skip next instruction if ready
* Rjmp _GetADC_2         ; not ready
;-------------------------------------------------
*#ENDIF
* In r24,ADCL            ; first read lower data register
* In r25,ADCH            ;then read upper data register
Ret

[END]

Anschliessend die mcs.lib ueber den Lib-Manager neu compilieren.

MfG,
André

von Fujisie (Gast)


Lesenswert?

Hallo,
probier mal beim Konfigurieren des AD-Wandlers  "reference=avcc" aus.

von Bob (Gast)


Lesenswert?

Hallo.
Habe den Fehler gefunden kopf klatsch auf meinem experimentierboard
war auf interne referenz gejumpert. BLÖD!

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.