Hallo allerseits,
ich habe wiedermal ein "Problem(chen)" bzw. ein Phämomen, welches mit unklar ist:
Kurz zum Verständnis:
ich habe das "CRUMB2560"-Modul mit einem AVR2560. Dort möchte ich alle 16 ADC's nutzen.
Als Referenzspannung nutzen ich 4,096V (IC MAX 6241 - ein wunderbarer IC! - Absolut genau und stabil! - kann ich nur empfehlen...)
Also: 4096 mV sind 1024 Bit -> 4 mV / Bit Auflösung.
Programmcode ADC-Initialisierung:
Jeden ADC-Kanal frage ich 10mal nacheinander mit 200µs Pause ab und bilde daraus jeweils einen Mittelwert:
Prinzipieller Beispielcode:
Beim Testen der ADC-Kanäle ist mir aufgefallen, dass alle Kanäle am Port K (ADC 8 bis 15) einwandfrei funktionieren.
Die ADC-Kanäle 0 bis 7 (Port F) bringen allesamt einen Offset von 16 Bit (Ich lege alle ADC's auf Ground). Das sind also 64 mV zuviel! - Wieso?
Port K zeigt 0 Bit und Port F 16 Bit unter gleichen Bedingungen!
Was ist hier los bzw. was mache ich falsch?
Oder gibt es doch Unterschiede zwischen den 2 ADC-Ports?
Das die ADC's 9 bis 16 (Port K) nicht mit Getadc = 8 bis 15 sondern mit 32 bis 39 abgefragt wird habe ich selber rausgefunden - aber jetzt weis ich nicht mehr weiter!
Kann mich da jemand aufklären?
Gruß aus dem Erzgebirge
Mario
ich habe wiedermal ein "Problem(chen)" bzw. ein Phämomen, welches mit unklar ist:
Kurz zum Verständnis:
ich habe das "CRUMB2560"-Modul mit einem AVR2560. Dort möchte ich alle 16 ADC's nutzen.
Als Referenzspannung nutzen ich 4,096V (IC MAX 6241 - ein wunderbarer IC! - Absolut genau und stabil! - kann ich nur empfehlen...)
Also: 4096 mV sind 1024 Bit -> 4 mV / Bit Auflösung.
Programmcode ADC-Initialisierung:
Code:
Config Adc = Single , Prescaler = Auto , Reference = Aref ' Referenz ist +4,096V !!
Prinzipieller Beispielcode:
Code:
Start Adc
' 1. ADC (ADC 0 PORT F)
Adcdigit = 0
For I = 1 To 10
Adcdigit = Adcdigit + Getadc(0)
Waitus 200
Next I
Adcdigit = Adcdigit / 10
' ...in String und zur Anzeige...
Waitus 200
'...
' 8. ADC (ADC 7 PORT F)
Adcdigit = 0
For I = 1 To 10
Adcdigit = Adcdigit + Getadc(7)
Waitus 200
Next I
Adcdigit = Adcdigit / 10
' ...in String und zur Anzeige...
Waitus 200
' 9. ADC (ADC 0 PORT K)
Adcdigit = 0
For I = 1 To 10
Adcdigit = Adcdigit + Getadc(32)
Waitus 200
Next I
Adcdigit = Adcdigit / 10
' ...in String und zur Anzeige...
Waitus 200
'...
' 16. ADC (ADC 7 PORT K)
Adcdigit = 0
For I = 1 To 10
Adcdigit = Adcdigit + Getadc(39)
Waitus 200
Next I
Adcdigit = Adcdigit / 10
' ...in String und zur Anzeige...
Stop Adc
Die ADC-Kanäle 0 bis 7 (Port F) bringen allesamt einen Offset von 16 Bit (Ich lege alle ADC's auf Ground). Das sind also 64 mV zuviel! - Wieso?
Port K zeigt 0 Bit und Port F 16 Bit unter gleichen Bedingungen!
Was ist hier los bzw. was mache ich falsch?
Oder gibt es doch Unterschiede zwischen den 2 ADC-Ports?
Das die ADC's 9 bis 16 (Port K) nicht mit Getadc = 8 bis 15 sondern mit 32 bis 39 abgefragt wird habe ich selber rausgefunden - aber jetzt weis ich nicht mehr weiter!
Kann mich da jemand aufklären?
Gruß aus dem Erzgebirge
Mario