Tassi mit Infrarotschnittstelle

Seit neuestem sollte Tassi in der Lage sein über Infrarot mit dem Computer zu kommunizieren!

Eigentlich kann der Asuro ja von Haus aus bereits per Infrarot kommunizieren. Allerdings funktioniert der originale Transceiver nicht zuverlässig am Laptop. Zunächst habe ich deshalb eine Kabelverbindung zur seriellen Schnittstelle gebastelt und nun habe ich das Kabel durch eine eigene Infrarot Verbindung ersetzt.

Image027

Man beachte, dass die Platine zwar wieder nur Lochraster ist, aber doch ziemlich effektiv genutzt wird – hat mich einiges an extra Zeit gekostet!

Willkommen

Das neue Tassi Blog ist eröffnet!

Hier werde ich in in Zukunft über Tassi Wichtiges und Unwichtiges berichten.

Ja, eigentlich ist ja auch geplant, dass man hier selbst Kommentare schreiben kann. Aber das kann ich bisher Joomla! noch nicht beibringen – da war ich schon mal weiter…

Temperaturmessung mit DS1822 – 1-Wire Protokoll

Auf der Suche nach “Aufgaben” für meinen Roboter bin ich ziemlich schnell auf die Temperaturmessung gestoßen. Nun kann man die Raumtemperatur grundsätzlich mit jedem Bauteil messen, dass seine elektischen Eigenschaften ändert. Ich habe es auch mal mit einem 22k Heißleiter probiert, den ich noch herumliegen hatte – allerdings ist der so unempfindlich, dass ich mit meiner einfachen Schaltung kaum Temperaturänderungen erfassen konnte.

Deutlich komfortabler geht die Messung demgegenüber mit einem DS1822 vonstatten. Es handelt sich um ein kleines Bauteil in der Form eines Transistors, welches als digitales Thermometer funktioniert. Insbesondere wird nicht nur ein Spannungswert ausgegeben, der dann noch in eine Temperatur umgerechnet werden muss, vielmehr wird die Temperatur unmittelbar in Form von zwei Byte in Grad Celsius ausgegeben. Die Besonderheit liegt dabei aber in der Ansteuerung.  Neben Stromversorgung (die ggf. auch parasitär gestaltet werden kann, was ich hier aber nicht behandele) ist nur ein einziger Anschluss vorhanden. Damit kommt der DS1822 nicht nur mit minimaler externer Beschaltung aus, zusätzlich ist auch am Mikrocontroller nur ein einzelner Pin erforderlich.

ds1822 ds1822

Dallas 1-Wire Protokoll

Schlüssel des Ganzen ist ein eigenes Protokoll, welches mit 1-Wire ziemlich treffend beschrieben ist. Anfangs hatte ich auch einige Bedenken, wie die Programmierung funktionieren würde – immerhin muss über die eine Leitung bi-direktional kommuniziert werden. Hatte auch schon gelesen, dass das 1-Wire relativ zeitabhängig ist. Aber probieren geht über studieren.

Das Datenblatt zum Chip ist recht ordentlich und erklärt auch das Protokoll recht umfassend. Wie sich herausstellt ist das Timing kein unlösbares Problem. Insbesondere wird der DS1822 als Slave betrieben und die gesammte Kommunikation wird vom Mikrocontroller gesteuert: Sämtliche Datenübertragungen werden vom Master initiiert. Wenn man sich an die vorgegebene Reihenfolge hält, gibt es keine unüberwindbaren Probleme.

Programmbeispiel

Die hier vorgestellte Routine stellt eine sehr einfache Umsetzung des 1-Wire Protokolls dar. Insbesondere erfolgt keine Unterscheidung verschiedener Thermometer – es kann also nur ein DS1822 angeschlossen sein – für einen mobilen Roboter sollte das aber reichen. Durch die Routinen ds_read_byte() und ds_write_byte() ist prinzipiell auch eine Erweiterung möglich. Da die Messung abhängig von der Auflösung bis fast eine Sekunde dauern kann, ist es zweckmäßig Start der Messung und Auslesen der Daten im Programm zu trennen. Durch Aufruf von ds_start_convert() wird eine neue Messung gestartet. Diese kann dann mit ds_read_temp() auslesen werden. Der Temperaturwert liegt sodann in Form von zwei Bytes in den Variablen ds_byte[0] undds_byte[1] vor. Dabei stellen die ersten 4 Bits von ds_byte[0] die Nachkommastellen dar. Mittels

ds_tmp_byte = (ds_byte[0] >> 4);

 ds_tmp_byte |= ((ds_byte[1]] & 0x07) << 4);

kann man also recht einfach auf den ganzzahligen Temperaturwert zugreifen. Dieser liegt unmittelbar in Grad Celsius vor. Die Funktion ds_show_temp() dient dazu, den Temperaturwert auf einem Display anzuzeigen – dies müsste natürlich spezifisch angepasst werden. Einfaches Programmbeispiel zur Ansteuerung eines DS1822 am 1-Wire-Bus folgt demnächst. Ach ja, zu Fragen oder Rückmeldungen, einfach hier irgendwo auf der Seite ein paar Zeilen hinterlassen – ich kümmere mich dann drum… (bin aber nicht sicher, ob das technisch schon geht…)