Sida 1 av 2

ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 18:03:13
av kvaark
om man ska räkna ut ett binärt tal på en 10 bitars ad omvandlare som är kopplad till 5v

delar man då 1024 med 5000mv och multipliserar det värdet med säg 1500mv = 307.2 = b100110011
eller är jag helt fel ute?

Re: ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 18:08:48
av eqlazer
Va? Har du en 10-bitars ADC med referensen 5V?

Om så är fallet så motsvarar varje steg 5V/1024=4.88mV. Så om du vid en omvandling skulle få resultatet 326 motsvarar det 326*4.88mV=1.59V på ADC-ingången.
Sen om man räknar binärt eller decimalt kvittar ju.

Re: ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 21:03:03
av AndLi
kvaark: Ja det är som sagt bara två sätt att presentera samma värde (eller nästan samma då det avrundas från 307.2 till 307)
Men oftare tycker jag att man ser det presenterad i hexadecimalt (0x133) men det är ju fortafarande samma värde som motsvarar dina 1500mV in.

Re: ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 21:27:28
av kvaark
Ok om jag säger såhär då!!

Det jag vill kommafram till är hur jag matematikt räknr utt vilket tal ad omvandlaren får fram om det är 1,5v på ad-pinnen!!

Ska bli en temp mätare som startar på en angiven temp!

Re: ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 21:34:45
av Klas-Kenny
Med 5V referens och 10bit ADC blir det som eqlazer skrev, varje "steg" eller nummer, är 4,88mV.

Så 1,5V blir då 1500/4,88 = ~307, eller binärt 0100110011

Edit: Så ja, du räknade rätt... :)

Re: ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 21:35:54
av AndLi
Men det har du ju redan gjort... Du kom ju själv fram till 307?

1024/5*1.5 = 307.2 eller vill du ha ett sätt som inte använder flyttal?
Vill du räkna fram värdet för en annan spänning är det bara att byta 1.5 till det värde du nu råkar ha...

edit: för långsam, jag tror inte vi fattar frågan...

Re: ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 22:04:00
av kvaark
Frågan va helt änkelt om jag hadde tänkt rätt! Och det hadde jag ju då!!

Re: ADC räkna ut binärt tal?

Postat: 25 augusti 2011, 23:43:15
av jesse
Vill du ha ut ett tal som motsvarar spänningen i millivolt så kan du räkna så här:

Kod: Markera allt

uint16_t  ADC //  data in från ADC , värde 0-1023.
uint16_t volt //  värde i millivolt 0 - 5000

volt = (((uint32_t)ADC*5000)+512) >> 10;
// avrundar till närmaste hela millivolt

I en processor är det sedan lätt att skriva ut värdet i decimalform på vanligt sätt. Vill man ange värdet i volt i stället för millivolt sätter man bara en punkt efter första siffran...

Re: ADC räkna ut binärt tal?

Postat: 26 augusti 2011, 18:58:16
av kvaark
vad är det där skrivet i för språk då fattar nada :D

kan bara asseembly

Re: ADC räkna ut binärt tal?

Postat: 26 augusti 2011, 19:27:24
av TomasL
C, men jag skulle nog valt en annan algoritm, för att slippa multiplikationen.

Re: ADC räkna ut binärt tal?

Postat: 27 augusti 2011, 19:47:55
av jesse
som t,ex?

Re: ADC räkna ut binärt tal?

Postat: 27 augusti 2011, 19:54:07
av jesse
Orkade inte skriva i assembler, då det blir ganska mycket kod, om man inte har färdiga rutiner för hantering av 32 bitars tal.

Men man kan översätta C-koden till följande:

multiplicera ADC-resultatet med 5000 (och du får ett tre bytes långt tal)
addera 512 (för att avrunda till närmaste heltal).
rotera 10 bitar åt höger. (vilket innebär division med 1024)
Detta kan du göra i assembler genom att skippa den lägsta byten och rotera de övriga två bitar åt höger.
du har nu ett 16-bitars resultat i millivolt.

Re: ADC räkna ut binärt tal?

Postat: 29 augusti 2011, 16:52:33
av bearing
Eftersom att både 5000 och 512 är jämnt delbara med 4 går det att förenkla till volt = (((uint32_t)ADC * 1250) + 128) >> 8;. Skiftning 8-bitar till höger går snabbt eftersom att det innebär att då två mittersta bytesen av högerledets 32-bitars-produkt kopieras rakt in i volt.

Ifall det inte gör något att 1V beräknas till 1024mV går det ju att helt enkelt multiplicera med 5, vilket görs med shiftning och addition.

Kod: Markera allt

volt = ADC;  /* volt = ADC*1 */
volt <<= 2;  /* volt = ADC*4 */
volt += ADC; /* volt = ADC*5 */

Re: ADC räkna ut binärt tal?

Postat: 9 september 2011, 17:40:04
av kvaark
Ok så om jag bygger ihop en opamp som gör så att 2,5v motsvarar 41 grader och 0v -10
Linjär kurva 0,5 volt/grad
Kopplar till 8 bitars adc med reffirensv på 2,5v

Då kommer jag att få 5 tal för varge grad?
Detta vill jag visa på 2x7segments display i heltal!!

Jag programerar i assembly

Ska ag skriva två tabeller en för tiotal och en för entala 255 värden vardera?

Eller fins det något vättigare sätt att göra detta på?
Hoppas någon förstår vad jag är ute och fiskar efter!?

Re: ADC räkna ut binärt tal?

Postat: 9 september 2011, 17:51:39
av sodjan
> Då kommer jag att få 5 tal för varge grad?

Du menar att du får ett binärt tal med upplösningen 0.2 grad C ?
Kan du inte justera opampen o.s.v så att du får 4 "steg" per grad C ?
D.v.s en upplösning på 0.25 grad C. Det blir mycket enklare att hantera.

> Detta vill jag visa på 2x7segments display i heltal!!

Om du har 4 steg per grad C så är det bara att först "kasta"
de två lägsta bitarna (2 steg höger shift). Det du nu har är
grader C som ett heltal.

(Med 5 steg per grad C s behöver du göra en division med 5 vilket
är betydligt trixigare. men inte omöjligt, än en division med 4).

Sen är det bara att dela upp det i en tiotals siffra och ental.
Det är inget större problem. Se hur många gånger du kan dra bort
10 från värdet utan att det går under noll. Det är tiotalet. Resten
är entalet.

Sedan mappar du varje siffra via en tal -> 7-segment tabell
och lägger ut det på respektiva display.