Arduino und der Asuro

Mit der Asuro Erweiterung und der damit vorhandenen RS232 Schnittstelle lassen sich auch sehr leicht Arduino Skripte laden und ausführen. Allerdings wird dazu auch ein neuer Prozessor mit einem Arduino kompatiblen Bootloader vorausgesetzt. Warum nicht gleich auf den ATmega168 umsteigen. Der bietet neben dem doppelten Speicher für Flash, EEPROM und RAM auch eine Debug Möglichkeit über DebugWire.

Die Idee dazu stammt aus dem Arduino Playground in dem Arduino Nutzer ihre Projekte vorstellen. Unter Arduino and the Asuro Robot von Jakob Remin findet man neben einer Quick’n’Dirty Methode zur Modifikation des Asuros auch ein Arduino Sketch zur Ansteuerung des Asuros. Den Umbau kann ich mir durch die Asuro Erweiterung schon mal sparen.

Erste Versuche

Die ersten Versuche mit einem geclonten Arduino Diecimila Bootloader verliefen schon mal vielversprechend. Mit
Ein paar Änderungen in der Board Beschreibungsdatei hat man ein neues Board dazugefügt und dieses taucht nach dem Start der Arduino Oberfläche unter Tools | Boards aus.

##############################################################
atmega168.name=Arduino Asuro w/ ATmega168
atmega168.upload.protocol=stk500
atmega168.upload.maximum_size=14336
atmega168.upload.speed=9600
atmega168.bootloader.low_fuses=0xff
atmega168.bootloader.high_fuses=0xdd
atmega168.bootloader.extended_fuses=0x00
atmega168.bootloader.path=atmega168asuro
atmega168.bootloader.file=ATmegaBOOT_168_asuro.hex
atmega168.bootloader.unlock_bits=0x3F
atmega168.bootloader.lock_bits=0x0F
atmega168.build.mcu=atmega168
atmega168.build.f_cpu=8000000L
atmega168.build.core=arduino

Nach einstellen der Schnittstelle wird der Asuro auch gleich erkannt und das Beispiel Sketch kann übersetzt und geladen werden.
Allerdings zeigte sich dabei der Effekt das beim Flashen bzw. beim Einschalten oder Reset des Asuros der rechte Motor für ca. 10sek los läuft. Das ist natürlich unschön und liegt am Original Arduino Bootloader. Dort wird PB5 als Port für die Status LED verwendet. Beim Asuro ist dieser Port mit dem rechten Motor verbunden. Autsch!!

Bootloader anpassen

Da der Quellcode für den Bootloader als Open Source zur Verfügung steht, ist das Ändern der Status LED kein Problem. Allerdings blieb auch nach Änderung die recht lange Wartezeit von 10sek bis das Anwenderprogramm gestartet wird. Nach ein paar Internet Recherchen war auch für dieses Problem eine Lösung in Form des ADABOOT Bootloader gefunden. Dieser Bootloader bietet einige Vorteile gegenüber dem Arduino Bootloader. Damit bin ich erst mal glücklich.

Allerdings klappt die Übertragung bisher nur über RS232. Bei Bluetooth Anbindung gibt es keine Verbindung zwischen der Arduino IDE und dem Asuro.  Man kann zwar in der Bluetooth Umgebung die Verbindung manuell herstellen, dann klappt immerhin die Verbindung im Terminalmode. Versucht man aber ein Sketch zu laden, bricht die Verbindung wieder ab. Mit Hyper Terminal gibt es keine Probleme unter Bluetooth. Schade, aber man kann wohl nicht alles haben. Allerdings besteht noch Hoffnung. Auf der Chip45 Homepage, gibt es den Ur-Bootloader für die Arduino Boards. Dort gibt es auch ein kleines Tool zum Flashen von Programmen über den Bootloader. Dies ließe sich vielleicht anpassen, damit das Flashen auch unter Bluetooth funktioniert. Ein nettes Feature der Arduino Bootloader ist der automatische Reset des Boards, wenn ein neues Programm geflasht werden soll. Dazu muss lediglich ein 100nF Kondensator zwischen Reset Leitung und DTR Steuerleitung gelötet werden. Allerdings Führt das auch dazu, dass der Asuro einen Reset ausführt, wenn man die Arduino IDE, bzw. das Terminalprogramm startet.

Theoretisch ließe sich der Bootloader auch soweit anpassen, das er auch über die Standard Infrarot Schnittstelle des ASUROs funktioniert. Dazu müsste lediglich noch der 36kHz Timer für die Ansteuerung der IR-LED implementiert werden. Praktisch funktioniert das leider nicht. Die IR Übertragung ist leider zu fehlerträchtig.

Den Asuro Bootloader kann man sich bei Sourceforge herunterladen

Asurino – Eine Arduino Bibliothek für den Asuro

Aus dem bestehenden Sketch von Jakob Remin habe ich angefangen eine Arduino Bibliothek zu schreiben.
Der Name Asurino ist ein Kunstwort zusammengefügt aus den beiden Worten Asuro und Arduino. Bibliotheken für Arduino werden in C++ geschrieben. Das hört sich erst mal nach viel Arbeit an, ist aber nicht sonderlich schwer. Es gibt eine sehr gute Anleitung zum Schreiben von Bibliotheken. Man braucht auch nicht bei Null anfangen, da man natürlich die vorhandenen Arduino Funktionen alle verwenden kann. Außerdem kann man sich an bereits existierenden Bibliotheken orientieren.

Bisher ist die Bibliothek noch recht rudimentär und sicher auch nicht fehlerfrei. Wer möchte kann sich die derzeitige Arbeitsversion bei Sourceforge herunterladen.

Asuro Beispiel Sketche

Ein Beispiel Sketch für den Asuro sieht z.B. so aus. Durch das
#include "Asuro.h"
wird die Bibliothek eingebunden. Die Zeile
Asuro asuro = Asuro();
ist der Aufruf für den Konstruktor der Asuro Klasse. Die Setup Routine wird einmalig beim Start des Sketches ausgeführt und initialisiert lediglich die serielle Schnittstelle. Die Asuro spezifische Initialisierung passiert bereits im Konstruktor. Die loop Funktion wird dann zyklisch vom Hauptprogramm aufgerufen und durchlaufen. Das eigentliche Programm fragt die Tastsensoren ab. Falls eine Taste gedrückt wurde, wird der Tastenwert binär zum Terminalprogramm gesendet und die Status LED für eine Sekunde auf Rot gesetzt, dann wieder zurück auf Grün.

#include "Asuro.h"
Asuro asuro = Asuro();
void setup()
{
  Serial.begin(9600);
}
void loop()
{
  int Switches;
  /* front switch check */
  Switches = asuro.readSwitches();
  if (Switches)      /* Key pressed?
  {
    Serial.println("switches pressed");
    Serial.println(Switches, BIN);    /* send key value in binary */
    asuro.setStatusLED(RED);        /* status led red */
    delay(1000);                         /* wait 1sec */
  }
  asuro.setStatusLED(GREEN);      /* status led green */
}

Einen aktualisierten Artikel zu diesem Thema findet man im AsuroWiki.

Weblinks

Schreibe einen Kommentar

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