mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik In und Aussenthermometer


Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 Moderator
Autor: Levelshifter (Gast)
Datum:

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

MfG

Autor: Wolfgang Schmidt (wsm)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hab so was mal gemacht

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

DS18B20 ist einfacher auszuwerten als DS18S20.

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
für die kleine Atmega8-Platine mit Schaltplan siehe:

http://home.arcor.de/wosm/AtmegaProjekt/Projekte/p...

Standard LCD

Software mit BASCOM, kann ich hier reinstellen.

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
und wo werden die 2 DS1820 angeschlossen ?

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thomas Kiss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Könnte ich den BASCOm Code haben ?

Sehr hilfreich..danke

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht 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_conten...
'
'     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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.