Sida 1 av 1

Problem med pot avläsning med uC

Postat: 2 juni 2006, 11:42:24
av Erik_Lind
Jag har en pot jag kopplat som spänningsdelare och läser av de med interna 10bitars A/Dn på en Atmega128.

Jag behöver bara 8-bitars upplösning på hela spannet.
Men tyvärr kan den väl alltid stå och slå +/-1bit vilket då och då kan påverka värdet även om jag shiftar bort 2LSb.
Det vart dock bättre när jag medelvärdesbildade avläsningen av poten.

Ett annat problem är att om jag slår av och på systemet så kan den också hamna ett steg upp eller ner ifrån det värdet den läste tidigare.

Är detta sånt man får leva med, eller brukar man lösa det på någe vis?

Postat: 2 juni 2006, 12:25:37
av Icecap
Första steg är att montera en avkoppling mellen GND och den analoga ingången. Nästa steg är att ha GND och VCC till pot'en kopplat direkt till µC'n och att INGET annat sitter på den biten.

Du får alltså brus som är 2 bit och det är en del, hur är hela uppställningen avkopplat? Om du kollar i dokumentationen finns det sannolikt en del beskrivning av hur man ska avkoppla AD-delen, lusläs den biten.

Som avkoppling fungerar 100nF (gärna keramisk) bra, det är värd att se till att ha såna i handfullar till generell avkoppling.

Postat: 2 juni 2006, 12:48:15
av vfr
Det finns egentligen inget sätt att vara säker på att värdet inte kan "fladdra" en bit upp eller ner. Har du otur och potens inställning ligger precis vid en omslagspunkt mellan två bitvärden, t.ex 127->128 på en 8-bitars AD, kommer den alltid att kunna slå mellan dessa värden.

Däremot går det givetvis alltid att filtrera värdet så att ändringarna i värde inte sker alltför ofta eller mer än ett bitvärde. Både elektrisk filtrering på matning och ingångspinne och sedan programmässig filtrering.

Postat: 2 juni 2006, 12:49:20
av sodjan
> Men tyvärr kan den väl alltid stå och slå +/-1bit

Ja. Det spelar absolut ingen roll hur mycket man än avkopplar
och donar.

> Det vart dock bättre när jag medelvärdesbildade avläsningen av poten.

Ändrar i princip ingenting, det bara "står och slår" lite långsammare.

> även om jag shiftar bort 2LSb.

Även bit 2 (alltså tredje biten) kommer att "stå och slå" när de tre
sista bitarna växlar mellan "011" och "100". OCh det gäller generellt
för alla bitar i resultatat, alla bitar har ett läge där de kan "stå och slå".

Du får helt enkelt acceptera att ett ADC värde aldrig kan vara helt stabilt i alla lägen.

Lite OT, men kan du inte ställa in ADC'n så att de 8 högsta bitarna
hamnar i ett register utan shiftning ? Åtminstående på en PIC kan man
välja om det ska vara de 2 högsta eller de 2 lägsta bitarna som ska
hamna i ett "eget" register ("right/left adjust").

Postat: 2 juni 2006, 12:52:18
av sodjan
vfr> t.ex 127->128 på en 8-bitars AD...

Mycket bra exempel ! :-)
*Alla* bitar kommer att "fladdra" i det läget...

"01111111" <-> "10000000"

Postat: 2 juni 2006, 13:22:56
av björn
Sodjans lilla OT : Jo det har du helt rätt i och gäller även AVR, dvs man kan välja om man vill ha höger eller vänsterjusterat.

Postat: 2 juni 2006, 18:21:58
av Marta
Använd alla bitarna för att räkna ut skillnaden och gör förändring endast om den överskrider ett tröskelvärde. På det sättet så kan man behålla 8 bitars upplösning vid finjustering förutsatt att pot och störnivå medger det. Annars är väl en "digital pot" det bästa om det finns två pinnar att tillgå för den.