-
Hallo seid ihr noch da?
Ich fummle nun schon einige Stunden rum aber es funktioniert einfach nicht.
DS1 und DS2 zeigen irgendwas an (85C+67C) DS3 und 4 sind 0.
Code:
$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
'/// 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 Ds1820id(32) As Byte
'Die Adresse aller meiner DS1820 die ich vorher ausgelesen habe:
Ds1820id(1) = &H10 'Seriennummer 1. DS1820
Ds1820id(2) = &H6A
Ds1820id(3) = &HE8
Ds1820id(4) = &H5F
Ds1820id(5) = &H01
Ds1820id(6) = &H08
Ds1820id(7) = &H00
Ds1820id(8) = &H8C
Ds1820id(9) = &H10 'Seriennummer 2. DS1820
Ds1820id(10) = &H8B
Ds1820id(11) = &H23
Ds1820id(12) = &H25
Ds1820id(13) = &H01
Ds1820id(14) = &H08
Ds1820id(15) = &H00
Ds1820id(16) = &H73
Ds1820id(17) = &H10 'Seriennummer 3. DS1820
Ds1820id(18) = &H7B
Ds1820id(19) = &HD6
Ds1820id(20) = &H60
Ds1820id(21) = &H01
Ds1820id(22) = &H08
Ds1820id(23) = &H00
Ds1820id(24) = &H14
Ds1820id(25) = &H10 'Seriennummer 4. DS1820
Ds1820id(26) = &H13
Ds1820id(27) = &HFD
Ds1820id(28) = &H5F
Ds1820id(29) = &H01
Ds1820id(30) = &H08
Ds1820id(31) = &H00
Ds1820id(32) = &H2C
Dim Sc(32) As Byte '????
Dim T1 As Integer
Dim T2 As Integer
Dim T3 As Integer
Dim T4 As Integer
Dim I As Byte
Dim Id As Byte
Cls ' Clear LCD
Do
'Alle angeschlossenen DS1820 zum Messen veranlassen
1wreset '1Wire Reseten
1wwrite &H55 'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
1wwrite Ds1820id(i) , 8 '8 Byte ID wird uebertragen
Waitus 200
For Id = 1 To 25 Step 8 'ID für alle 4 DS1820 1,9,17,25
1wreset '1Wire Reseten
1wwrite &H55 'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
1wwrite Ds1820id(id) , 8 '8 Byte ID wird uebertragen
1wwrite &HBE 'READ SCATCHPAD => Liest alle Bytes des SP Memorys
Sc(1) = 1wread(9)
Next Id
T1 = Makeint(sc(1) , Sc(2)) 'komprimiert zwei Bytes in die Integervariable T
T2 = Makeint(sc(9) , Sc(2))
T3 = Makeint(sc(17) , Sc(2))
T4 = Makeint(sc(25) , Sc(2))
'Die Nachkommastelle entfernen
T1 = T1 / 2
T2 = T2 / 2
T3 = T3 / 2
T4 = T4 / 2
'Temperatur in ganzen Grad ausgeben
Locate 1 , 11
Lcd "T1=" ; T1 ; " C" ' Anzeige erfolgt so: T1=23 C
Locate 2 , 11
Lcd "T2=" ; T2 ; " C" ' Anzeige erfolgt so: T1=23 C
Locate 3 , 11
Lcd "T3=" ; T3 ; " C" ' Anzeige erfolgt so: T1=23 C
Locate 4 , 11
Lcd "T4=" ; T4 ; " C" ' Anzeige erfolgt so: T1=23 C
'Ausgabe alle 0,5 Sekunden
Waitms 500
Loop
End
Gruß
Hans
-
Du läufst beim einlesen der Daten zwar 4 mal duch die Schleife aber mit
schreibst Du die Daten immer auf die selbe stelle ( und überschreibst damit die ersten 3.)
So sollte es beser funzen.
http://www.mcselec.com/index.php?opt...d=75&Itemid=57
-
Hallo,
du startest ja gar keine Konvertierung der Temperatur.
Die große Anzahl an Zuweisungen kannst du auch durch eine kleine Schleife ersetzen.
Deine Sensor_Ids stehen jetzt am Ende, kannst du auch ins EEProm schreiben.
Probier mal so:
Code:
$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
Match_rom Alias &H55
Skip_rom Alias &HCC
Read_scratchpad Alias &HBE
Write_scratchpad Alias &H4E
Copy_scratchpad Alias &H48
Start_conversion Alias &H44
' Pin für 1wire Schnittstelle festlegen. => DS1820 am Port C.5
Config 1wire = Portc.5
Dim Ds1820id(32) As Byte
Dim Sc(9) As Byte '????
Dim T As Integer
Dim I As Byte
Dim Id As Byte
'/// 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
'Die Adresse aller meiner DS1820 die ich vorher ausgelesen habe:
Restore Sensor_ids
For I = 1 To 32
Read Ds1820id(i)
Next I
1wreset
1wwrite Skip_rom
1wwrite Start_conversion 'Alle angeschlossenen DS1820 zum Messen veranlassen
Waitms 500 'Ausgabe alle 0,5 Sekunden
Do
For Id = 1 To 25 Step 8 'ID für alle 4 DS1820 1,9,17,25
Incr I
1wreset '1Wire Reseten
1wwrite &H55 'MATCHROM=>Adress.den DS1820 anhand des ROM Inhaltes
1wwrite Ds1820id(id) , 8 '8 Byte ID wird uebertragen
1wwrite &HBE 'READ SCATCHPAD => Liest alle Bytes des SP Memorys
Sc(1) = 1wread(9)
T = Makeint(sc(1) , Sc(2)) 'komprimiert zwei Bytes in die Integervariable T
Shift T , Right 'Die Nachkommastelle entfernen
Locate I , 11 'Temperatur in ganzen Grad ausgeben
Lcd "T" ; I ; "=" ; T ; " C" ' Anzeige erfolgt so: T1=23 C
Next Id
I = 0
1wreset
1wwrite Skip_rom
1wwrite Start_conversion 'Alle angeschlossenen DS1820 zum Messen veranlassen
Waitms 500 'Ausgabe alle 0,5 Sekunden
Loop
End
Sensor_ids:
Data &H10 , &H6A , &HE8 , &H5F , &H01 , &H08 , &H00 , &H8C
Data &H10 , &H8B , &H23 , &H25 , &H01 , &H08 , &H00 , &H73
Data &H10 , &H7B , &HD6 , &H60 , &H01 , &H08 , &H00 , &H14
Data &H10 , &H13 , &HFD , &H5F , &H01 , &H08 , &H00 , &H2C
Kompiliert ok, ist aber nicht getestet, da ich deine Hardware nicht habe.
Schau mal, ob du die Änderungen nachvollziehen kannst.
-
Mensch da tut sich ja endlich was. Ich krieg eine Anzeige von allen 4 DS1820.
Danke erst mal!!
Ich muss das erst mal blicken was du da gemacht hast. Das kann aber einige Zeit dauern.
Ich melde mich wieder.
Gruß
Hans
-
Hallo,
kann mir mal einer erklären, wie ich die Sensoren bei mir auslesen kann.
Damit ich meine ID raufinden kann.
Ich habe auch schon mehrere DS18S20 am laufen gehabt, bekomme jetzt immer nur 0Grad angezeigt.
Orgendwie klappt das bei mir nicht mehr...
-
Hallo Papsi!
Lade mal dieses Programm und pass es an.
Das liest dir alle ID aus und zeigt sie am LCD an.
Code:
'///////////////////////////////////////////////////////////////////////////////
' Funktion:
' Liest die Adressen von angeschlossenen DS1820 aus und zeigt sie am LCD an.
' Mit jeweils 20s Pause dazwischen.
'///////////////////////////////////////////////////////////////////////////////
$regfile = "m8def.dat"
$crystal = 14745600 'Externes Quarz 14,7456 Mhz
'Achtung: damit der ext. Quarz aktiv wird => die Fusebits entsprechend einstellen.
'Extern Cristal , 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
Config 1wire = Portc.5
Dim Dsid(8) As Byte 'Es werden mindestens 8Bytes für die ID benötigt
Dim I As Byte 'Für die Anzahl der Senseoren
Dim Nr As Byte
Nr = 1
Cls
Dsid(1) = 1wsearchfirst()
Locate 1 , 1 : Lcd "DS1820 Nr " ; Nr : Nr = Nr + 1
Locate 2 , 1
For I = 1 To 8
Lcd Hex(dsid(i))
Next
Wait 20 ' Das reicht zum abschreiben
'Dsid(1) = 1wsearchnext()
Do
Dsid(1) = 1wsearchnext()
'Wenn kein Fehler, dann ausgeben
If Err = 0 Then
Locate 1 , 1 : Lcd "DS1820 Nr " ; Nr : Nr = Nr + 1
Locate 2 , 1
For I = 1 To 8
Lcd Hex(dsid(i))
Next
Wait 15
End If
Loop Until Err = 1
Do
Waitms 100
Loop
End
-
Hallo,
habe ich probiert:
kommt aber bei allen Sensoren 000000000000usw. raus.
Angeklemmt habe ich die so:
Bild hier
Der Mega32 ist in Grundbeschaltung mit 8Mhz ext. Quarz
:EDIT
Widerstand hinzugefügt...
-
Hast Du auch nen Pullup von 4,7k an DO? Ist zumindest in deiner Zeichnung nicht drinn.
-
Mach einfach einen 4,7k Widerstand zwischen Pin2 und 3 rein, dann gehts!
-
Jetzt geht´s...
Hat also nur der Widerstand gefehlt.
Komisch, als ich das früher mal getestet habe, da lief es und ich habe den R nicht drin gehabt.
Jetzt zeigt er mir:
105D677101080025
Habe nur ein 16-stelliges Display dran.
Kann das alles sein?
Und wie lasse ich mir jetzt die Temp. anzeigen?