Sida 1 av 1
Visa värde från A/D på display i assembler?
Postat: 24 september 2007, 22:20:42
av PHermansson
Nu har jag funderat och sökt en stund men kommer inte fram till något vettigt...
Vill läsa av en A/D-ingång och få fram resultatet på displayen. Använder en PIC16F73 med 8-bitars A/D, avläsningen är inga problem men hur räknar man?
Mavvärdet är 5.12 volt(?) vilket motsvarar 8 bitar (b'11111111'). Detta ska på displayen visas som '5.000'.
Har hittat ett exempel på nätet för 10-bitars A/D, tyvärr utan kommentarer och därför svårförståelig... Hjälp!
Postat: 24 september 2007, 22:43:06
av sodjan
Vad är det du vill ha ?
Det värde som ADC'n ger eller värdet omräknat i Volt ?
Max värdet är lika med den Vref du har till ADC'n, normalt samma
som matningsspännigen om du inte har en separat spänningsreferens
inkopplad.
Så i princip är h'00' lika med 0v och h'FF' lika med 5V (stämmer inte exakt,
men duger antagligen). Sedan är det bara att räkna...
Varje steg i ADC'n är alltså 5/256 V eller ca 19,5 mV. 19,5mV är ju lite
onödigt knöligt att räkna med, så man brukar försöka justera ref-spänningen
till ADC'n så att man får ett enklare och jämnare steg.
> Mavvärdet är 5.12 volt(?)
Är det din matningsspänning ?
> Detta ska på displayen visas som '5.000'.
Varför det ? Det blir ju fel. Du sa ju att maxvärdet var 5.12 Volt.
Postat: 24 september 2007, 23:11:16
av PHermansson
Det ska bli en batterimätare till bilen helt enkelt. Tänkte börja med att lära mig visa det värde ADC'n ger på displayen, sedan lära mig att räkna om detta till riktigt voltvärde.
Första steget är alltså att få ut värdena 0-255 på displayen...
Kör med 5 volts nätdel nu, det var därifrån 5 volt kom. Har något minne av att maxvärdet för en Pic's ADC är 5,12, men det borde ju inte vara mer än drivspänningen.
Noggrannheten behöver inte vara bra, duger fint med steg på 20mV.
Andra steget:
Noll volt in ger d'00', 5 volt ger d'255', varje steg innebär 20mV.
2,5 volt ger ca d'127'. Då har jag 127 i W-registret, som på displayen ska visas som '2500'. En tanke jag har haft är att dela värdet i W med d'50' och avrunda, så får jag första siffran?
Postat: 25 september 2007, 10:07:15
av PHermansson
Nu har jag letat lite mer och lärt mig principen

Man kollar först hur många gånger man kan ta värdet minus 100, sedan minus tio osv... inte så svårt ju

Postat: 25 september 2007, 10:32:51
av sodjan
Japp, en enkel metod som är lätt att felsöka.
Sen finns det andra "smarta" metoder som ofta
är snabbare.
Postat: 25 september 2007, 10:46:03
av PHermansson
Ja det var något sånt jag försökte räkna ut först, någon smart beräkning som fixade det direkt. Men jag har inte så bråttom så räknametoden blir bra. Men det vore kul att se någon annan variant för att lära sig iofs.
Postat: 25 september 2007, 11:11:58
av sodjan
Postat: 27 september 2007, 16:55:50
av PHermansson
Ok, tack!