Avatar billede dj-hupi Nybegynder
02. april 2007 - 13:01 Der er 14 kommentarer og
1 løsning

Fra hex til dec

Hejsa ...

Jeg har et analog signal som jeg modtager fra en temperatur føler. Det signal kommer i HEX og det vil jeg gerne have konverteret til decimal tal.

Er der nogen realativ nem måde at gøre det på?

Rasmus
Avatar billede bitmatic Nybegynder
02. april 2007 - 13:27 #1
Jeg skal lige vide lidt mere....

Får du signalet ind som en streng eller en char eller noget helt tredje ?
Og hvor langt kan det være ?
Avatar billede dj-hupi Nybegynder
02. april 2007 - 13:45 #2
Det er som en int. I mellem 0x00 og 0xFF :)
Avatar billede bitmatic Nybegynder
02. april 2007 - 13:56 #3
Ok. Så er jeg ikke sikker på jeg egentlig forstår spørgsmålet :-)

Hvis det ligger i en int ligger det jo bare som et tal. Om du så vælger at se på det som et hex, decimal eller binært tal ændrer jo ikke noget ved selve tallet.

hvis du har tallet liggende i en variabel "i" f.eks. burde du kunne skrive:
printf("%d", i);
Hvis du vil se tallet i decimal

eller:
printf("%X", i);
Hvis du vil se tallet i hex.
Avatar billede faerch Nybegynder
02. april 2007 - 14:35 #4
Er det du ønsker i virkeligheden at have omsat den analoge værdi til en temperatur?

Hvis det er tilfældet skal du bruge databladet på temperaturføleren og finde ud af hvilken spænding, der svarer til en given temperatur.
Så er det bare at håbe at den er linær, det vil gøre alting meget nemmere. Gav det mening?


Det kan også være en typecasting du mener?
unsigned char AnaIn=0;
float MidlertidigFloat;

MidlertidigFloat = (float)AnaIn;
Avatar billede dj-hupi Nybegynder
02. april 2007 - 14:52 #5
Faerch, ja altså jeg modtager data'erne fra ADDAT.

int currenttemp = 0; //Er sat til nul som standart.

void checktemp ();
{
DAPR = 0x40;
while(BSY)
currenttemp = ADDAT;
}

Jeg har altså min målte værdi i currenttemp variablen. Hvis jeg så vil lave den til decimal. Så kan jeg gange op og få min ønsket temperatur. :)
Avatar billede dj-hupi Nybegynder
02. april 2007 - 14:55 #6
Linear + 10mV/.C scale factor
Det er en LM35DZ jeg bruger.
Avatar billede scheea2000 Nybegynder
02. april 2007 - 17:36 #7
Vi kender ikke rigtig din opsætning, men se på side 1 i

http://cache.national.com/ds/LM/LM35.pdf
Avatar billede dj-hupi Nybegynder
02. april 2007 - 18:07 #8
Undskyld Scheea2000 den er sat op som figur 1. :)
Avatar billede dj-hupi Nybegynder
02. april 2007 - 18:37 #9
Jeg er kommet frem til denne omregning:

Måle spektrum er fra 0-1,25V.
Volt pr outputenhed: 1,25/2^8 = 1,25/256 = 0,0048V = 48mV

Det første testforsøg fik jeg:

Temperatur: 19.5 C (Med Thermomenter)
Registeret hex-værdi på analog porten: 0x2A
Omregnet til binaer: 0010-1010
Omregnet til decimal: 42

42 * 0,0048 = 0,2016 * 100 = 20,16C

Ser det helt forkert ud ?

Mit problem er at lave det i C :/
Avatar billede bertelbrander Praktikant
02. april 2007 - 19:52 #10
Noget i stil med:
  int currenttemp = ADDAT;
  int temp = currenttemp*20/0x2A;

Det kan godt være at det er bedre at:
  int temp = (currenttemp*8) >> 4;
  std::cout << temp << std::endl;

Men du skal nok måle ved to forskellige temperaturer for at finde formlen.
For ovenstående går ud fra at ADC'en giver 0 ved 0 grader, hvilket ikke er sandsynligt.
Avatar billede dj-hupi Nybegynder
02. april 2007 - 20:42 #11
Så vidt jeg kan se starter den ved +2.C og til 150.C (Hvis jeg køre med målespektrum 0-5V)
Men jeg har ændret målespektrum til 0-1,25V. Så det er +2 til 125.C
Avatar billede tbrf Nybegynder
02. april 2007 - 20:57 #12
hovedspørgsmålet er vel hvordan man lettest konverterer en værdi fra en "int" til en række karakterer.

fx:
man har målt og regnet sig til en temperatur på 56.7. Hvordan konverterer man så lettest det til karaktererne "5" "6" "." "7" som kan skrives ud på et lcd display et af gangen.
Avatar billede faerch Nybegynder
08. april 2007 - 16:22 #13
Jeg kan ikke lure om du er kommet frem til en løsning?

Tænker at målekredsløbet består af mere end blot sensoren og mikroen. Hvis der er kondensatore eller andet i målekredsløbet vil jeg foreslå du måler mere end 2 punkter (da vil det afløres om inputtet er linært eller om der skal lidt mere til).

Hvis spørgsmålet er om der skal konverteres mellem en int og en streng er det blot et spørgsmål om at bruge en printf(). Hvis det er tilfældet skal jeg nok give et par eksempler på hvordan det kan gøres.
Avatar billede faerch Nybegynder
08. april 2007 - 16:23 #14
Også et eksempel uden printf, hvis det er ønskeligt....
Avatar billede dj-hupi Nybegynder
15. juni 2008 - 13:10 #15
Faerch - kan drlig huske om vi fandt et. Men lav en svar.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester