Hallo Experten !! Hat jemand schon ein Projekt mit DS1820 und Atmega gemacht ? Ich möchte gerne ein In und Aussenthermoter bauen mit DS1820 und 3 Stellige LED Anzeige. Hat jemand einen Schaltplan und Code für sowas ? Im Netz habe nichts gefunden was einfach wäre..ohne schnick schnack... Danke für Eure Antworten !!
:
Verschoben durch User
Hab so was mal gemacht kleine Platine gemacht, Atmega8, für 2 x DS18B20 DS18B20 ist einfacher auszuwerten als DS18S20.
Sorry aber mit dem Zeug kann ich leider nichts anfangen...Meinte die erste Posting.. ist leider zu kompliziert "noch" für mich.. Ich dachte nur ein Schaltplan und eine Hex Datei... Ich wollte wegen der Ablesbarkeit LED Anzeige und DS18S20 habe genügend herumfahren...
für die kleine Atmega8-Platine mit Schaltplan siehe: http://home.arcor.de/wosm/AtmegaProjekt/Projekte/projekt5.htm Standard LCD Software mit BASCOM, kann ich hier reinstellen.
Auf dem Bild hinten rechts ist ein Flachbandkabel zu erkennen. neben 2 x DS18... hängt auch noch ein LDR und eine DCF-Antenne dran. Auf der Platine ist ein Anschluss für 10-polige Stecker mit +, -, und max. 8 Bits eines Ports. (siehe Schaltplan). Der DS ... benötigt nur +, - und eine Datenleitung. ups habe gerade gesehen dass das Layout auf der Internetseite geringfügig anders ist als die fotografierte Platine. Unterschiede sind nur minimal. Auf der fotografierten Platine ist das LCD an 14 entsprechenden Pads ohne Stecker angeschlossen, im Gegensatz zur Platine aus dem Link.
Danke erstmal für die Antwort.. Nun wenn ich den Schaltplan anschaue, sehe ich 3 10 Pol wannenstecker, ich wollte genau wissen, evtl. Nachbau, wo und wie genau was angschlossen wird, also ein det. Schaltplan...
Der Anschluss des DS ... erfolgt an einem beiliebigen Pin einse beliebigen Ports. Das wird halt im Programm festgelegt. Auf dem Bild ist ein Stecker für den ISP-Anschluss , zwei Stecker sind für Ports und das LCD ist direkt an der Platine am 3. Port angeschlossen.
Thomas Kiss schrieb: > Danke erstmal für die Antwort.. > > Nun wenn ich den Schaltplan anschaue, sehe ich 3 10 Pol wannenstecker, > ich wollte genau wissen, evtl. Nachbau, wo und wie genau was > angschlossen wird, also ein det. Schaltplan... Was du noch nicht begriffen hast ist, dass Wolfgang dir den Plan einer Universalplatine gepostet hat. Das ist erst mal einfach nur eine universale µC-Platine mit einem Mega8, die als Platform für beliebige Applikationen dienen kann. Wie wäre es, wenn du dich einfach mal mit der Materie beschäftigst oder dir alternativ bei der nächsten Aldi-Aktion so ein Innen/Aussenthermometer kaufst. Kommt dir sowieso billiger.
Code für BASCOM Die Abfrage der DS18 .. wurde aus dem Beispiel von BASCOM übernommen Alle Prüfsummen können auch entfernt werden. '======================================================================= === ' ' Auslesen von zwei DS18S20 oder DS18B20 ' ' http://www.mcselec.com/index.php?option=com_content&task=view&id=75&Itemid=57 ' ' Anpassung von LCD ' V0.3 ohne Parameterübergabe, mit Wertrückgabe bei Funktionen ' Min- und Max-Ausgabe geändert ' '======================================================================= === $regfile = "m8def.dat" $crystal = 14318180 'Mini-Atmega 4-Platine (mit LCD) Declare Function Dg_ds18s20() As Integer 'Umrechnung in Grad Declare Function Dg_ds18b20() As Integer 'Umrechnung in Grad Config 1wire = Portc.0 '1wire-Port festlegen Config Lcd = 16 * 2 'Lcd Initialisieren Config Lcdpin = Pin , Db4 = Portb.0 , Db5 = Portb.1 , Db6 = Portb.2 , Db7 = Portb.3 , E = Portb.5 , Rs = Portb.4 Dim B As Byte , W As Word , Dg As Integer , Dg_s As Single , Tg As Byte Dim Min1 As Single , Min2 As Single , Max1 As Single , Max2 As Single Dim Dsid1(8) As Byte , Dsid2(8) As Byte 'Dallas ID 64 bits incl CRC Dim T As Integer , T1 As Integer , Ts As Single Dim Sc(9) As Byte 'Scratchpad 0-8 72 bits incl CRC, explanations for DS18b20 Cls : Lcd "DS1820 Thermometer" Locate 2 , 1 : Lcd "* V0.3 *" Wait 1 : Cls W = 1wirecount() : Lcd "Sensoren:" ; W 'Anzahl der Sensoren augeben Wait 1 : Cls Dsid1(1) = 1wsearchfirst() '1. Device-ID suchen Do Dsid2(1) = 1wsearchnext() 'weitere ID's suchen Loop Until Err = 1 ' First sensor identified and stored in variable If Dsid1(8) = Crc8(dsid1(1) , 7) Then ' Control that the received CRC match the calculated Locate 1 , 1 Lcd "CRC OK Sensor 1 ID" Locate 2 , 1 For B = 1 To 8 Lcd Hex(dsid1(b)) Next End If Wait 1 ' Second sensor If Dsid2(8) = Crc8(dsid2(1) , 7) Then Locate 1 , 1 Lcd "CRC OK Sensor 2 ID" Locate 2 , 1 For B = 1 To 8 Lcd Hex(dsid2(b)) Next End If Wait 1 : Cls 'Min/Max vorbesetzen Min1 = 999 : Min2 = 999 Max1 = -999 : Max2 = -999 'Hauptschleife Do Tg = 1 - Tg 'für wechselnde Min-Max-Anzeige 1wreset ' reset the bus 1wwrite &HCC ' skip rom 1wwrite &H44 ' Convert T anstoßen Waitms 750 'Wandlungszeit abwarten 1wverify Dsid1(1) 'Prüft das "Match ROM" If Err = 1 Then Lcd "DsId2 not on bus " 'Err = 1 Fehler Elseif Err = 0 Then 'lcd " Sensor found" 1wwrite &HBE Sc(1) = 1wread(9) 'read bytes into array If Sc(9) = Crc8(sc(1) , 8) Then If Dsid1(1) = 16 Then Dg = Dg_ds18s20() '=10h If Dsid1(1) = 40 Then Dg = Dg_ds18b20() '=28h Dg_s = Dg / 10 'In Dezimalgrad umwandeln If Min1 > Dg_s Then Min1 = Dg_s If Max1 < Dg_s Then Max1 = Dg_s Locate 1 , 1 : Lcd "Tmp" ; Fusing(dg_s , "#.#") If Tg = 1 Then : Locate 1 , 9 : Lcd "Min" ; Fusing(min1 , "#.#") : End If If Tg = 0 Then : Locate 1 , 9 : Lcd "Max" ; Fusing(max1 , "#.#") : End If End If End If 1wverify Dsid2(1) If Err = 1 Then Lcd "DsId2 not on bus " Elseif Err = 0 Then ' lcd " Sensor found " 1wwrite &HBE Sc(1) = 1wread(9) If Sc(9) = Crc8(sc(1) , 8) Then If Dsid2(1) = 16 Then Dg = Dg_ds18s20() '=10h If Dsid2(1) = 40 Then Dg = Dg_ds18b20() '=28h Dg_s = Dg / 10 'In Dezimalgrad umwandeln If Min2 > Dg_s Then Min2 = Dg_s If Max2 < Dg_s Then Max2 = Dg_s Locate 2 , 1 : Lcd "Tmp" ; Fusing(dg_s , "#.#") If Tg = 1 Then : Locate 2 , 9 : Lcd "Min" ; Fusing(min2 , "#.#") : End If If Tg = 0 Then : Locate 2 , 9 : Lcd "Max" ; Fusing(max2 , "#.#") : End If End If End If Waitms 200 'Gesamtwartezeit ca.1s Loop End 'end program '======================================================================= ======== Function Dg_ds18s20() 'keine Parameter notwendig! ' Tmp = Sc(1) And 1 ' für 0.1C precision das 0,5°-Bit löschen ' If Tmp = 1 Then Decr Sc(1) Sc(1) = Sc(1) And &B11111110 ' alternativ 0,5°-Bit löschen T = Makeint(sc(1) , Sc(2)) 'in 1/2° T = T * 50 'in 1/100° T = T - 25 'DS18S20 data sheet T1 = Sc(8) - Sc(7) T1 = T1 * 100 T1 = T1 / Sc(8) T = T + T1 'Temperatur in 1/100° Dg_ds18s20 = T / 10 'Ergebnis in 1/10° End Function '======================================================================= ======== Function Dg_ds18b20() 'mit Fehlerkorrektur T = Makeint(sc(1) , Sc(2)) 'in 1/16° Ts = T 'in Single umwandeln Ts = Ts * 6.25 'in 1/100° umrechnen T = Ts 'in 1/100° als Integer merken 'in Integer Dg_ds18b20 = T / 10 'Ergebnis in 1/10° End Function
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.