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
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
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
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
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.
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 |
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.