AVR & ADC mal wieder

Gast #218202
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 ######################
Gast #218203
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
Gast #218207
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
Gast #218209
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
#218210
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é

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren