Forum: Mikrocontroller und Digitale Elektronik Probleme mit mehr als sechs DS18S20 am ATMEGA32


von Holger (Gast)


Lesenswert?

Moin,

ich habe ein Assembler-Programm geschrieben, welches mir die an einem 
Port eines ATMEGA32 angeschlossenen DS18S20 ausliest.

Alle DS18S20 sind parallel angeschlossen. Alle (+)-Pins liegen an +5V, 
alle (-)-Pins an Minus und alle Daten-Pins sind an einem Pin des 
ATMEGA32 angeschlossen. Ich benutze für die Schreib/Lesevorgänge den 
internen Pull-Up-Widerstand des ATMEGA.

Mein Programm liest die 8 Bytes des ROM-Codes ein. Anschließend erfolgt 
die Prüfung mittels einer von Peter Dannegger hier im Forum 
veröffentlichte CRC-Routine. Wenn diese negativ ausfällt, beginnt das 
Einlesen des ROM-Codes erneut.

Solange DS18S20 zu finden sind, wird die ROM-Search-Routine wiederholt. 
Die Anzahl der anzuschließenden DS18S20 ist eigentlich nur durch den 
RAM-Bereich des Controllers beschränkt.

Wenn keine weiteren DS18S20 mehr vorhanden sind, dann wird die ROM-Suche 
beendet und es wird die Temperatur (0,5K-Auflösung) der vorhandenen 
DS18S20 ausgegeben.

Ich habe insgesamt 18 DS18S20 aus verschiedenen Chargen zur Verfügung. 
Egal wie ich kombiniere, es funktioniert!

Aber:

Sobald mehr als sechs Temperatursensoren angeschlossen werden, 
funktioniert das Einlesen nicht mehr. Schon beim ersten DS18S20 stimmt 
beim Einlesen die CRC nicht mehr.

Entferne ich irgendeinen der sechs funktiniert wieder alles. Es ist 
definitiv kein DS18S20 defekt. Kann es sein, dass der Port-Pin mit so 
vielen DS18S20 nicht klar kommt?


Gruß
Holger

von holger (Gast)


Lesenswert?

>Ich benutze für die Schreib/Lesevorgänge den
>internen Pull-Up-Widerstand des ATMEGA.

Versuch es mal mit einem 4k7 externen Pullup.

von (prx) A. K. (prx)


Lesenswert?

Der interne Pullup ist zu schwach.

von Holger (Gast)


Lesenswert?

Hallo, danke für die Hinweise. Kann ich denn später mehrer (ca. 5) 
DS18S20 mit einem ca. 3m langen Kabel an die Platine anschließen? Oder 
wie lang sollte die Leitung höchstens sein?

Gruß
Holger

von (prx) A. K. (prx)


Lesenswert?

Schau dich bei Maxim/Dallas mal nach einschlägigen Application Notes um. 
Da steht alles drin.

von orfix (Gast)


Lesenswert?

hallo,

hab 8 sensoren mit 2 draht abgeschlossen mit > 30m leitung ohne 
probleme.

http://birne.altmuehlnet.de/hp/px5/logger/avr.php

mfg

orfix

von Holger (Gast)


Lesenswert?

Soooo, habe einen externen Pullup von 3K3 angeschlossen und den internen 
Pullup deaktiviert. Nun läuft alles wunderbar. Zur zeit arbeiten 15 
DS18S20 an einem 1-Wire-Bus.

Gruß
Holger

von Volker U. (volkeru)


Lesenswert?

Mir ist auch aufgefallen, dass nur eine Sekunde Wartezeit zwischen der 
Initialisierung des Messvorganges und dem Auslesen des Scratchpads 
manchmal nicht ausreicht, obwohl laut Datenblatt die Konvertierung 
maximal 750 ms dauern soll. Offenbar braucht der Sensor ab und zu auch 
mehr als eine Sekunde, um die Temperatur zu messen. Es werden dann 
unerwartet 85,0 Grad zurückgemeldet (Initialisierungszustand). Wenn man 
mindestens 1,5 Sekunden wartet, tritt das Problem nicht auf. Ich warte 
daher sicherheitshalber schon 2 Sekunden.

Gruß, Volker

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.