Forum: Mikrocontroller und Digitale Elektronik In und Aussenthermometer


von Thomas Kiss (Gast)


Lesenswert?

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
von Levelshifter (Gast)


Lesenswert?

Hallo,
hier mal ein Projekt mit dem DS1820: 
http://www.cczwei.de/index.php?id=atm18_download.

MfG

von Wolfgang S. (wsm)


Angehängte Dateien:

Lesenswert?

Hab so was mal gemacht

kleine Platine gemacht, Atmega8, für 2 x DS18B20

DS18B20 ist einfacher auszuwerten als DS18S20.

von Thomas Kiss (Gast)


Lesenswert?

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...

von Wolfgang S. (wsm)


Lesenswert?

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.

von Thomas Kiss (Gast)


Lesenswert?

und wo werden die 2 DS1820 angeschlossen ?

von Wolfgang S. (wsm)


Lesenswert?

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.

von Thomas Kiss (Gast)


Lesenswert?

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...

von Wolfgang S. (wsm)


Lesenswert?

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.

von Karl H. (kbuchegg)


Lesenswert?

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.

von Thomas Kiss (Gast)


Lesenswert?

Könnte ich den BASCOm Code haben ?

Sehr hilfreich..danke

von Wolfgang S. (wsm)


Lesenswert?

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
Noch kein Account? Hier anmelden.