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
>Ich benutze für die Schreib/Lesevorgänge den >internen Pull-Up-Widerstand des ATMEGA. Versuch es mal mit einem 4k7 externen Pullup.
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
Schau dich bei Maxim/Dallas mal nach einschlägigen Application Notes um. Da steht alles drin.
hallo, hab 8 sensoren mit 2 draht abgeschlossen mit > 30m leitung ohne probleme. http://birne.altmuehlnet.de/hp/px5/logger/avr.php mfg orfix
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.