Forum: Mikrocontroller und Digitale Elektronik Bascom - LCD - Zahlen trennen durch Komma


von Cooool39 (Gast)


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

von M. W. (hobbyloet)


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

von Dominique G. (dgoersch)


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

von Axel K. (axel)


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

von jasmin (Gast)


Lesenswert?

lcd "vormkomma",  "," ,"nachmkomma" ;

von screwdriver (Gast)


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$

von Christian M. (cooool39)


Lesenswert?

das war nicht mein Quellcode, den habe ich nur gefunden und 
umgeschrieben!
und ich benutze den Code mit einen DS1820. kann mir jemand sagen wie der 
code für einen DS18b20 aussehen würde?

von Dominique G. (dgoersch)


Lesenswert?

Christian M. wrote:
> kann mir jemand sagen wie der code für einen DS18b20 aussehen würde?

Genau dafür hab ich doch den Code gepostet ;)

von D. S. (jasmin)


Lesenswert?

"Deswegen "T / 16", beim normalen DS1820 müsste es "T / 2" sein. "


Wieso das denn ?

Wer kann mir das erklären, ich habe bisher beim 1820 wie beim 18b20 
benutzt; ohne Probleme.
Was habe ich da übersehen ?


Dietmar

von D. S. (jasmin)


Lesenswert?

gleichen code benutzt...

von Dominique G. (dgoersch)


Lesenswert?

Wenn ich das richtig sehe, hat der DS18b20 eine höhere Auflösung, 
nämlich 9, 10, 11 und 12 Bit, der DS18s20 bietet lediglich 9-Bit an. 
Möglicher Weise verwendest du beide einfach im 9-Bit Modus und brauchst 
deswegen den Code nicht anpassen.

von D. S. (jasmin)


Lesenswert?

ja stimmt..


letztlich eh egal weil:

±0.5°C Accuracy from -10°C to +85°C

es sei denn man hat spaß an wild hüpfenden stellen hinter dem komma ;-)

von screwdriver (Gast)


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.

von Dominique G. (dgoersch)


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

von Cooool39 (Gast)


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?

von D. S. (jasmin)


Lesenswert?

@screwdriver


stimmt zur Trendanzeige sehr nützlich wenn der Asolutwert nicht 
interessiert.
Aber Vorsicht, man kann sich auch dicke Weiber schönsaufen !

von Paul Baumann (Gast)


Lesenswert?

>dicke Weiber

Parameter expected! ;-))
MfG Paul

von Dominique G. (dgoersch)


Lesenswert?

Aktuell passend...

   Dicke Mädchen haben schöne Namen.
   Heißen Tosca, Rosa, oder Carmen
   Dicke Mädchen machen mich verrückt
   Dicke Mädchen hat der Himmel geschickt!

Gruß
Dominique Görsch

PS: http://www.youtube.com/watch?v=uYNV2_Fylg8

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.