Schaltungen
  • Registrieren

Beitragsseiten

Eine Stärke des Raspberry Pi ist die Möglichkeit der freien Programmierung der GPIOs. So ist es ein Leichtes verschiedene Schnittstellen und Bussysteme zu nutzen. Ein einfaches Bussystem ist der 1wire-Bus (Eindrahtbus). Dieser Bus hat nichts mit dem Bus auf der Straße zu tun. Im Sinne der Elektrotechnik bezeichnet man ein Leitungssystem, welches in der Lage ist mehrere Geräte mit Schaltbefehlen oder Abfragen zu bedienen als Bus. Wir werden als Beispiel den 1wire-Bus dazu benutzen Temperaturen von mehreren 1wire-Sensoren zu erfassen. Der Name 1wire ist etwas irritierend. In Wirklichkeit benötigen wir 3 Leitungen. Das ist einmal die Masse, richtiger die 0V-Leitung, zum Zweiten die eigentliche Signalleitung und drittens eine Spannungsversorgung, schließlich ist jeder Sensor beim 1wire-Bus ein selbstständiges Gerät. Die Signale werden bereits vom Sensor digitalisiert.


Sensor anschließen

Nun sind wir schon bereit unseren ersten Temperatursensor anzuschließen. Ein weit verbreiteter und einfach zu beschaltender digitaler Temperatursensor ist der DS18B20. Den werden wir nun benutzen. Sehen wir uns dazu kurz die Beschaltung an. Den Sensor gibt es in verschiedenen Bauformen. Für unsere Schaltung nehmen wir den mit den "Beinen".

ds18b20

Im Datenblatt ist die Schaltung wie folgt dargestellt:

ds18b20 schalt

Theorethisch würde die Sache schon so funktionieren. Der Sensor ist auf der digitalen Leitung als open-drain ausgelegt und sollte auch am 3,3V GPIO des Raspberry keinen Schaden anrichten. Wir gehen auf Sicherheit und nutzen als Versorgungsspannung (Vdd) die 3,5 Volt vom Pin 1 des Raspberry Pi. Schauen wir uns mal die Varianten der Schaltung an und besprechen diese im Anschluss.

w1temp1

Bild 1 ist die Umsetzung des Schaltbildes mit 3,3V als Betriebsspannung für den Sensor. Denken wir an die Praxis, kann es jedoch auch schon mal zu sehr langen Kabelleitungen (über 100 Meter sind möglich) zum Sensor kommen. Schnell kann die Betriebsspannung durch die Dämpfung des Kabels unter das für den Betrieb des Sensors notwendige Minimum sinken. Hier hilft uns Bild 2 weiter. Die Datenleitung zieht mit dem Widerstand auf 3,3 V, der Sensor wird mit 5V betrieben.

Der Testaufbau für Bild 1 kann nun so aussehen:

Betrieb mit 3,3V

Für Bild 2 dann so:

Betrieb an 5V

 Beide Schaltungen funktionieren ohne Einschränkungen.


1wire aktivieren

Das von uns verwendete Raspbian hat die für den 1wire-Bus notwendigen Treiber bereits an Bord. GPIO 4 ist für den Einsatz als 1wire-Bus vorgesehen. Wie bei allen GPIOs werden auch hier die Daten über virtuelle Dateien verarbeitet. In allen neuen Images von Raspian (Kernel 3.18) wird der device tree (DT) genutzt.

Aktivierung durch DT

Um den 1wire-Bus mit DT zu aktivieren gibt man folgende Zeile in den /boot/config.txt ein:

dtoverlay=w1-gpio


Damit wäre standardmäßig der GPIO4 (Pin7 der Stiftleiste) für 1wire zuständig. Die Verwendung des Parameters gpiopin erlaubt jedoch auch einen anderen Pin zu nutzen.

dtoverlay=w1-gpio,gpiopin=18

Würde den GPIO18 (Pin12) zum 1wire-Bus machen.   


Daten abrufen

Mit dem 1wire-Bus kann man mehrere Sensoren abfragen. Das ist möglich, weil jeder Sensor eine eigene digitale Kennung hat. Versuchen wir es mal.

In unserem Dateimanager gehn wir in das Verzeichnis /sys/bus (wo auch sonst, wenn wir einen bus suchen) und finden dort den Ordner w1:

 

exptemp2

Den öffnen wir natürlich ...

exptemp3

... und finden den Ordner devices. Da liegen unsere Sensoren in Ordnern, die den Namen ihrer digitalen Kennung haben.

exptemp4

Öffnen wir nun den Ordner mit der eher kryptischen Kennung. Die kann nicht gleich wie die hier angezeigte sein, weil ja jeder Sensor seine eigene hat, aber wir finden eine ähnliche.

exptemp5

Später können wir noch viel mehr mit den Dateien in den Verzeichnissen anfangen, aber erst  mal öffnen wir die Datei w1_slave mit einem Doppelklick.

exptemp6

Wir sehen, dass uns der Sensor etwas meldet. Und zwar eimal, dass die Datenübertragung vernünftig gelaufen ist mit dem Eintrag crc = 5e YES und zum zweiten die Temperatur  t=24375. Das sind natürlich nicht 24375 °C sondern 24,375 °C. Wie man auf den richtigen Wert kommt steht im Datenblatt des Sensors. In unserem Fall einfach den Wert durch 1000 teilen.


Mehrere Sensoren

Da jeder Sensor eine unverwechselbare Kennung hat, ist es auch möglich mehrere Sensoren am Bus zu betreiben. Bei der Schaltung ist zu beachten, dass wir den 4,7 kOhm Widerstand nur einmal benötigen. Es ist möglich Sensoren in Linie, als Baum oder Sternförmig anzuschließen. Hier als Beispiel nur eine Möglichkeit:

Anschlussbeispiel 1wire

Wir schließen die Sensoren in Linie an, dabeigehen wir genau wie bei unserm ersten Aufbau vor. Zur Zeit läßt der Treiber bis zu 10 Sensoren am Bus zu. Es gibt die Möglichkeit die Datei etc/modprobe.d/1-wire.conf zu erstellen und mit folgender Zeile die Anzahl der möglichen Sensoren (im Beispiel auf 20) zu erhöhen:

options wire max_slave_count=20

Unser Testaufbau (zwei Sensoren hätten gereicht, aber so wird der Zweck deutlicher) könnte nun so aussehen:

Mehrere Sensoren am 1wire-Bus

Nun können wir die Sensoren auch wieder im Verzeichnis /sys/bus/w1/devices/ finden:

exptemp8

Der Abruf der Daten erfolgt, wie bei unserem einzelnen Sensor im Verzeichnis mit der jeweiligen Kennung. Für praktische Anwendungen müssen wir also dafür Sorgen, dass die Kennungen entweder vom Programm ermittelt oder manuell eingegeben werden.

 

Kommentare   

-3 #97 michib 2017-02-05 01:40
Ehm?! wtf! das ist ein toller text aber die kabelfarben sind ein wahnsinn! Erst rot u schwarz nicht wie üblich verwenden (rot für daten..naja aber schwarz für 3.3 bzw 5v geht gar nicht, natürlich hängen da leute das teil falschherum an!) und bei den nächsten bildern durch weiss u lila ersetzen?! die bilder zerstören den so schön klaren schilderungen vollkommen.
Zitieren
0 #96 Thomas Pfaffinger 2016-07-29 07:23
zitiere Jörg Neumann:
zitiere Simon:
Ich werde mal im Forum posten


Mach das mal, ich ahne schon wo das Problem liegt. Aber das können wir dann wirklich im Forum klären.


Hallo,
ich habe genau das gleich eProblem, und auch den Forenpost gefunden. Leider gibt es da keine Lösung. Gibt es schone eine Idee dazu?

mfg
Thomas Pfaffinger
Zitieren
+1 #95 Joachim Volkmann 2016-07-09 08:23
Hallo, bisher konnte ich hier in keinem Kommentar herauslesen was jetzt mit den DS18B20 mit externer Stromversorgung ist, weil von unten gesehen und laut Datenblatt angeschlossen - werden die Dinger Höllisch heiß und / oder rauchen ab. Also haben die Chinesen jetzt die Dinger falsch produziert oder muß ich die Pins einfach vertauschen ?

Also laut dem Bild auf der Seite Sensor anschließen unten mit dem Breadboard Bild 2 ist bisher ein Sensor komplett abgeraucht und drei weitere haben nicht funktioniert - Habe nur noch 6 von 10 und hätte doch mal gerne eine definitive Aussage um den restlichen 6 Sensoren ein langes Leben und normale Funktion zu ermöglichen.
Zitieren
+1 #94 Frank 2016-01-14 23:15
Das Zauberwort ist Bottom View.....
Wenn man den Dallas genau falsch herum lötet, wird er schlicht und einfach gegrillt und es gibt eine 0000... Kennung. Erfahrung für 1,90 €.
MfG
Zitieren
-1 #93 Kai 2015-09-20 15:24
Spielt es eine Rolle, an welcher Seite des Kabels der Widerst. ist, am Sensor oder am Raspi, besonders bei längeren Kabeln?
Zitieren
-1 #92 Jörg Neumann 2015-07-15 22:50
zitiere Simon:
Ich werde mal im Forum posten


Mach das mal, ich ahne schon wo das Problem liegt. Aber das können wir dann wirklich im Forum klären.
Zitieren
-2 #91 Simon 2015-07-15 22:33
Hi Jörg, der Sensor ist auf einer Art Platine, die außerdem eine LED hat. Stromversorgung und Widerstand sollten eigentlich ideal sein. Ich glaube wie gesagt, dass ich ein Softwareproblem habe. Ich werde mal im Forum posten
Zitieren
0 #90 Jörg Neumann 2015-07-15 22:24
zitiere Simon:
Der Sensor ist definitiv richtig angeschlossen, da die LED leuchtet.


Welche LED leuchtet? Der sensor DS18B20 hat keine LED. Ansonsten ist das Verhalten des Sensors ein typisches Anzeichen für eine fehlerhafte Stromversorgung bzw. einen zu großen Pullup-Widersta nd. Stelle Deine Frage doch einfach ins Forum, da können wir auch Bilder und Schaltpläne austauschen.
Zitieren
0 #89 Simon 2015-07-15 21:05
Hallo,
leider erhalte ich im Verzeichnis /sys/bus/w1/dev ices/ nicht ein Verzeichnis mit der ID des Sensors, sondern Verzeichnisse mit den Namen 00-xxxx, die sich immer wieder ändern. In den Verzeichnissen ist keinerlei Information erhalten, ich weiß also nicht, wie ich vorgehen soll.
Ich benutze den Data Tree, und habe bisher lediglich dtoverlay=w1-gp io in der config.txt eingetragen. Der Sensor ist definitiv richtig angeschlossen, da die LED leuchtet. Es muss ein Softwareproblem sein.
Hat da jemand eine Idee?
Zitieren
0 #88 Jörg Neumann 2015-06-08 17:49
zitiere Paul:
Hallo Jörg,
bei Verwendung von dtoverlay=w1-gpio
wird dann auch noch die Datei etc/modprobe.d/ 1-wire.conf berücksichtig, mit dem Inhalt:
options wire max_slave_count =20

Gute Frage, habe ich noch gar nicht ausprobiert, weil meine Anlage zur Zeit nur mit 8 Sensoren läuft, da bleiben wir mal dran.
Zitieren

Warenkorb

0 Produkte - 0,00 EUR
Zum Warenkorb

Neue Produkte

miniUSB Verbindungskabel 15cm (Artikelnummer: MINIUSB15CM)
0,65 EUR
Raspberry Pi 3 Modell B+ (Artikelnummer: RASPI3BPLUS)
36,50 EUR
Acrylgehäuse NanoPi NEO AIR (Artikelnummer: GEHNANOPINEOAIR)
5,50 EUR
3D Druck Gehäuse NanoPi NEO (Artikelnummer: GEHNANOPINEO)
4,50 EUR
NanoHat Proto (Artikelnummer: NANOHATPROTO)
7,45 EUR