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/
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ß
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.
Hab das Shiften auf Papier nachvollzogen und ich kann keinen Fehler entdecken :-/
das ist nur zur stabilisierung und für die ablesbarkeit des Wertes auf dem LCD
Ohne den 1000 Durchläufen bekomme ich 4095 als maximal Wert, da scheint das Problem nicht zu liegen. Brauche bitte hilfe
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.