A/D omvandling till serieport (pic)

PIC, AVR, Arduino, Raspberry Pi, Basic Stamp, PLC mm.
Christian
Inlägg: 86
Blev medlem: 3 november 2003, 22:54:49

A/D omvandling till serieport (pic)

Inlägg av Christian »

Hej! Jag håller på med ett projekt där en temperatursensor-signal A/D-omvandlas av en pic som sedan skickar ut resultatet via USART:en.
A/D omvandlaren på pic:en är 10 bitars och resultatet är konfigurerat som Left Justified.
5V motsvarar 1000 digitalt. Usarten är inställd på 8 bitar Asynkron överföring.
Efter omvandlingen skickar jag innehållet i registret ADRESH till Usarten.

Så mitt problem:
I hyperterminalen visas tecknet 'm' alltså decimalt 109, medans mätning av den analoga signalen ger 2,168V.

Det digitala värdet för 2,168V borde vara:
(1000 / 5) * 2,168 = 433,6
Jag vet att detta inte går att representera med en byte, men min fråga är då vad gör pic:en med mitt värde? Den skickar ju 109, är detta nåt trunkerat värde av mitt "för stora tal"?
victor_passe
Inlägg: 2436
Blev medlem: 28 januari 2007, 18:45:40
Ort: Kungsbacka

Re: A/D omvandling till serieport (pic)

Inlägg av victor_passe »

Som det är nu antar jag att den slänger dina 2 "första" bitar
alltså, multiplicera ditt tal med 4. 109*4=436 alltså nästan exakt rätt. Din multimeter och pic-adc skiljer ju lite.

Och inte 1000 utan 1024 ska det väl ändå vara?
Christian
Inlägg: 86
Blev medlem: 3 november 2003, 22:54:49

Re: A/D omvandling till serieport (pic)

Inlägg av Christian »

Då antar jag att du menar att jag slänger bort msb och den som är näst msb?
Kan du förklara var du får "multiplicera med 4" ifrån? =)
sneaky
Inlägg: 1621
Blev medlem: 22 juni 2009, 18:38:42

Re: A/D omvandling till serieport (pic)

Inlägg av sneaky »

0b1111111111 = 1023
0b11111111 = 255
1023/255 = 4
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Re: A/D omvandling till serieport (pic)

Inlägg av sodjan »

> där en temperatursensor

Vilka då ? Modell ? Datablad ?

> ...av en pic...

Vilken PIC (notera versaler) ?

> 5V motsvarar 1000 digitalt.

Vad menar du med "digitalt" ? Decimalt kanske ?
Och varför just 1000 och inte 1023 ?

> och resultatet är konfigurerat som Left Justified.

OK, så alla 8 bitar av ADRESH används och 2 bitar av ADRESL.

> Efter omvandlingen skickar jag innehållet i registret ADRESH till Usarten.

OK, så du "strippar" alltså de två lägsta bitarna från resultetet. Helt OK
om man inte i alla fall behöver den extra upplösningen. Sen får man naturligastvis
ta hänsyn i den andra änden till att man i princip har dividerat mätvärdet med 4,
men det har du väl kläm på, eller hur ?

> Efter omvandlingen skickar jag innehållet i registret ADRESH till Usarten.

Inte speciellt bra. Omvandla först värdet till något som passar för seriell överföring.
T.ex BCD och ASCII eller något liknande. Se vidare nedan.

Sen när det gäller det du faktiskt frågar om så är det ju, som victor_passe redan
har konstaterat, inget problem alls. Allt fungerar som det ska. Dock är det fortfarande
ingen bra lösning att skicka ADRESH "rakt av" över en seriell kommunikationslinje. Du
kan ju bara fundera på vad som händer (eller inte händer) när mätvärdet råkar
sammanfalla med CR, LF eller något annat kontrolltecken som kommunikationsrutinerna
(speciellt i PC'n) kanske hanterar lite speciellt...
Användarvisningsbild
Marta
EF Sponsor
Inlägg: 7487
Blev medlem: 30 mars 2005, 01:19:59
Ort: Landskrona
Kontakt:

Re: A/D omvandling till serieport (pic)

Inlägg av Marta »

Mitt råd är att Du använder alla 10 bitarna och konverterar dessa till 3 hexadecimala siffror (enklare manuell tolkning), alternativt bokstäver A till P (enklare program). Skicka sedan dessa med t.ex. mellanslag som separator mellan grupperna, då kan Du även lätt se på terminalen vad som skickas. Ställ om till "right justified", så blir hela proceduren enklare. Låt programmet i PC'n sköta all omräkning o.dyl. som eventuellt behövs för att få ett kalibrerat och färdigt mätvärde.

Har Du inte låst Dig på något sätt vid den nuvarande sensorn och det handlar om "normala" temperaturer bör Du även överväga att byta till DS18B20 som har inbyggd A/D och därmed kommunicerar digitalt utan analoga felkällor samt är fabrikskalibrerad +/- 0.5 grader. Den är dessutom adresserbar, så flera sensorer kan anslutas mycket enkelt om det skulle behövas.
Skriv svar