Forum: Mikrocontroller und Digitale Elektronik Bascom LM75 Schalttemperatur auslesen


von Patrick D. (patrick_cpp)


Angehängte Dateien:

Lesenswert?

Hey Leute;

ich will per Bascom vom Temperatursensor (LM75) Standart 
Schalttemperatur (Tos = 80°C und Thyst = 75°C) auslesen.

Nur es liest entweder die Tos oder Thyst aus aber nicht beides.

Ich brauche ein Rat von euch

mfg Patrick_cpp

: Verschoben durch User
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Patrick D. schrieb:
> Ich brauche ein Rat von euch
Beschreibe den Fehler so, dass man nicht das komplette Programm 
durchforsten muss (ich finde keinen der erwähnten Begriffe in deinem 
Programm wieder, auch nicht als Kommentar).

Was erwartest du an welcher Stelle des Programms und was erhältst du 
stattdessen?

: Bearbeitet durch Moderator
von Patrick D. (patrick_cpp)


Lesenswert?

OK, ich schicke nur das Unterprogramm:
1
Schalttemperatur:
2
   I2cstart
3
   I2cwbyte Lm75_schreiben '&H90
4
   I2cwbyte &H02
5
   I2cstart
6
   I2cwbyte Lm75_lesen     '&H90
7
   I2crbyte Schalttemp1 , Nack
8
   I2cstop
9
   Locate 1 , 12
10
   If Schalttemp1 < 10 Then
11
      Lcd Spc(2) ; Schalttemp1 ; Chr(0) ; "C"
12
   Elseif Schalttemp1 < 100 Then
13
      Lcd Spc(1) ; Schalttemp1 ; Chr(0) ; "C"
14
   Else
15
      Lcd Schalttemp1 ; Chr(0) ; "C"
16
   End If
17
   I2cstart
18
   I2cwbyte Lm75_schreiben '&H90
19
   I2cwbyte &H03
20
   I2cstart
21
   I2cwbyte Lm75_lesen     '&H90
22
   I2crbyte Schalttemp2 , Nack
23
   I2cstop
24
   Locate 2 , 12
25
   If Schalttemp2 < 10 Then
26
      Lcd Spc(2) ; Schalttemp2 ; Chr(0) ; "C"
27
   Elseif Schalttemp2 < 100 Then
28
      Lcd Spc(1) ; Schalttemp2 ; Chr(0) ; "C"
29
   Else
30
      Lcd Schalttemp2 ; Chr(0) ; "C"
31
   End If
32
Return

: Bearbeitet durch Moderator
von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Patrick D. schrieb:
> OK, ich schicke nur das Unterprogramm:
Und was soll da jetzt wo passieren? Was passiert stattdessen? Wie 
erkennst du die "Fehlfunktion"?

BTW:
1
Wichtige Regeln - erst lesen, dann posten!
2
   ...
3
Formatierung (mehr Informationen...)
4
   ...
5
    [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
Bitte beachten...

: Bearbeitet durch Moderator
von Patrick D. (patrick_cpp)


Lesenswert?

Wenn ich Datenblatt richtig verstanden habe soll &H02 (00000010) Tos 
lesen oder schreiben. In dem Fall nur lesen (Schalttemp1).
Das soll LCD position 1,12 anzeigen.

Und &H03 (00000011) Thyst lesen oder schreiben. Auch diesem Fall will 
ich nur lesen (Schalttemp2).
Das soll LCD position 2,12 anzeigen.

Aber es Zeigt auf beiden Zeilen 75°C an.
Und wie gesagt soll eigendlich stehen Zeile 1: 80°C und Zeile 2: 75°C.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Patrick D. schrieb:
> Und wie gesagt soll eigendlich stehen Zeile 1: 80°C und Zeile 2: 75°C.
Oder andersrum...?


Fehlt da nach dem Schreiben des Pointers nicht jeweils noch ein I²C 
Stop?
1
   I2cstart
2
   I2cwbyte Lm75_schreiben '&H90
3
   I2cwbyte &H02
4
   I2cstop                        <<-- sollte hier nicht ein Stop rein?
5
6
   I2cstart
7
   I2cwbyte Lm75_lesen     '&H90
8
   I2crbyte Schalttemp1 , Nack
9
   I2cstop

von Patrick D. (patrick_cpp)


Lesenswert?

Macht das selbe Problem.
Zeigt auf beiden Zeilen 75°C

Ich hebe bemerkt das ich beim Kommentar für Lm_lesen &H90 geschrieben 
habe. Sollte eigendlich &H91 sein.

von Patrick D. (patrick_cpp)


Lesenswert?

Jetzt funktionierts es :-)

Schalttemperatur:
   If _bit = 0 Then
      Schalttemp1 = 0
      I2cstart
      I2cwbyte &H90
      I2cwbyte &H02
      I2cstop
      I2cstart
      I2cwbyte &H91
      I2crbyte Schalttemp1 , Nack
      I2cstop
   Else
      Schalttemp1 = 0
      I2cstart
      I2cwbyte &H90
      I2cwbyte &H03
      I2cstop
      I2cstart
      I2cwbyte &H91
      I2crbyte Schalttemp1 , Nack
      I2cstop
   End If
   Locate 1 , 12
   If Schalttemp1 < 10 Then
         Lcd Spc(2) ; Schalttemp1 ; Chr(0) ; "C"
      Elseif Schalttemp1 < 100 Then
         Lcd Spc(1) ; Schalttemp1 ; Chr(0) ; "C"
      Else
         Lcd Schalttemp1 ; Chr(0) ; "C"
      End If
Return

Wenn _bit = 0 ist zeigt es mir 75°C an
und _bit = 1 ist zeigt es mir 80°C an.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Patrick D. schrieb:
> Jetzt funktionierts es :-)

 Hier:
1
$regfile = "m8adef.dat"
2
$crystal = 4000000
3
$baud = 600             '*** Wozu soll das gut sein ?
4
$hwstack = 32
5
$swstack = 32
6
$framesize = 40
7
'============================
8
9
'Konfiguration LCD
10
'-----------------
11
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , Rs = Portd.2 , E = Portd.3
12
Config Lcd = 16x2
13
Config Lcdbus = 4
14
Cursor Off Noblink
15
16
'Konfiguration TWI/I²C
17
'---------------------
18
$lib "i2c_twi.lbx"
19
Config Twi = 100000
20
Config Sda = Portc.4
21
Config Scl = Portc.5
22
'LM75-Adressen
23
Const Lm75_schreiben = &H90
24
Const Lm75_lesen = &H91
25
26
Dim Reghi As Byte
27
Dim Reglo As Byte
28
Dim Temp As Byte
29
Dim Dezstr As String * 10
30
31
Declare Sub Getreg(byval Rn As Byte)
32
Declare Sub Showtemp()
33
34
 Cls
35
 I2cinit
36
 Do
37
   Call Showtemp()
38
   Waitms 1500
39
 Loop
40
 End
41
42
Sub ShowTemp()
43
  Call Getreg(0)
44
  Cls
45
  Locate 1 , 3
46
  Lcd "TEMPERATURE"
47
  Locate 2 , 6
48
  Lcd Temp; DezStr
49
  Waitms 3500
50
51
  Call Getreg(2)
52
  Cls
53
  Locate 1 , 5
54
  Lcd Temp ; Dezstr ; " HY"
55
  Call Getreg(3)
56
  Locate 2 , 5
57
  Lcd Temp ; Dezstr ; " OS"
58
End Sub
59
60
Sub Getreg(rn As Byte)
61
 I2cstart
62
 I2cwbyte Lm75_schreiben                                    '&H90
63
 I2cwbyte Rn
64
 I2cstart
65
 I2cwbyte Lm75_lesen     '&H90
66
 I2crbyte RegHi, Ack
67
 I2crbyte RegLo, Nack
68
 I2cstop
69
 Temp = Reghi
70
 If RegHi > &H7F Then
71
   Temp = RegHi And &H7F
72
   Temp = Not Temp
73
   Incr Temp
74
 End If
75
76
 DezStr = ",0C"
77
 If RegLo > &H7F Then
78
   DezStr = ",5C"
79
 End If
80
End Sub

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.