www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik auslesen eines DS1820 m. Atmega128


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

als blutiger Anfänger versuche ich nun schon seit einer Woche, den 
Dallas Ds1820 auszulesen. Ich habe glaube ich auch schon alle Beiträge 
zu diesem Thema gelesen. Aber entweder sind die Beispiele in C oder ich 
habe sie nicht zum Laufen bekommen. Ich habe hier ein Beispiel mal für 
meine Bedürfnisse angepasst.

Vielleicht kann einer von euch mal eine Blick draufwerfen, was da evtl. 
falsch dran sein kann. Wie gesagt, habt bitte nachsicht, da ich gerade 
erst mit den programmieren beginne.

Der Datapin des DS1820 liegt am Pin C.0, Vcc auf 5V und GND auf Masse.
Als Controller verwende ich den Atmega128 m. 14,74MHz falls das evtl. 
fürs Timing von Bedeutung sein sollte.
Beim ersten Print #1 , Scratch(i) bekomme ich schon nur Nullen 
angezeigt. Ich denke, das hier evtl. schon die Initalisierung nicht 
funktioniert.
Könnte das sein?

Danke schon einmal für eure Mühe,

Tom

$regfile = "m128def.dat"
'Quarz: 14,74 MHz
$crystal = 14745600

 $baud1 = 9600

 Open "COM2:" For Binary As #1


'DS1820 Kommandos (Es werden nicht alle benutzt..aber später vielleicht 
mal)
Const Read_rom = &H33
Const Skip_rom = &HCC
Const Convertt = &H44
Const Read_ram = &HBE
Const Write_ram = &H4E
Const Copy_ram = &H48
Const Recall_ee = &HB8
Const Read_power = &HB4
Dim Busy As Byte
Dim I As Byte
'Scratchpad
Dim Scratch(9) As Byte
'Variablen für die Berechnung der Nachkommastelle
Dim Tmp As Byte , T As Integer , T1 As Integer , Decigrades As Integer
' variablen für die display routine

Config 1wire = Portc.0

Do 
'Hauptschleife

'Diese Sequenz dient zum Auslesen des DS1820 (vgl.Datenblatt vom DS1820)
1wreset
                                                     ' 1wire Reset
1wwrite Skip_rom                                            ' Read ROM 
command
1wwrite Convertt                                            ' Measure 
Temperature

'Vom Testen übrig, um zu sehen, wann das Umwandeln abgeschlossen ist
'Do
'Busy = 1wread()
'Loop Until Busy = &HFF                                      ' Wait for 
end of conversion
'Waitms 100
1wreset
                                                     ' 1wire Reset
1wwrite Skip_rom                                            ' Skip ROM 
command
1wwrite Read_ram                                            ' Read 
Scratch command
'Die ersten 9 Byte in das Scratchpad einlesen
For I = 1 To 9
    Scratch(i) = 1wread()
      Print #1 , Scratch(i)
Next
'Scratch(1) = 170   vom Ausprobieren übrig
'Scratch(2) = 0
'Scratch(7) = 0
'Scratch(8) = 16
1wreset                                                     ' 1wire 
Reset

   Tmp = Scratch(1) And 1                                   ' 0.1C 
precision
      If Tmp = 1 Then Decr Scratch(1)
      T = Makeint(scratch(1) , Scratch(2))
      'Print Hex(t)
      'Print T

      T = T * 50                                            'here we 
calculate the 1/10 precision like
      T = T - 25                                            'DS18S20 
data sheet
      T1 = Scratch(8) - Scratch(7)
      T1 = T1 * 100
      T1 = T1 / Scratch(8)
      T = T + T1
      Decigrades = T / 10
'As integer, this routine gives T*10, with 1/10 degree precision

Print #1 , Decigrades

   Wait 1
Loop

End

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nach dem Start der Messung kann man entweder so lange abfragen bis 
fertig (im Code auskommentiert drin, ob richtig weiss ich nicht) oder 
750msec warten. 100ms ist zu kurz, zudem auskommentiert.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo A.K.,
habe ich gleich mal getestet m. 750ms Wartezeit, gleiches Ergebnis.
Das mit dem Abfrage im Code hatte ich auch schon probiert, allerdings 
bleibt der Prozessoer dann immer in einer Endlosschleife.
Muss ich beim Anschluss des DS1820 noch irgend etwas beachten, wie z.B. 
Pullup-Widerstand oder ähnliches? Einen anderen Port u. DS1820 habe ich 
auch schon probiert, um einen defekt auszuschliessen.

Tom

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein externer Pullup 4K7 ist schon nötig und im Datasheet unübersehbar in 
jedem Anschlussbeispiel drin.

2- oder 3-adrig angeschlossen?

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo A.K.,

hatte ich oben deswegen direkt mit angegeben das 3 adrig angeschlossen. 
Ich hatte gedacht, das bei ext. Vorsorgung kein Pullup nötig wäre, da 
der Ds1820 nun seine eingene Versorgung hat.

Tom

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Egal ob 2- oder 3-adrig: Der Widerstand muss rein. Wie im Anschlussbild 
im Datasheet auch unübersehbar drin. In meinem Exemplar sind auf Seite 5 
Fig.4+5 beide Varianten gezeigt, wobei ein AVR in der parasitären 
Variante allerdings ohne Pullup-FET auskommt, weil sein Pin im 
Unterschied zum normalen 8051 einen aktiven interen Pullup hat.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Apropos: Der Sensor bezieht seinen Strom während der Messung nicht über 
den Pullup-Widerstand, sondern über einen aktiven Pullup.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich Doofkopp,

funktioniert natürlich auf Anhieb.
Man lernt eben nie aus.
Du hast mir sehr geholfen und eine weitere Woche sinnlosen rumprobierens 
gespart.
Vielen dank.

Tom

Hab' noch mal ohne die 750ms Pause probiert, funktioniert auch so noch.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Hab' noch mal ohne die 750ms Pause probiert, funktioniert auch so noch.

Mit Warteschleife, nehme ich an.

Autor: A.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...Abfrageschleife meinte ich natürlich.

Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
genau, die ist noch mit 1s drin, ich meine die pause vor dem 2. 1wreset, 
das scheint auch noch ohne zu gehen.

Tom

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.