Samstag, 30. November 2013

Unit Tests für Mikrocontroller [Installation und Konfiguration für AVR]

Unit Tests sind im PC Bereich mittlerweile Standard. Allerdings ist es schwierig sie auch für Software im Bereich der Mikrocontroller zu verwenden. Die wenigen Ressourcen, die der Mikrocontroller zur Verfügung stellt sollten idealerweise für die Software verwendet werden, die später dann auf dem System laufen soll, denn alles andere wäre Geldverschwendung. Es gibt dennoch die Bemühungen mit so wenig Wasserkopf wie möglich Unit Tests auch auf Mikrocontrollern zu implementieren.
Ich habe das in meinen Projekten bisher so gelöst, dass ich zusätzlich zum normalen Programmcode Testfunktionen implementiert habe. Alles was nur zu Testzwecken im Code eingefügt wurde habe ich mit Präprozessor-Anweisungen eingekapselt, sodass sie bei einem Release Built nicht beachtet wurden. Dadurch habe ich während der Entwicklungszeit die Testfunktionen zur Verfügung und später im 'fertigen' Projekt wurden die Testfunktionen nicht mehr übersetzt. Das führte neben kleinerem Programmcode auch zu schnellerer Abarbeitung von z.B. Interrupt Service Funktionen im fertigen Projekt. In dieser Artikelserie werde ich die Verwendung von µCUnit anhand des ASURO Projekts erklären.

Montag, 25. November 2013

GPIOs der Fonera

Heute habe ich ein wenig mit den GPIOs der Fonera gespielt. Um später das SoC der Fonera zum Steueren von anderen Hardwareprojekten zu verwenden, habe ich die vier am einfachsten zu erreichenden GPIO Kontakte mit einer Leitung verbunden. Dabei habe ich gleich noch die Kondensatoren nach Masse entfernt. Die bildeten mit dem Widerstand zusammen einen Tiefpass am Eingang und verhindern somit die Signalintegrität bei schnellen Schaltvorgängen.

Fonera mit LED an GPIO Ports

Die 8 IO Ports der Fonera sind teilweise schon von Hardware belegt, es bleiben jedoch fünf freie Ports übrig, die beliebig verwendet werden können. Vier dieser Kontakte sind auf den Steckplatz für SW1 geführt. Für die kleinen Experimente habe ich auch nur diese vier verbunden. Wenn komplexere Aufgaben gesteuert werden sollen, kann auch der serielle Port  der Fonera verwendet werden um mit einer Mikrocontroller Schaltung zu kommunizieren.

GPIO Description
0    TP3
1    pin 5 of SW1
2    WLAN LED
3    pin 1 of SW1
4    pin 2 of SW1
5    RESET (!)
6    RESET button
7    pin 6 of SW1

Zum Steuern der GPIOs kann das Kommandozeilentool gpioctl verwendet werden. Dieses ist standardmäßig bei der openWRT Installation mit installiert worden und kann zum Beispiel über die SSH Verbindung ausgeführt werden.

gpioctl dirout 3
gpioctl set 3

Dadurch wird der Port 3 als Ausgang definiert und eingeschaltet. Der erste Pin von SW1 ist jetzt auf +3,3V. Nachdem die Funktion der GPIOs funktioniert, wenden wir uns im nächsten Artikel der Software zu und schauen, wie die Fonera dazu gebracht werden kann als Gateway für eben diese Schaltung zu agieren.

Donnerstag, 21. November 2013

Handy -> Bluetooth -> RGB-LED [Teil 2: Schaltung]

Nachdem im letzten Artikel das Protokoll für die Übertragung der Farbwerte definiert wurde, erstellen wir jetzt die Hardware. Da es sich hier um eine nicht sonderlich komplexe Mikrocontroller Lösung handelt, können wir die erste Version der Schaltung auf einem Steckbrett aufbauen und somit evaluieren. Um die Funktion vollständig zu testen, werden die drei Module (Controller, Bluetooth-Modul und RGB-LED) auf dem Steckbrett miteinander verbunden. 
Schaltplan des ATtiny2313A und Bluetooth-Modul mit RGB-LED
Schaltplan der LED Steuerung

Der Schaltplan der Evaluationsschaltung zeigt, wie die einzelnen Komponenten verbunden werden. Wenn die Hardware aufgebaut ist, kann mit der Erstellung der Firmware für die Schaltung begonnen werden. Eventuelle Änderungen der Schaltung können auf dem Steckbrett sehr einfach durchgeführt werden. 
Wie im Schaltplan zu sehen benötigt der Controller einen Quarz X1. Dieser stellt sicher, dass der Takt, der auch für das Timing der UART-Schnittstelle zuständig ist, stabil genug ist. Um den Controller zu programmieren benötigt man den ISP-Connector CON1. Sollte die Schaltung häufiger aufgebaut werden, kann dieser Stecker eventuell weggelassen und ein programmierter Controller direkt verbaut werden. Die TX und RX Leitungen des Controllers werden an die Komplementären Eingänge des Bluetooth Moduls geführt. Die Unterbrechungen der Leitung werden deshalb benötigt, da der Controller mit +5V programmiert wird, das Bluetooth Modul aber mit 3,3V betrieben wird. So kann das Modul beim Programmieren vom Controller getrennt werden. Der Jumper JP1 dient ebenfalls zur Auswahl der 3,3V beim Betrieb und 5V zur Programmierung. Die drei Pins für die Steuerung der einzelnen Farben in der LED sind willkürlich gewählt und können bei bedarf (Layouten einer Platine) noch geändert werden. Der nächste Schritt wird nun die Programmierung des Controllers sein.

[WIP] ASURO mit korruptem Speicher?

Seit letztem mal schlägt das Programmieren des Mikrocontrollers auf dem ASURO bei Page 39 fehl. Die Page liefert beim Auslesen eines zuvor hineingeschriebenen Wertes einen anderen Wert zurück. Die Folge davon ist, dass ein Programm, welches mit dem Bootloader auf den Chip kopiert wird nicht korrekt übertragen wird. Nach einigen Versuchen und etwas googeln habe ich versucht eine andere Programmdatei zu übertragene und das hat ohne Probleme funktioniert. Der ASURO hat also Probleme beim Übertragen von Programmdaten, wenn diese eine Bestimmte Zeichenkette beinhalten. genauer gesagt, viele 0x00 Bytes hintereinander. Zum Glück funktioniert der Chip mit kleinen Änderungen im Quelltext wieder problemlos. Als nächstes werde ich mir die Eingangssignale der IR-Transistoren anschauen und die Signale des ADC auswerten um die Raddrehungen zählen zu können.

Nachtrag: Der Fehler mit den korrupten Pages ist wieder aufgetreten und sogar unabhängig vom verwendeten Chip und der Page. Ein Programm mit 40 Pages bricht bei Page 39 ab, eins mit 12 bei Page 11. Es ist zum Haare raufen.

Montag, 18. November 2013

Wifi Router als Client verwenden

Ich habe für ein zukünftiges Projekt vor, die Kommunikation über WLAN laufen zu lassen. Dazu benötige ich ein Modul, das mir WLAN so umsetzt, dass ich entweder verschiedene GPIOs steuern kann, oder Daten an einen einen UART Port weiter gibt. Ich habe in meiner Sammlung noch eine Fonera der ersten Generation, also ein Linuxboard mit WiFi, Ethernet, GPIOs und UART. Die Fonera muss zu diesem Unterfangen allerdings eine neue Firmware bekommen. Die einfachste Methode das zu tun ist, den Bootloader über das serielle Interface anzusprechen, wie das in diesem Artikel beschrieben ist.
Fonera ohne Gehäuse
Der nächste Schritt ist es die Konfiguration von OpenWRT zu ändern. Dazu können wir entweder eine Verbindung über SSH aufbauen, oder weiter in der seriellen Konsole bleiben. Als erstes benötigt man das wpa_supplicant Paket um zu verschlüsselten Netzwerken eine Verbindung aufbauen zu können, dass sich mit opkg installieren lassen.

opkg update
opkg install wpa-supplicant

 Der verfügbare Editor ist Vi und zu bearbeiten sind die Dateien /etc/config/network

config 'interface' 'loopback'
 option 'ifname' 'lo'
 option 'proto' 'static'
 option 'ipaddr' '127.0.0.1'
 option 'netmask' '255.0.0.0'

config 'interface' 'lan'
 option 'proto' 'dhcp'

config 'interface' 'wan'
 option 'ifname' ' '
 option 'proto' 'none'

und /etc/config/wireless 
config 'wifi-device' 'wifi0'
 option 'type' 'atheros'
 option 'channel' 'auto'
 option 'disabled' '0'
 
config 'wifi-iface'
 option 'device' 'wifi0'
 option 'network' 'lan'
 option 'mode' 'sta'
 option 'ssid' 'WLAN-SSID'
 option 'encryption' 'psk2'
 option 'key' 'WLANPASSWORT'

Nachdem die Dateien geändert wurden kann mit dem Befehl wifi up das Netzwerksystem gestartet werden. Zu beachten ist, das in dieser Konfiguration der Ethernet Port deaktiviert ist. Der nächste Schritt wird dann sein zu bestimmen, ob die GPIOs der Fonera ausreichen um die gewünschten Funktionen ausführen zu können.

Donnerstag, 14. November 2013

Handy -> Bluetooth -> RGB-LED [Teil 1: Protokoll]

Die Vernetzung von Haushaltsgegenständen ist heutzutage nicht mehr weg zu denken. Das so genannte Internet der Dinge wird in den nächsten Jahren immer mehr Geräte miteinander vernetzen und untereinander kommunizieren lassen. Ein kleiner Teil davon wird die Wohnraumbeleuchtung sein. RGB-LEDs sind mittlerweile günstig auf dem Markt erhältlich und werden konventionelle Lampen ablösen. Dieser Artikel beschreibt Überlegungen für die Steuerung einer RGB-LED über ein serielles Protokoll.

Für dieses Projekt wird eine RGB-LED und der Mikrocontroller ATtiny2313A verwendet. Das Bluetooth Modul HC-05 bildet die Schnittstelle zwischen Beleuchtungseinheit und Steuerungssoftware auf Andorid Basis.

Um die Übertragung von Helligkeitswerten mit möglichst wenig Aufwand zu realisieren, wird ein Protokoll erstellt, dass aus einem 4 Byte großem Block besteht. Der Block beginnt mit einem Null Byte (0x00), darauf folgen die Helligkeitswerte für Rot, Grün und Blau. Das Nullbyte dient zur Synchronisation. Die sonstigen Bytes dienen zum Übertragen von Kommandos. Somit ist das Protokoll am Ende bei Bedarf erweiterbar, da erst nach der Synchronisation wieder mit den Farbwerten gerechnet wird.
Telegramm zur Steuerung der Lampe
Die Sonstigen Bytes können für Steuerbefehle verwendet werden. Um erneut eine Farbe zu übertragen muss das Byte 0x00 übertragen werden und danach die Bytes für Rot, Grün und Blau. So lässt sich zum Beispiel der Status der Lampe mit dem Code 0x01 abfragen, der aktuelle Batteriezustand mit 0x02 und so weiter. Die Befehle hier sind erst einmal nur als Beispiel gedacht, um die Grundfunktionen zu implementieren.
Steuerbefehle
Als nächstes wird der Aufbau der Hardware folgen.

Dienstag, 12. November 2013

[WIP] Ein neuer Versuch mit ASURO

Ich bearbeite für das Studium eine Projektarbeit für die Roboterplattform ASURO. Den Verlauf der Entwicklung werde ich hier dokumentieren. Ziel ist es ein Betriebssystem zu erstellen, dass die Werte der sechs Sensoren kontinuierlich ermittelt und sie für den Programmierer aufbereitet. Dazu gehört neben der reinen Speicherung der Messwerte eine, abhängig vom Sensor, kontinuierliche Verarbeitung. Deshalb habe ich mich in letzter Zeit intensiv mit der Wandlung von analogen Spannungen zu digitalen Werten beschäftigt; konkret mit der Wandlung von Spannungen eines IR-Transistors an einem ATmega8.

Montag, 11. November 2013

Hough Transformation für Geraden

Die von Paul V. C. Hough 1962 patentierte Methode zur Erkennung von komplexen Strukturen [1] verwendet ein Parameterraum in dem jeder Punkt im Bild der auf einer Kante liegt, jede mögliche zu findende Form durch diesen Punkt zugewiesen bekommt. Das sind bei unterschiedlichen Formen unterschiedliche Parameter, bei einer Gerade zum Beispiel Steigung und Y Achsenabschnitt oder bei einem Kreis Radius und Mittelpunkt. Wenn alle Kantenpunkte im Parameterraum abgebildet sind, werden durch eine Häufigkeitsanalyse die Parameter der gesuchten Figuren bestimmt. [2] In Software wird der Parameterraum häufig durch ein mehrdimensionales Array von Ganzzahlen ausgedrückt. Das Kantenbild liegt häufig als 2 dimensionales binäres Array vor. Dadurch sind die Raumtransformation und die Maximafindung einfach zu lösen. Um eine Gerade in einem Bild zu beschreiben gibt es mehrere Möglichkeiten.