Sida 1 av 2

Char > LCD

Postat: 27 september 2005, 15:45:32
av Grip
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.

Postat: 27 september 2005, 15:49:50
av sodjan
Använder du inget programmeringsspråk ??

> Kanske lite flummigt

Skriv mindre flummigt då...

Postat: 27 september 2005, 15:53:27
av Grip
Glömde skriva att jag använder C.

Mindre flummigt går inte att skriva när man är flummig..

Postat: 27 september 2005, 15:58:35
av sodjan
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...

Postat: 27 september 2005, 16:03:51
av cykze
Passar pa att flika in en lank till en tidigare diskussion.
http://www.elektronikforumet.com/forum/ ... sc&start=0

Postat: 27 september 2005, 16:14:06
av Gimbal
jag säger bara itoa(), sök på det.

Postat: 27 september 2005, 16:15:36
av Grip
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.

Postat: 27 september 2005, 16:37:52
av sodjan
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... :-)

Postat: 27 september 2005, 16:43:42
av Grip
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?

Postat: 27 september 2005, 17:08:02
av sodjan
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 :

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'
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.

Postat: 27 september 2005, 19:14:51
av Gimbal
Den snabba/lata lösningen om det finns plats i minnet. går säkert att göra mindre minneskrävande, men det orkar jag inte bry mig om.

v är din char med värdet och ch är en sträng;
( testade raden på min atmega 88, funkar. )

dtostrf((float)v/2, 2, 1, ch);

Postat: 27 september 2005, 19:26:06
av Grip
Synd bara att jag inte hittar den funktionen till min PIC.
Snart blir det till att hårdkoda en tabell och låta programmet slå upp i den.
Kanske inte den snyggaste lösningen och inte den bästa heller, men den fungerar kanske.

Postat: 27 september 2005, 19:29:34
av AndLi
varning för felskrivning, men jag skulle nog gjort.

Kod: Markera allt

writestrtolcd(itoa(tempvalue>>1));
if(tempvalue&0x01)
writestrtolcd(".5");
else
writestrtolcd(".0");
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

Postat: 27 september 2005, 19:48:56
av Gimbal
Verkar bra, fast skifta bara ett steg. dvs >>1

Postat: 27 september 2005, 20:05:26
av AndLi
Självklart ska det bara skiftas ett steg!!! skyller på att jag börja med en /2 :)