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







Zitieren

Lesezeichen