Forum: Mikrocontroller und Digitale Elektronik iButton 1920


von Pascal S. (Gast)


Lesenswert?

Hallo

ich hab in der Schule ein Projekt laufen wo ich Temperatur von 3 
iButtons Typ 1920 (Temperatur iButtons) über einen Microkontroler auf 
eien Ledanzeige ausgeben muss. Ich bekomme es hin das die Temperaturvon 
1 iButton ausgegeben wird nur habe das Problem das Program so 
umzuschreiben das es mit den dreien funktioniert.
Es wäre schon wenn mir da jemand helfen könnte.


Danke

von Sebastian A. (seba)


Lesenswert?

Hallo,
um dir helfen zu können wäre es gut deinen Code zu sehen.
Gruß Sebastian

von Pascal S. (pascal_s)


Lesenswert?

' ibutton Test Program

$regfile = " m8535.dat"
$crystal = "800000000"
$baud = 9600

Config 1wire = Portb.0

Const Parasitepower = 1
Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , 
Db7 = Portc.0 , Rs = Portc.5 , E = Portc.4
Config Lcd = 16 * 2
Cls
Cursor Off

Dim B As Byte
Wire Bus





Do
   Rom_data(1) = 1wsearchfirst()
   If Err = 1 Then Exit Do
   For B = 1 To 6
   Next
   Goto Temperatur1

   Do
   Romdata(1) = 1wsearchnext()
    If Err = 1 Then Exit Do
   For B = 1 To 6
   Next
   Goto Temperatur2
   Loop

Loop
















Temperatur1:
Const Ds1920 = &H10
Const Skip_rom = &HCC                                       'Adressiere 
einen Ibutton mit 64bit
Const Read_rom = &H33                                       'Lese Rom
Const Convertt = &H44                                       'Start 
Temperaturmessung
Const Read_ram = &HBE                                       'Lese 
Scratchpad RAM
Const Write_ram = &H4E                                      'Schreibe 
Scratchpad RAM
Const Copy_ram = &H48                                       'Kopiere 
Scratchpad RAM
Const Recall_ee = &HB8                                      'Kopiere 
EEprom nach RAM

Dim Family_code As Byte
Dim Serial_number(6) As Byte
Dim Crc As Byte
Dim Scratch(9) As Byte
Dim I As Byte
Dim Temp As Word
Dim Temp1 As Integer
Dim Stemp As Single

 1wreset
   If Err = 1 Then Exit Do
   1wwrite Read_rom
   Family_code = 1wread()
   For I = 1 To 6
      Serial_number(i) = 1wread()
   Next
   Crc = 1wread()
   If Family_code <> Ds1920 Then Exit Do


   1wwrite Convertt                                         'starte 
Temperaturmessung

   #if Parasitpower
      Wait 2                                                'warte 
Temperaturmessung ab
   #else
      Do
         Temp = 1wread()
      Loop Until Temp = &HFF                                'warte bis 
Temperaturmessung beendet ist
   #endif

   1wreset                                                  'Reset 
iButton
   If Err = 1 Then Lcd "iButton ERROR"

   1wwrite Skiprom                                          'überspringe 
Adressierung
   1wwrite Read_ram                                         'lese 
Scratch Pfad

   For I = 1 To 9
      Scratch(i) = 1wread()
   Next

   Temp = Scratch(2)
   Shift Temp , Left , 8

   Temp = Temp + Scratch(1)                                 'Word Format
   Temp1 = Temp
   '    1234567890123456                                    'Integer 
Format
  'Lcd "Der Temp.=" ; Temp ; "Counts."
   Temp1 = Temp1 / 2
   'Lcd "Die gemesseTemp. " ; Temp1 ; "Grad"
   Stemp = Scratch(8) - Scratch(7) 
'Interpolation
   Stemp = Stemp / Scratch(8)
   Stemp = Stemp + Temp1
   Stemp = Stemp - 0.25
'       1234567890123456
   Cls
   Lcd "Die exakt gemess"
   Locate 2 , 1
   Lcd "ene Temperatur =";
   Wait 5
   Cls
   Locate 1 , 1
   Lcd Fusing(stemp , "#.##");
   Lcd Chr($df)
   Wait 2
Loop

   Cls

'     1234567890123456
Lcd "Kein Sensor konta"
   Locate 2 , 1
Lcd "ktiert"

End

Temperatur2:

Const Ds1920 = &H10
Const Skip_rom = &HCC                                       'Adressiere 
einen Ibutton mit 64bit
Const Read_rom = &H33                                       'Lese Rom
Const Convertt = &H44                                       'Start 
Temperaturmessung
Const Read_ram = &HBE                                       'Lese 
Scratchpad RAM
Const Write_ram = &H4E                                      'Schreibe 
Scratchpad RAM
Const Copy_ram = &H48                                       'Kopiere 
Scratchpad RAM
Const Recall_ee = &HB8                                      'Kopiere 
EEprom nach RAM

Dim Family_code As Byte
Dim Serial_number(6) As Byte
Dim Crc As Byte
Dim Scratch(9) As Byte
Dim I As Byte
Dim Temp As Word
Dim Temp1 As Integer
Dim Stemp As Single

 1wreset
   If Err = 1 Then Exit Do
   1wwrite Read_rom
   Family_code = 1wread()
   For I = 1 To 6
      Serial_number(i) = 1wread()
   Next
   Crc = 1wread()
   If Family_code <> Ds1920 Then Exit Do


   1wwrite Convertt                                         'starte 
Temperaturmessung

   #if Parasitpower
      Wait 2                                                'warte 
Temperaturmessung ab
   #else
      Do
         Temp = 1wread()
      Loop Until Temp = &HFF                                'warte bis 
Temperaturmessung beendet ist
   #endif

   1wreset                                                  'Reset 
iButton
   If Err = 1 Then Lcd "iButton ERROR"

   1wwrite Skiprom                                          'überspringe 
Adressierung
   1wwrite Read_ram                                         'lese 
Scratch Pfad

   For I = 1 To 9
      Scratch(i) = 1wread()
   Next

   Temp = Scratch(2)
   Shift Temp , Left , 8

   Temp = Temp + Scratch(1)                                 'Word Format
   Temp1 = Temp
   '    1234567890123456                                    'Integer 
Format
  'Lcd "Der Temp.=" ; Temp ; "Counts."
   Temp1 = Temp1 / 2
   'Lcd "Die gemesseTemp. " ; Temp1 ; "Grad"
   Stemp = Scratch(8) - Scratch(7) 
'Interpolation
   Stemp = Stemp / Scratch(8)
   Stemp = Stemp + Temp1
   Stemp = Stemp - 0.25
'       1234567890123456
   Cls
   Lcd "Die exakt gemess"
   Locate 2 , 1
   Lcd "ene Temperatur =";
   Wait 5
   Cls
   Locate 1 , 1
   Lcd Fusing(stemp , "#.##");
   Lcd Chr($df)
   Wait 2
Loop

   Cls

'     1234567890123456
Lcd "Kein Sensor konta"
   Locate 2 , 1
Lcd "ktiert"

End


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.