mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik LM76 Temperatur wird 10 Grad weniger angezeigt


Autor: Michael Beispiel (q202076)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo allerseits,

ich habe ein kleines Problem. Seit Tagen versuche ich, dass mein LCD 
richtige Temperatur anzeigt. Es wird immer 10 Grad weniger angezeigt.
Ich benutze atmega2560, LM76 und Bascom.
Kann mir jemand in dem Bereich helfen?
Hier ist mein Code:


$regfile = "m2560def.dat"                       'Atmega Deklaration
$crystal = 16000000                            'Quarz 16MHz


Config Lcdpin = Pin , Db4 = Porta.7 , Db5 = Porta.5 , Db6 = Porta.3 , _
                       Db7 = Porta.1 , E = Porta.0 , Rs = Porta.2

'Definiert das LCD-Display als 16*4 Anzeige.
Config Lcd = 16 * 4


Config Sda = Portd.1
Config Scl = Portd.0

Const Lm76slavewrite = &H90
Const Lm76slaveread = &H91

Declare Sub Tempfuehler()


Dim Lm76high As Byte
Dim Lm76low As Byte
Dim Temp As Byte


Do

Call Tempfuehler

Cls

Deflcdchar Print , 12 , 18 , 18 , 12 , 32 , 32 , 32 , 32    ' 
°=Grad-Zeichen

Locate 2 , 1
Lcd "Temp.:"
Locate 2 , 8
Lcd Temp                 'Temperaturanzeige
Locate 2 , 11
Lcd Chr(0) ; "C"
'Cursor deaktivieren
Cursor Off

Loop

End

Sub Tempfuehler

   I2cinit
   I2cstart
   I2cwbyte Lm76slavewrite
   I2cstart
   I2cwbyte Lm76slaveread
   I2crbyte Lm76low , Nack
   I2cstop
   Temp = Lm76low        'Wert für Temperaturanzeige
   Wait 2

End Sub

Autor: Arc Net (arc)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da fehlt was in Tempfuehler...
Datenblatt zum LM76 Seite 11

Autor: Michael Beispiel (q202076)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank für die Antwort!

kann mir aber jemand sagen was da fehlt??

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal ins Datenblatt geschaut?
Die Temperatur wird in 2 Bytes als 13-Bit Zahl übertragen. Du hast ja 
nur die Hälfte geholt. Dir fehlen Bits!

zb
25 Grad sind in Bitschreibweise
   0 0001 1001 0000

Du holst dir nur die ersten 8 Bit

   0 0001 100

und Dezimal ist das 12. Also ungefähr deine 10 Grad zuwenig (Bei anderen 
Zahlen sind es dann ziemlich genau 10 Grad)

Autor: Michael Beispiel (q202076)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erstmal vielen Dank Karl für deine Hilfe! es war sehr hilfreich für 
mich!

nun habe ich mein Unterprogramm etwas gehändert, sodass ich zwei Byte 
Empfangen kann und logisch nachvollziehen, so sieht es momentan aus:
'####################################################################### 
##
Sub Showtemperatur()
   I2cstart                  'Erzeugt eine Startbedingung
   I2cwbyte slaveread        'Sendet ein Byte Slave+RW "&H97 = 
&B10010111"
   I2crbyte Lm76high , Ack   'Emfaengt 1 Byte
   I2crbyte Lm76low , Nack   'Empaengt 2 Byte
   I2cstop                   'Erzeugt eine Stopbedingung
End Sub
'####################################################################### 
#

leider kann ich es rechnerisch nicht nachvollziehen:
wenn ich die Werte von Lm76high und Lm76low auslese kommen dann folgende 
Ergebnisse raus:
bei Lm76high (erste 8 Bit) = 11 was Binär 0000 1011 (laut dem 
Datenblatt) entspricht
bei Lm76low (denke restliche Bits) schwanken die Werte zwischen 136 und 
152 was Binär
136 = 1000 1000 entspricht (laut dem Datenblatt) und
152 = 1001 1000 entspricht (laut dem Datenblatt)
da ich nur max. 13 Bit auslesen kann muss ich die erste 8 Bit mit 5 Bit 
addieren kommt folgendes raus:
0000 1011 1000 1 = 369
0000 1011 1001 1 = 371

Was habe ich falsch gemacht?

Des Weiteren suche ich einen Befehl in Bascom, der eventuell wenn meine 
Gedanken richtig sind Lm76high und Lm76low zusammenverbindet und in eine 
Variable abspeichert.

Autor: Icke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
irgendwas = (high*256)+low

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schon mal ins Datenblatt gesehen?
Dort steht drin, wie die 12 bit aufgebaut sind.

Michael Beispiel schrieb:
> da ich nur max. 13 Bit auslesen kann muss ich die erste 8 Bit mit 5 Bit
> addieren kommt folgendes raus:

Was meinst Du mit addieren? Du musst die Bits zusammensetzen. 2x 8bit = 
16bit = High Low

High = 0000 1011
Low  = 1000 1000

High Low = 0000 1011 1000 1000

Laut Datenblatt sind die letzten 4bit die Nachkommastellen (Wert * 
0,0625°C).
Die restlichen 9 bit (also 0 1011 1000) wären in diesem Fall 184°C; plus 
die Nachkommastellen wäre das also 184,5°C. Das kommt mir aber nicht 
korrekt vor.

Was soll denn rauskommen?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christian H. schrieb:
> Schon mal ins Datenblatt gesehen?
> Dort steht drin, wie die 12 bit aufgebaut sind.
>
> Michael Beispiel schrieb:
>> da ich nur max. 13 Bit auslesen kann muss ich die erste 8 Bit mit 5 Bit
>> addieren kommt folgendes raus:
>
> Was meinst Du mit addieren? Du musst die Bits zusammensetzen. 2x 8bit =
> 16bit = High Low
>
> High = 0000 1011
> Low  = 1000 1000
>
> High Low = 0000 1011 1000 1000
>
> Laut Datenblatt sind die letzten 4bit die Nachkommastellen (Wert *
> 0,0625°C).

Nicht ganz.
Laut Datenblatt beginnen die 13 Bit beim HSB. die letzten 3 Bits sind 
also nicht temperaturcodierend.  -> Die 16 Bit, nachdem sie 
zusammengesetzt wurden, um 3 Bit nach rechts schieben und fertig.
Aus

  0000 1011 1000 1000

wird so

  0000 0001 0111 0001

und da sind jetzt die letzten 4 Bits die Nachkommastellen.
Das sind also 10111 = 23 Grad und 0001 = 1*0.0625 Grad. Also proaktisch 
23 Grad und ein paar Zerquetschte.

Autor: Christian H. (netzwanze) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ach, im Datenblatt steht ja sogar die Aufteilung der Bits im 
I2C-Datentrom.

D15 = Sign
D14..D3 = Bit 11 .. Bit 0
D2..D0  = Status

0000 1011 1000 1000

D15     = 0 (also positive Temperaturen)
D14..D3 = 0001 0111 0001  => 23,0625°C
D2..D0  = Status = Kein Fehler, Keine Grenzwertüberschreitungen

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> da ich nur max. 13 Bit auslesen kann muss ich die erste 8 Bit mit
> 5 Bit addieren kommt folgendes raus:
> 0000 1011 1000 1 = 369
> 0000 1011 1001 1 = 371
>
> Was habe ich falsch gemacht?

Nichts. Passt doch.
Nur kommen da noch keine Grad raus, sondern die Zahl ist in Einheiten 
von 0.0625 Grad

  369 * 0.0625 = 23.0625 Grad
  371 * 0.0625 = 23.1875 Grad

Im Datenblatt ist das alles doch sooo schön aufgemalt. Schreib deine 
Bits rein und dann dekodierst du sie mit dem Datenblatt.

Autor: Michael Beispiel (q202076)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen dank an alle!! Heute habe ich eine ganze Menge was dazugelernt!!

Nun versuche ich das ganze Theorie in Bascom umzusetzen.

Autor: Michael Beispiel (q202076)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es in Bascom ein Befel der zwei Byts ZUSAMMENSETZ?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Michael Beispiel schrieb:
> Gibt es in Bascom ein Befel der zwei Byts ZUSAMMENSETZ?

http://avrhelp.mcselec.com/makeint.htm

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.