MCP3201 ADC Probleme

OP #4914859
Hallo,
ich habe den MCP3201 ADC an einem ATmega8 laufen. Der konvertierte Wert 
wird per SPI eingelesen und testweise auf einem LCD ausgegeben, was auch 
eigentlich funktioniert. Wenn der Eingang vom ADC auf Vcc liegt sehe ich 
auf dem Display 4099, was abgesehen von den 4 bit zu viel, passt. Jetzt 
habe ich einen Poti (100k) als Spannungsteiler zwischen Vcc und GND, 
dass ich also auf dem Display Zahlen zwischen 4096 und 0 sehen sollte. 
Die Zahlen von 1000 bis 4096 lassen sich problemslos einstellen. Wenn 
ich jedoch den poti bei 1000 weiter runterschraube ist der nächste Wert 
9990, von dort geht es dann runter in 10er Schritten bis ca. 2300 (nach 
jeder rotation über 9990 etwas mehr/weniger).
Wenn ich jedoch den poti auf GND drehe und den µC reset zeigt es 
plötzlich nur sowas wie 2 oder 1 an... was richtig ist. Wenn ich jedoch 
in den zweistelligen Bereich schraube komme ich nicht unter ca. 21.
Im Dreistelligen nur runter auf ca. 220.
Da sieht man ein Muster... hab nur keinen Plan wo das Problem liegt.
MfG Steven
PS: die SPI-Auslese routine ist von 
http://www.speedlimit88.com/arduino/spi_adc/
Angehängte Dateien:
Gast #4914873
Dann ist dein Programmcode halt falsch.
Es kommen Werte. Also gehen wir davon aus, dass das Auslesen aus dem ADC 
funktioniert.

Nimm dir mal das Datenblatt vor und schau dir die Bit Order im 
Resultregister an.
Man kann schnell sehen, dass deine Shift Operationen im Programmcode 
falsch sind.
Bei einem 12bit Wandler kann man nicht über 4095 kommen. Wenn dem doch 
so ist, dass ist die Umrechnung (Shiften) falsch.

Das kann auch deine Überläufe und dein komisches Verhalten erklären.

Das: result = result >> 1 ;
sollte result = result >> 2 ; sein denke ich.

Im Ergebnisregister muss du nicht nur ein bit wegschmeißen, sondern 2. 
Da sind ja nicht nur B0 sondern auch B1 enthalten. Beide brauchst du 
nicht.

Gruß
OP #4914891
Danke für die Antwort.
result = result >> 1 sorgt dafür ,dass das erste bit von der LSB first 
übertragung rausgeschoben wird(b0 gehört noch zur MSB first übertragung)
Wenn ich da eine 2 verwende komme ich auf nur max. 2049 und min ca. 800.
OP #4915319
Also, ich habe erstmal die Hardware neu aufgebaut um dort defekte etc. 
auszuschließen. Dies hatte nichts gebracht.
Durch rumprobieren habe ich in der Software noch am Anfang ein 
lcd.clear() eingefügt. Dies hat das Problem behoben, ich weiß jedoch 
nicht genau warum. Es hat auf alle Fälle was mit dem LCD zu tun. 
(speichert der HD4470 die Werte die er anzeigen soll und "vermischt" die 
vorherigen mit den nächsten?)
Zumindest die SPI-abfrage ist richtig.
MfG Steven
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.