PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Temperaturmessung mit DS1820 funktioniert nicht mehr



martin66119
07.12.2012, 21:42
Hallo!

vor 3 Jahren hatte ich mir mal eine Controller besorgt und mit diesem über 4 DS1820 Temperaturen gemessen. Doch heute klappt der Code nicht mehr!

Hier der Code:

$regfile = "m8def.dat"
$crystal = 3686400
$hwstack = 46
$swstack = 40
$framesize = 40

'**************************Funktionen LCD-Display*******************************
Config Lcd = 40 * 4
Config Lcdpin = Pin , Rs = Portb.0 , Db4 = Portd.5 , Db5 = Portd.4 , Db6 = Portd.3 , Db7 = Portd.2 , E = Portd.6 , E2 = Portd.7
Config Lcdbus = 4
Config Lcdmode = Port

Config Portb = Output


Dim ___lcdno As Byte

___lcdno = 0
Initlcd
Cursor Off
Cls

___lcdno = 1
Initlcd
Cursor Off
Cls
'**************************Def. allgemeiner Variabeln***************************
Dim Tempmessstelle(7) As Single

'*************************Config Timer1*****************************************
Config Timer1 = Timer , Prescale = 1024 '64 '256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 34286 'Timer1 soll schon von 34285 wegzählen 4 sekunden
'***************************Config 1Wire****************************************

Config 1wire = Portc.1 'DS1820

Match_rom Alias &H55
Read_scratchpad Alias &HBE
Start_conversion Alias &H44

Fg Alias 0
Hg Alias 1
Rl Alias 2
Vl Alias 3

Dim Read_temp As Integer
Dim Sensor_ids(4) As Byte
Dim Id As Byte
Dim Offset As Byte
Dim Ds_array(7) As Byte
Dim Bruchteil As Single
Dim Temperatur As Single
Dim I As Integer
'***************************ID 1Wire configurieren******************************
For Id = 1 To 40 '40 'Einlesen der 5 Sensoren IDs (5*8 Byte)
I = Id - 1
Readeeprom Sensor_ids(id) , I
Next Id
'***********************************Hauptprogramm* ******************************
Do

Loop
End
'**********************************1Wire********** ******************************
1wire:
For Id = Fg To Vl
Offset = Id * 8
Offset = Offset + 1 'Offset geht auf 1, 9, 17, 25 und 33
1wreset 'hier wird der Temperaturwert eingelesen
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8 '8 Byte ID wird übertragen
1wwrite Read_scratchpad
For I = 1 To 7 'nur bis 7, weil 8 und 9 uninteressant
Ds_array(i) = 1wread()
Next I
Read_temp = Makeint(ds_array(1) , Ds_array(2))
1wreset 'jetzt wird wieder die Konvertierung gestartet
1wwrite Match_rom
1wwrite Sensor_ids(offset) , 8
1wwrite Start_conversion
Shift Read_temp , Right
If 127 < Read_temp Then Read_temp = Read_temp - 32768
Bruchteil = 16 - Ds_array(7)
Bruchteil = Bruchteil / 16
Bruchteil = Bruchteil - 0.25


Temperatur = Read_temp + Bruchteil
Tempmessstelle(id + 1) = Temperatur

If Temperatur <> 85.0 Then ' < 80.0 And Temperatur > -20.0 Then
Tempmessstelle(id + 1) = Temperatur
End If

___lcdno = 0
Select Case Id
Case Fg:
Locate 1 , 1 : Lcd "FG: "
Locate 1 , 5 : Lcd Fusing(temperatur , "#.#")
Case Hg:
Locate 1 , 11 : Lcd "HG: "
Locate 1 , 14 : Lcd Fusing(temperatur , "#.#")
Case Rl: 'ausgabe im Display ist dann z.B.
Locate 2 , 1 : Lcd "VL: "
Locate 2 , 5 : Lcd Fusing(temperatur , "#.#" )
Case Vl:
Locate 2 , 11 : Lcd "RL: "
Locate 2 , 14 : Lcd Fusing(temperatur , "#.#")
End Select

Cursor Off
Next Id
Return
Return

'**************************Subroutine für Timer1********************************
Isr_von_timer1: 'ISR von Timer1
Timer1 = 34286
Gosub 1wire
Return


$eeprom

Data &H28 , &HA2 , &H75 , &HAA , &H03 , &H00 , &H00 , &HC5 'Ausgelesen mit dem Controller
Data &H28 , &H25 , &H67 , &HAA , &H03 , &H00 , &H00 , &H55 ' Ausgelesen mit dem Controller
Data &H10 , &H78 , &H37 , &H39 , &H01 , &H08 , &H00 , &H11 ' nicht mehr angeschlossen
Data &H10 , &HC0 , &H46 , &H19 , &H01 , &H08 , &H00 , &H67 ' nicht mehr angeschlossen
Data &H10 , &H56 , &HA3 , &H23 , &H01 , &H08 , &H00 , &H3F ' nicht mehr angeschlossen


Was ist denn da faslch? Kann mir jemand helfen!? Habe ich ggf. was falsch im Programmer eingestellt?
Und dann noch. Die Übertragung auf den Controller ist sehr langsam.

Dank schon einmal
Martin

Neutro
08.12.2012, 13:53
Hast du das evtl mit einer neueren Bascom Version kompiliert als die die du vor drei Jahren hattest?
Dann kann es schon mal sein das dein "altes" Programm nicht mehr so funktioniert. Das selbe hatte ich vor einiger Zeit auch schon mal.
Da habe ich dann das Programm noch einmal ganz neu geschrieben und schon schon ging es wieder, warum kann ich dir aber auch nicht sagen.

Gruß
Neutro

PS: Hast du auch einen neuen µC verwendet oder den alten wieder? vielleicht hast du ja die Fusebiteinstellungen vergessen?