BLIT2008-Board mit 1-Wire
Aus BraLUG-Wiki
Motivation
Ein paar Kollegen brachten mich neulich auf die Idee, sich mal 1-Wire und Mikrocontrollern zu beschäftigen (sie liehen mir sogar dazu zwei 1-Wire-Chips...). Nach kurzem Überlegen, ob ich eine eigene Schaltung dafür aufbaue, habe ich mich dann doch entschlossen das BLIT2008-Board als Mikrocontroller-Plattform zu verwenden. Und somit versteht nun dieses Board, neben TWI, USB, Infrarot, auch 1-Wire.
Hätte ich allerdings vorher gewußt, dass nun ausgerechnet 1-Wire-Implementationen auf Mikrokontroller wieder mal nicht ganz trival sind, hätte ich vielleicht die Finger davon gelassen... Nach zwei Abenden lief dann aber zum Glück die Geschichte.
Hardware
Zur Hardware ist eigentlich nicht viel zu sagen. Ein 1-Wire-Bus besteht, wie der Name es schon vermuten läßt, aus einer Signalleitung. Dazu kommt natürlich noch die Masse-Verbindung (GND). Laut Spezifikation gewinnen 1-Wire-Chips ihren Strom aus der Signalleitung. Und zwar genau dann, wenn keine Signale auf dem Bus ausgetauscht werden. Zur Überbrückung der Signalzeiten hat jeder Chip intern einen kleinen Kondensator (bzw. sogar Batterien) eingebaut. Für die genauen Interna findet man aber genug Seiten im Internet.
Für meine Versuche habe ich den Temperatur-Sensor DS1820 verwendet. Diesen Chip kann man einmal (wirklich) mit 2 Drähten (Signal/GND) verschalten oder die Versorgungsspanung (Vcc) an einen dritten vorhandenen Pin anlegen. Für letzteres habe ich mich entschieden, um von Anfang an Problemen mit der Signalqualität aus dem Weg zu gehen. Für diese Variante sind auch keine weiteren Bauelemente notwendig.
BLIT-Board-seitig ist die Signalleitung des DS1820 an einem Pin der ISP-Schnittstelle (konkret PB3 --> MOSI) verbunden, weil GND/Vcc gleich "in der Nähe" waren. Natürlich kann man auch jeden anderen freien Port verwenden.
Um während der Implementierung an einfach zu generierende Ausgaben zu gelangen, habe ich am TWI-Bus des BLIT-Boards die LCD-Zusatzbaugruppe angeschlossen.
Software
Wie schon oben erwähnt, ganz so einfach ist 1-Wire nicht zu implementieren. Vor allem die relativ genauen Timings der Signalabfolgen spielen eine große Rolle. Auf den Atmel-Seiten findet man eine Application-Note mit einem Beispielprogramm. Im Internet sind noch einige weitere Umsetzungen zu finden. Um das Rad nicht neu zu erfinden und einen Anhaltspunkt zu haben, bildet die Firmware zum Etherrape die Grundlage für meine Implementierung. Grund dafür war, dass ich wußte Etherrape und DS1820 funktioniert:
Die erste Firmware Blit_board_1wire zu diesem Thema entspricht mit Sicherheit nicht dem Optimum und wirkt teilweise noch ganz schön unstruktuiert, aber funktioniert halt. Größtes Manko: es wird nur ein 1-Wire-Chip vom Typ DS1820 (mit seinen Varianten) am Bus erkannt. Um mehrer Temperaturfühler oder gar andere Chips zu verarzten müßte noch einiges getan werden....