Älteres Projekt: PRO-BOT128 Teil 2

 

In Teil 1 wurde die Grundhardware des Pro-Bot128 erklärt. Der Roboter verfügt aber noch über ein drittes, leeres Board. Dieses kann ganz nach den Wünschen des Bastlers angepasst werden.

 

Ich habe das leere Board mit einem Display ausgestattet. Die Hauptschwierigkeit bestand darin, ein Display mit 24 Anschlüssen über ein 6-Adriges Kabel zu steuern. Also musste ich mir etwas überlegen. Ich bin zu dem Entschluss gekommen, dass dort oben eine Art Display-Controller sein müsste, der Kommandos über wenige Leitungen empfängt, diese Interpretiert und dann das Display ansteuert. Dieser Controller ist bei mir ein ganz normaler PIC (ein programmierbarer Mikrocontroller) mit einer I2C Schnittstelle und genügend Pins, damit ich auch noch das Display anschließen kann.

Nun musste ich mir überlegen, wie meine C-Control Einheit mit dem PIC kommuniziert. Ich habe mich hier für das I2C Protokoll entschieden, da 2 der 6 Adern, die von der C-Control auf das obere Board gehen, schon standardmäßig mit der I2C Schnittstelle der C-Control verbunden waren. Das heißt ich habe zwei Adern für die I2C Schnittstelle, über die die komplette Kommunikation zwischen den Chips abläuft, dann habe ich einmal Masse und die 5V Spannung. Die zwei (noch) freien Kabel habe ich natürlich auch noch genutzt und zwar eines um den Controller und das Display an und auszuschalten und eines um eine zusätzliche IR-Leuchte auf dem oberen Board anzubringen.

DisplayFür die Kommunikation zwischen der C-Control und dem PIC habe ich ein Protokoll entwickelt. Die C-Control sendet immer 2 Byte an den Controller, die dieser dann zu interpretieren hat. Das erste Byte ist ein sogenanntes Kommando-Byte und das zweite ein Daten-Byte. Im Kommando-Byte steht drin, was der Controller mit den Daten im Daten-Byte anzufangen hat. Ich habe zum Beispiel ein Kommando, das dem Controller sagt, dass er einfach nur das Daten-Byte ins Display schreiben soll. Diese zwei Bytes werden solange wiederholt gesendet, bis alle Daten übertragen sind. Hier eine Skizze:

┌────────────────┬──────────────┐   ┌────────────────┬──────────────┐
│ Control-Byte 1 ╎ Daten-Byte 1 │ → │ Control-Byte 2 ╎ Daten-Byte 2 │
└────────────────┴──────────────┘   └────────────────┴──────────────┘

Da ein Byte aus 8 Bit besteht, sind die Daten, die ein Daten-Byte enthalten kann, sehr begrenzt. Genauer gesagt: In ein Byte passt eine Zahl von 0 bis 256. Ich mache mir hier die ASCII-Tabelle zu nutze, in der jedes Zeichen einer Zahl zugeordnet ist. So kann ich in einem Daten-Byte genau ein Zeichen übertragen. Will ich also ein einfaches „Hi!“ übertragen, dann sieht das mit meinem Protokoll so aus:

┌─────────┬─────────┐   ┌─────────┬─────────┐   ┌─────────┬─────────┐
│10000001 ╎ 01001000│ → │10000001 ╎ 01101001│ → │10000001 ╎ 00100001│
└─────────┴─────────┘   └─────────┴─────────┘   └─────────┴─────────┘

Natürlich gibt es noch andere Kommandos, die das Control-Byte enthalten kann um zum Beispiel den Displayinhalt zu löschen, den Cursor auf eine bestimmt Stelle zu setzen, den Displayinhalt nach Links oder Rechts verschieben, usw. Auf die Art und Weise der Übertragung mithilfe von I2C möchte ich in diesem Artikel nicht eingehen, da das den Rahmen sprengen würde.

 

VerkabelungIch habe in dem oberen Board des Pro-Bot128 noch eine andere technische Raffinesse eingebaut, nämlich ein ICSP Anschluss. Dieser ist dazu da, um eine neue Software in den PIC zu ‚brennen‘. Normalerweise ist es so, dass man den PIC (der nicht fest gelötet, sondern gesteckt ist) aus dem Sockel löst und in ein Programmiergerät steckt. Dort kann die Software mit dem PC in den PIC gebrannt werden. Da das dauernde herauslösen und wieder aufstecken aber weder der Arbeitszeit, noch den kleinen Pins des Chips gut tut, habe ich mich entschieden hier etwas (für mich) Neues auszuprobieren. Mit dem ICSP-Anschluss kann der PIC innerhalb der Schaltung gebrannt werden. Das ICSP Kabel wird mit der einen Seite in das Programmiergerät und mit der anderen Seite in den ICSP Anschluss der Schaltung gesteckt. Dabei gibt es aber ein paar kleine Probleme, die erst gelöst werden müssen.

Eines der Probleme ist, dass es keinen ICSP Stecker gibt, und auch kein ICSP Kabel. Also muss man sich erstmal überlegen, wie das Kabel aufgeteilt werden soll. D.h. welche Ader welche Funktion bekommt. Dabei habe ich 3 verschiedene Aufteilungen ausprobiert. Die ersten zwei haben nicht funktioniert, da die Takt-Ader nicht genug von den anderen Adern abgeschirmt war. Wenn der Takt nicht richtig übertragen wird, weiß der PIC nicht, wann die anderen Andern auslesen soll. Das ist ein bisschen wie ein Musikkonzert, wo sich auch die Musiker an den vorgegebenen Takt halten müssen, da sie sonst zur falschen Zeit spielen würden.

Ein Weiteres Problem des ICSP Anschlusses war, dass der ICSP Anschluss den PIC mit Strom versorgen muss. Das ist erstmal kein Problem. Das Problem kommt dann, wenn man brennen möchte und plötzlich die C-Control aufwacht, die ja am gleichen Stromkreis hängt. Also musste eine Diode eingebaut werden, die den Strom so blockiert, dass er zwar von der C-Control zum PIC fließen kann, aber nicht vom PIC zur C-Control.

 

Letztendlich habe ich noch eine Infrarot-LED eingebaut, da der Pro-Bot noch nicht über eine reine Sende-IR-LED verfügt hat. Mit dieser LED kann ich quasi eine Fernbedienung aus meinem Pro-Bot machen. Das funktioniert auch ganz hervorragend bei meiner Stereoanlage.

 

Dies ist der zweite Teil der Pro-Bot128 Reihe. Im dritten Teil werde ich das Programm beschreiben, welches ich im Moment auf dem Roboter habe.

One comment

  1. Grayman sagt:

    Hey, auch der 2.te Bericht ist wirklich richtig gut. Weiter so.
    LG

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.