1-Wire Schnittstelle (für den Temperatur-Sensor)
Posted: Tue 4. Dec 2012, 13:28
Hallo Forum,
mir ist es nicht gelungen, das Beispiel 14_DS18B20 zum Laufen zu bringen.
Die Suche nach der Ursache führte zu ein paar Korrekturen in der Datei ds18b20.c
Gut, ich verwende hier die "alte" LaunchPad Version 1.4. Kann sein, dass der Original-Code mit der Version 1.5 funktioniert...?
Die Idee bei der 1-Wire-Schnittstelle ist, dass diese eine Leitung in beiden Richtungen verwendet wird.
Die Übertragung von Einsen und Nullen wird dabei durch präzise Zeitintervalle auf dem Bus gewährleistet.
Man realisiert das (genau wie bei der I2C-Schnittstelle) indem ein Pull-Up-Widerstand die Leitung auf 1 hält, solange kein Device eine Null übertragen will und zu dem Zweck dann die Leitung per Open-Kollektor auf Null ziehen würde.
Dazu muss der Controller den Pin, an dem das Device hängt, mal als Ausgang definieren und eine Null in das entspr. Bit schreiben (damit wird eine "0" übertragen). Sonst wird der Pin als Eingang definiert, um den Pegel dem Pull-Up-Widerstand zu überlassen oder dem Device, das die Leitung per Open-Kollektor auf "0" schalten kann.
Diese Umschaltung zwischen Ein- und Ausgang fehlte in der ds18b20.c-Datei. Ich habe also die low-level-Routinen (also die, die direkt mit dem Ein/Ausgangs-Pin umgehen) entspr. verändert.
Damit läuft die Software hier. Es sind übrigens gerade 18.6|19°C.
Die geänderte Schnittstellen-Datei hänge ich als ZIP-File an.
Man muss nur noch (am besten in "main.h") ein `#define DS18B20PIN BIT7 ergänzen, damit klar ist, an welchem Pin des Ports 1 der Temperatur-Sensor hängt. (also P1.7)
vy 73 de Matthias, DL9MWE
mir ist es nicht gelungen, das Beispiel 14_DS18B20 zum Laufen zu bringen.
Die Suche nach der Ursache führte zu ein paar Korrekturen in der Datei ds18b20.c
Gut, ich verwende hier die "alte" LaunchPad Version 1.4. Kann sein, dass der Original-Code mit der Version 1.5 funktioniert...?
Die Idee bei der 1-Wire-Schnittstelle ist, dass diese eine Leitung in beiden Richtungen verwendet wird.
Die Übertragung von Einsen und Nullen wird dabei durch präzise Zeitintervalle auf dem Bus gewährleistet.
Man realisiert das (genau wie bei der I2C-Schnittstelle) indem ein Pull-Up-Widerstand die Leitung auf 1 hält, solange kein Device eine Null übertragen will und zu dem Zweck dann die Leitung per Open-Kollektor auf Null ziehen würde.
Dazu muss der Controller den Pin, an dem das Device hängt, mal als Ausgang definieren und eine Null in das entspr. Bit schreiben (damit wird eine "0" übertragen). Sonst wird der Pin als Eingang definiert, um den Pegel dem Pull-Up-Widerstand zu überlassen oder dem Device, das die Leitung per Open-Kollektor auf "0" schalten kann.
Diese Umschaltung zwischen Ein- und Ausgang fehlte in der ds18b20.c-Datei. Ich habe also die low-level-Routinen (also die, die direkt mit dem Ein/Ausgangs-Pin umgehen) entspr. verändert.
Damit läuft die Software hier. Es sind übrigens gerade 18.6|19°C.
Die geänderte Schnittstellen-Datei hänge ich als ZIP-File an.
Man muss nur noch (am besten in "main.h") ein `#define DS18B20PIN BIT7 ergänzen, damit klar ist, an welchem Pin des Ports 1 der Temperatur-Sensor hängt. (also P1.7)
vy 73 de Matthias, DL9MWE