Char > LCD
Char > LCD
Har efter mycket om och men skrivit några rutiner för att läsa av tempraturen från en DS1820. Använder en pic16f877a till detta.
Mitt problem är att jag efter ha läst tempraturen har en char med tempraturen. Hur gör jag sedan för att skriva ut denna på min lcd.
Har färdiga rutiner som jag skrivit till min lcd för att skriva ut stängar o char.
Men problemet är att min char med tempraturen är två siffrit tal.
Så hur gör jag om detta så jag kan skriva ut det?
Kanske lite flummigt men hoppas ni förstår.
Mitt problem är att jag efter ha läst tempraturen har en char med tempraturen. Hur gör jag sedan för att skriva ut denna på min lcd.
Har färdiga rutiner som jag skrivit till min lcd för att skriva ut stängar o char.
Men problemet är att min char med tempraturen är två siffrit tal.
Så hur gör jag om detta så jag kan skriva ut det?
Kanske lite flummigt men hoppas ni förstår.
Självklart gör det det !
> Har färdiga rutiner som jag skrivit till min lcd för att skriva ut stängar o char.
Ge ett par exemepl på vilka format dina rutiner accepterar.
> min char med tempraturen är två siffrit tal.
Exempel ! Vadå "tvåsiffrigt tal" ?
> Så hur gör jag om detta så jag kan skriva ut det?
Gör om till vadå ? Exempel på vad du vill göra !
Självklart går det att vara mer konkret och tydlig.
Det är *du* som vill ha hjälp, så det är *du* som får bjuda till lite...
> Har färdiga rutiner som jag skrivit till min lcd för att skriva ut stängar o char.
Ge ett par exemepl på vilka format dina rutiner accepterar.
> min char med tempraturen är två siffrit tal.
Exempel ! Vadå "tvåsiffrigt tal" ?
> Så hur gör jag om detta så jag kan skriva ut det?
Gör om till vadå ? Exempel på vad du vill göra !
Självklart går det att vara mer konkret och tydlig.
Det är *du* som vill ha hjälp, så det är *du* som får bjuda till lite...
Passar pa att flika in en lank till en tidigare diskussion.
http://www.elektronikforumet.com/forum/ ... sc&start=0
http://www.elektronikforumet.com/forum/ ... sc&start=0
Ok, vi försöker väl en gång till då..
Vad jag använder:
PIC16F877A
MPLAB med Hi-tech PICC
DS1820
Jag har en variablel av typen char som innehåller tex:
0x32 Vilket är 25 grader C
0x01 Vilket är 0.5 grader C
Detta vill jag på ett enkelt sätt skriva ut på min alfanumeriska LCD.
Har rutiner för att kunna skriva ut en char på en viss posetion och även en rutin för strängar.
Hoppas det blev tydligare nu.
Vad jag använder:
PIC16F877A
MPLAB med Hi-tech PICC
DS1820
Jag har en variablel av typen char som innehåller tex:
0x32 Vilket är 25 grader C
0x01 Vilket är 0.5 grader C
Detta vill jag på ett enkelt sätt skriva ut på min alfanumeriska LCD.
Har rutiner för att kunna skriva ut en char på en viss posetion och även en rutin för strängar.
Hoppas det blev tydligare nu.
Det var skillnad ! 
Din variabel innehåller alltså temperaturen uttryckt som antal halva grader från 0. T.ex h'32' = d'50' = 25 deg C +. OK.
Och på LCD'n vill du ha temperaturen i deg C uttryckt decimalt, eller hur ?
Inga temperaturer < 0 ?
Vill du har med den halva graden, så att h'33' = 25.5 deg C ?
Det räcker nog inte *bara* med itoa(), men den kanske kan vara en del i lösningen.
Jag lämnar detta till någon som är mer road av C än vad jag är...

Din variabel innehåller alltså temperaturen uttryckt som antal halva grader från 0. T.ex h'32' = d'50' = 25 deg C +. OK.
Och på LCD'n vill du ha temperaturen i deg C uttryckt decimalt, eller hur ?
Inga temperaturer < 0 ?
Vill du har med den halva graden, så att h'33' = 25.5 deg C ?
Det räcker nog inte *bara* med itoa(), men den kanske kan vara en del i lösningen.
Jag lämnar detta till någon som är mer road av C än vad jag är...

Exakt rätt tolkat. Skillnaden var att denna gången skrek inte min flickvän att hennes dator inte fungerade..
Nej inga tempraturer som är mindra än noll. Detta kontrolleras med 8 andra bitar så det behövs inte blandas in.
Men det måste finnas någon här som har skrivit några rutiner för DS1820 som kanske hade samma problem?
Nej inga tempraturer som är mindra än noll. Detta kontrolleras med 8 andra bitar så det behövs inte blandas in.
Men det måste finnas någon här som har skrivit några rutiner för DS1820 som kanske hade samma problem?
OK. Jag ville bara hjälpa dig att få din fråga lite tydligare. 
Sen kan jag tycka att detta inte är något "DS1820-problem", den delan fungerar ju bra. Det är snarare en ren C-fråga om en format konvertering.
Beroende på hur man skriver DS1820/1-Wire rutinerna, så antar jag att man kan få temperaturen på lite olika format, så det behöver inte alls se ut på samma sätt som i just ditt fall.
Men, du behöver alltså hitta en metod att konvertera t.ex :
o.s.v.
(a'xxxx' symboliserar alltså en sträng med ASCII kodade tecken.)
Som sagt, någon som kan C kanske kan se en enkel metod.

Sen kan jag tycka att detta inte är något "DS1820-problem", den delan fungerar ju bra. Det är snarare en ren C-fråga om en format konvertering.
Beroende på hur man skriver DS1820/1-Wire rutinerna, så antar jag att man kan få temperaturen på lite olika format, så det behöver inte alls se ut på samma sätt som i just ditt fall.
Men, du behöver alltså hitta en metod att konvertera t.ex :
Kod: Markera allt
h'00' -> a' 0.0'
h'01' -> a' 0.5'
...
h'10' -> a' 8.0'
h'11' -> a' 8.5'
...
h'31' -> a'24.5'
h'32' -> a'25.0'
h'33' -> a'25.5'
(a'xxxx' symboliserar alltså en sträng med ASCII kodade tecken.)
Som sagt, någon som kan C kanske kan se en enkel metod.
varning för felskrivning, men jag skulle nog gjort.
writestrtolcd är altså en funktion som tar en sträng och skriver ut den till lcd, du hade väll en sånn funktion. tempvalue är avläst värde
edit: fixade bitroteringen
Kod: Markera allt
writestrtolcd(itoa(tempvalue>>1));
if(tempvalue&0x01)
writestrtolcd(".5");
else
writestrtolcd(".0");
edit: fixade bitroteringen
Senast redigerad av AndLi 27 september 2005, 20:06:13, redigerad totalt 1 gång.