Bascom - LCD - Zahlen trennen durch Komma

Gast #1151020
Lesenswert?

ich lese einen Ds1820 aus, bekomme aber eine falsche ausgabe (statt zb.: 
13,5 C bekomme ich 135 C) wie kann ich die zahl trennen über Fusing 
habe ich es schon probiert das will bascom aber nicht!

ich denke es liegt daran das ich "T" as Integer definiert habe! was kann 
ich da machen?

Quellcode:

------------------------------------------------------------------------ 
--
$regfile = "m8def.dat"
$crystal = 3686411

Ddrd = &HFF
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , 
Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16 * 2

Config 1wire = Portc.5

Dim Dsid(8) As Byte
Dsid(1) = &H10 : Dsid(2) = &H68 : Dsid(3) = &H17 : Dsid(4) = &H25 : 
Dsid(5) = &H01 : Dsid(6) = &H08 : Dsid(7) = &H00 : Dsid(8) = &H98
Dim Sc(9) As Byte
-------------------------->Dim T As Integer
Dim T1 As Integer
Dim I As Byte

Cls
Cursor Off
Locate 1 , 1 : Lcd "Mein Termometer"

Do
 1wreset
 1wwrite &HCC
 1wwrite &H44
 Waitus 200
 1wverify Dsid(1)
 1wwrite &HBE
 Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
 I = Sc(1) And 1
  If I = 1 Then Decr Sc(1)
  T = Makeint(sc(1) , Sc(2))
  T = T * 50
  T = T - 25
  T1 = Sc(8) - Sc(7)
  T1 = T1 * 100
  T1 = T1 / Sc(8)
  T = T + T1
  T = T / 10
  Locate 2 , 1
-------------------------------->  Lcd T ; " Grad"
 Else
  Locate 2 , 1
  For I = 1 To 8
   Lcd Hex(sc(i))
  Next
 End If
 Waitms 500
Loop

End
------------------------------------------------------------------
#1151132
Lesenswert?

Probiere mal so und nehm gleich ein Gradzeichen rein:

Deflcdchar 1 , 6 , 9 , 9 , 6 , 32 , 32 , 32 , 32
...
Dim Temp As Single
...

Do
 1wreset
 1wwrite &HCC
 1wwrite &H44
 Waitus 200
 1wverify Dsid(1)
 1wwrite &HBE
 Sc(1) = 1wread(9)
 If Sc(9) = Crc8(sc(1) , 8) Then
 I = Sc(1) And 1
  If I = 1 Then Decr Sc(1)
  T = Makeint(sc(1) , Sc(2))
  T = T / 2
  T1 = Sc(8) - Sc(7)
  T1 = T1 / Sc(8)
  Temp = T + T1
  'Temp = Temp - 0.25
  Locate 2 , 1
  Lcd " Temp.: " ; Fusing(Temp , "##.#") ; Chr(1) ; "C "
 Else
#1151150
Lesenswert?

Ich versteh grad garnicht, was du da alles rumrechnest. Eigentlich 
reicht das auslesen von Sc(1) und Sc(2) und das ganze dann durch die 
Genauigkeit teilen:

   Answer(1) = 1wread(9)
   T = Makeint(Answer(1) , Answer(2))
   Temp = T / 16
   Print Fusing(Temp , "#.##")

Bei mir heisst Sc() halt Answer() und ich habe einen DS18b20. Deswegen 
"T / 16", beim normalen DS1820 müsste es "T / 2" sein.

Gruß
Dominique Görsch

PS: Answer ist Byte, T ist Integer, Temp ist Single
#1151437
Lesenswert?

mit str(variable) wandelst du die variable in einen String um

mit len(variable) kannst du dir die Zeichenlänge des strings ausgeben 
lassen

mit mid(variable, sartposition, anzahl der Zeichen) kannst du 
ausschneiden

mit instr(variable, xx) kannst du nach nen bestimmten zeichen suchen und 
dessen position wiedergebn lassen

Schaun danach mal in der bascom hilfe nach!
gruss axel
Gast #1152381
Lesenswert?

@dgoersch:
Cooool39 benutzt den DS18S20. Ist ein etwas größerer Aufwand, um die 
höhere Auflösung zu bekommen. Und er vermeidet (klevererweise) 
Flieskommarechnung.

@Cooool39:
temp$=str(T):format(temp$,"0.0"):lcd temp$
Gast #1152770
Lesenswert?

@dgoersch
Im Datenblatt zum DS18B20 hab ich nichts über einen 9-Bit-Modus gelesen. 
Kannst Du das bitte genauer erklären?

@jasmin
Auch wenn der Sensor "nur" eine Genauigkeit von 0.5°C hat, muß die 
binäre vierte Nachkommastelle noch lange nicht hüpfen. Ich nutze die 
höhere Auflösung der Sensoren, um Temperaturtrends zu erkennen.
#1152785
Lesenswert?

screwdriver wrote:
> Im Datenblatt zum DS18B20 hab ich nichts über einen 9-Bit-Modus gelesen.
> Kannst Du das bitte genauer erklären?

Nein sorry, ich habe auch nur in die "Parametric Search"[1] geschaut, 
dort steht der DS18b20 mit 9-12 Bit Auflösung drin.

Gruß
Dominique Görsch

[1]http://para.maxim-ic.com/en/search.mvp?fam=temp_sens&374=1-Wire&374=1-Wire%20Non-Network&tree=master
Gast #1154012
Lesenswert?

der gefällt mir sehr gut:

Answer(1) = 1wread(9)
   T = Makeint(Answer(1) , Answer(2))
   Temp = T / 16
   Print Fusing(Temp , "#.##")


und wie sieht es mit der Nachkomma-Stelle aus? kann mir jemand das noch 
veraten?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren