Hallo!
Ich möchte mehrere DS1820 am 1Wire Bus auslesen und am LCD anzeigen.
Bei den 4 Stück die ich habe, hab ich die IDs ausgelesen, ich kann sie auch alle einzeln Anzeigen lassen, möchte aber, dass alle 4 in 3s Abstand die Temperatur in einer Zeile des LCD angezeigen. Wie macht man das. Im Forum hab ich schon gestöbert aber so richtig was gefunden hab ich nicht.

Mein Code ist folgender:
Code:
'///////////////////////////////////////////////////////////////////////////////
' Funktion:
' Zeigt die Temperaturen der am 1Wire Bus angeschlossenen DS1820 an
' Wichtig: der 4,7k Ohm Widerstand muß angeschlossen sein sonst gehts nicht!
' Im 64Bit ROM des DS1820 sind der Familycode (8Bit), eine Seriennummer (8x8Bit)
' die es nur einmal gibt und ein CRC-Byte (8Bit) abgelegt.
' Der DS1820 mißt die Umgebungstemperatur im Bereich von -55...+125C in 0,5Grad
' Schritten
'
' Meine 4 DS1820 haben die folgende Adressen:
' DS1820_1 => 10 6A E8 5F 01 08 00 8C
' DS1820_2 => 10 8B 23 25 01 08 00 73
' DS1820_3 => 10 7B D6 60 01 08 00 14
' DS1820_4 => 10 13 FD 5F 01 08 00 2C
'
'///////////////////////////////////////////////////////////////////////////////
$regfile = "m8def.dat"
$crystal = 14745600           'Externes Quarz   14,7456 Mhz
'Achtung: damit der ext. Quarz aktiv wird => die Fusebits entsprechend einstellen.
'Extern Cristal , bei mir alle Bits = 111 111
$baud = 9600
'-------------------------------------------------------------------------------
'/// Definitionen //////////////////////////////////////////////////////////////
'-------------------------------------------------------------------------------
'/// LCD- DISPLAY 4x20
'LCD im 4Bit I/O Mode
Config Lcd = 20 * 4
Config Lcdbus = 4
Config Lcdpin = Pin , Db4 = Portd.2 , Db5 = Portd.3 , Db6 = Portd.4
Config Lcdpin = Pin , Db7 = Portd.5 , E = Portd.7 , Rs = Portd.6
Cursor Off Noblink
Cls

' Pin für 1wire Schnittstelle festlegen. => DS1820 am Port C.5
Config 1wire = Portc.5
Dim Ds1820_id(8) As Byte

'Die Adresse meines DS1820 die ich vorher ausgelesen habe:
' Adrese Erster DS1820
Ds1820_id(1) = &H10
Ds1820_id(2) = &H6A
Ds1820_id(3) = &HE8
Ds1820_id(4) = &H5F
Ds1820_id(5) = &H01
Ds1820_id(6) = &H08
Ds1820_id(7) = &H00
Ds1820_id(8) = &H8C

' Die anderen Codes wären:
' DS1820_2 => 10 8B 23 25 01 08 00 73
' DS1820_3 => 10 7B D6 60 01 08 00 14
' DS1820_4 => 10 13 FD 5F 01 08 00 2C

Dim Sc(9) As Byte
Dim T As Integer
Dim T1 As Integer
Dim I As Byte
Cls                           ' Clear LCD

Do
'Alle angeschlossenen DS1820 zum Messen veranlassen
 1wreset                      '1Wire Reseten
 1wwrite &HCC                 'Schreibt die Variable CC= Überspringen der Adresierung?
 1wwrite &H44                 'Starten der Temperaturmessung
 Waitus 200

'Den gewünschten Sensor auswählen
 1wverify Ds1820_id(1)        'Prüft ob eine ID im 1Wire Bus zugänglich ist
          ' Wenn=0 zurückgeliefert wird, ist eine gültige ID vorhanden
          ' Wenn eine 1 geliefert wird, ist ein ERR aufgetreten

'Kommando READ SCRATCHPAD
 1wwrite &HBE                 'Liest alle Bytes de Scratchpad Memory.
 Sc(1) = 1wread(9)

 If Sc(9) = Crc8(sc(1) , 8) Then
  T = Makeint(sc(1) , Sc(2))  'komprimiert zwei Bytes in die Integervariable T

'Die Nachkommastelle entfernen
  T = T / 2

'Temperatur in ganzen Grad ausgeben
  Locate 1 , 11
  Lcd "T1=" ; T ; " C"        ' Anzeige erfolgt so: T1=23 C
 Else

 'Wenn Fehler, Scratchpad zur Kontrolle Hexadezimal ausgeben
  Locate 2 , 1

'Ausgabe
 For I = 1 To 8
   Lcd Hex(sc(i))
  Next
 End If

'Ausgabe alle 0,5 Sekunden
 Waitms 500
Loop

End