mikrocontroller.net

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


Autor: Cooool39 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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
------------------------------------------------------------------

Autor: M. W. (hobbyloet)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: jasmin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lcd "vormkomma",  "," ,"nachmkomma" ;

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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$

Autor: Christian M. (cooool39)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: D. S. (jasmin)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: D. S. (jasmin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gleichen code benutzt...

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: D. S. (jasmin)
Datum:

Bewertung
0 lesenswert
nicht 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 ;-)

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht 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_se...

Autor: Cooool39 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: D. S. (jasmin)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@screwdriver


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

Autor: Paul Baumann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>dicke Weiber

Parameter expected! ;-))
MfG Paul

Autor: Dominique Görsch (dgoersch)
Datum:

Bewertung
0 lesenswert
nicht 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: Youtube-Video "De Höhner - Dicke Mädchen haben schöne Namen 2005 & 2001"

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.