Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Topics - Moustage

Pages: [1]
1
Deutsch / 1-wire am Cubieboard am Beispiel eines DS18B20+ Temperatursensor
« on: September 03, 2014, 01:42:16 pm »
Diese Anleitung ist getestet mit Cubieboard 1 und Cubietruck.

Um 1-wire am Cubie nutzen zu können brauchen wir einen Kernel in dem die Module für 1-wire eingepflegt sind.

Man kann recht einfach testen ob der installierte Kernel die benötigten Module dabei hat.
Wir öffnen ein Terminal und geben diese Befehle ein
# sudo modprobe gpio_sunxi
# sudo modprobe w1_sunxi
# sudo modprobe w1_gpio
# sudo modprobe w1_therm

Sollten diese Befehle ohne Fehlermeldung durchlaufen ist alles schick.
Ansonsten bleibt nur den Kernel selber bauen oder einen verwenden der diese Module dabei hat,
für das Cubieboard 1 musste ich den Kernel neu kompilieren, beim Kernel von Danand sind sie dabei.

Zur Sicherheit nochmals testen mit
#lsmod
sollte uns jetzt die geladenen Module anzeigen, neben anderen...

Module                  Size  Used by
...
w1_therm                2857  0
w1_gpio                 1308  0
wire                   26176  2 w1_gpio,w1_therm
w1_sunxi                 908  0
gpio_sunxi              9003  1
...


Grundsätzlich sollte jeder freie Pin funtionieren, aber Achtung einige sind schon belegt.

Beim Cubieboard 1+2 bietet sich der Port PB10 an, da direkt daneben GND und 3,3V zu finden sind
(Pins 40 = PB10, 42 = GND und 44 = 3,3V Expansionsport U14, Pin 1 ist beim Sata).
Die Belegung ist zu finden unter http://linux-sunxi.org/Cubieboard/ExpansionPorts

Beim Cubietruck verwende ich den Port PG3 (Pin 2 = 3,3V, 4 = PG3 und 16 = GND Expansionsport CN9
auf der USB - VGA Seite, Pin 1 ist beim VGA).
Die Belegung ist zu finden unter http://linux-sunxi.org/Cubietruck#Expansion_Ports

In der script.bin bzw script.fex Datei (wegen Umwandlung siehe http://linux-sunxi.org/Sunxi-tools)
muss der benützte gpio_pin eingetragen werden (bei meinem Cubieboard 1 war das alles noch gar nicht definiert).

[gpio_para]
gpio_used = 1               # Anzeigen das GPIO benutzt wird
gpio_num = 1       # Anzahl der benutzten Portpins Cubie 1+2 = 1 // Cubietruck = 3
# für Cubie 1+2             #gpio_pin_1 = port:PB10<0><default><default><0>
# für Cubietruck            #gpio_pin_3 = port:PG3<0><default><default><0>

[w1_para]
gpio = 1   # den zu benutzenden gpio_pin_X eintragen // die Nummer (1 oder 3 laut obigem Beispiel)


Um die Temperatur messen zu können benötigen wir einen 4k7 Ohm Widerstand und natürlich einen DS18B20+,
als Buchsenleiste nehme ich BL 2X10G 2,00, gibts alles z.B. bei Reichelt.

Für mehrere DS18B20+ benötigen wir KEINEN weiteren Widerstand - nur diesen einen (Pullup).
Den Widerstand löten wir an der Buchsenleiste zwischen 3,3V und dem PB10 (Pin 40) oder PG3 (Pin 4), je nach unserem Board,
beim DS18B20+ ist der mittlere Pin die Datenleitung und die beiden Äusseren + und GND,
am besten einen Blick ins Datenblatt werfen http://datasheets.maximintegrated.com/en/ds/DS18B20.pdf

Nochmals kontrollieren ob auch kein Kurzschluss und die Lötungen alle an der richtigen Stelle,
dann können wir endlich die Buchsenleiste aufstecken und das Cubieboard einschalten.
Ein Tipp: sollte der DS18B20+ sehr heiss werden, habt ihr +3,3V und GND vertauscht...
Der Sensor kann auch parasitär arbeiten (nur 2 Kabel benötigt), das hab ich aber nicht zum laufen bekommen.

Nochmals die vier Befehle von oben eingeben und nachsehen welche 1-wire Adressen wir haben,
jeder DS18B20+ hat eine eizigartige Nummer!
# ls /sys/bus/w1/devices
je nachdem wieviele DS18B20+ wir angeschlossen haben (glaube bis 10 Stück gehen ohne Probleme),
sollte jetzt ein oder mehrere Ordner vorhanden sein der/die 28-XXXXXXXXXXXX lautet.
Bei mir z.B. 28-0000050b3964 bei euch steht hinter der 28- garantiert eine andere Zahl!

Jetzt wirds Spannend, mit einem
#cat /sys/bus/w1/devices/28-EUER_DS18B20+/w1_slave
bekommen wir zwei Zeilen angezeigt z.B.

7b 01 4b 46 7f ff 05 10 1d : crc=1d YES
7b 01 4b 46 7f ff 05 10 1d t=23687
das YES in der ersten Zeile zeigt euch, dass der Wert gültig ist, bei einem NO wiederholen wir den Befehl.
in der zweten Zeile steht neben dem t= die aktuelle Temperatur in Grad Celsius,
den Wert noch schnell durch 1000 teilen und wir haben die aktuelle Temperatur (am Gehäuse des DS18B20+)!

Um das alles immer zur Verfügung zu haben, editieren wir die Datei /etc/modules mit root-rechten
und tragen die vier Befehle ein (ohne sudo und ohne modprobe, immer einen pro Zeile).
gpio_sunxi
w1_sunxi
w1_gpio
w1_therm

Noch einen reboot und fertig!

Viel Spaß beim Temperatur messen...
und das alles erweitern z.B. auf dem Webserver anzeigen, Temperuturanzeige auf dem Monitor oder Ausbau zur Wetterstation usw.  ;)

Pages: [1]