Mikrocontroller mit .NET und C# programmieren

Seit einiger Zeit beobachte ich nun schon den Markt für Mikrocontroller, auf denen .NET läuft, genauer gesagt .NET micro framework oder kurz NETMF. Programmiert werden diese Boards ausschließlich in C#. Nun habe ich zugeschlagen und mir ein FEZ Domino Board besorgt. Das kostet zwar 75.- €, hat dafür aber auch eine durchaus üppige Ausstattung mit USB Host und microSD Card. Mal sehen ob das auch für einen Roboter taugt.
FEZ Domino

Ok, was soll man davon halten ein Microsoft Betriebssystem auf einem vergleichsweise schwachbrüstigen Mikrocontroller. Kann das funktionieren?

Hardware

Features

Zuerst einmal die technischen Daten:

  • Microsoft’s .NET Micro Framework 4.1
  • 72Mhz NXP LPC2388 ARM7 Processor
  • Arduino Pin kompatibel
  • Arduino shield kompatibel
  • Debugging und Programmierung über USB unter Visual Studio 2010 (auch mit VS2010 Express)
  • 21 digital IOs, 6 analog Inputs
  • 3xUART, 1xI2C, 2xSPI, 1xCAN
  • 3.3V IOs, 5V tolerant

Der Prozessor stammt von NXP. Es ist ein LPC2388 mit ARM7 core. 512kB FLASH und 96kB RAM. Darauf befindet sich bereits der .NETMF von GHI electronic. Mit .NETMF heißt der Chip dann USBizi und kann auch so von GHI bzw. tinyCLR für eigene Designs bezogen werden.

Arduino kompatibel

Das Schlagwort Arduino kompatibel bedarf weiterer Erklärung. Das FEZ Domino board ist von den Abmessungen und vom Pinout identisch zum Arduino. Die meisten Arduino Shields laufen sogar, entsprechende Treiber vorausgesetzt. Die Sonderfunktionen der Arduino IOs wie PWM und SPI, sowie die UART liegen fast alle auf identischen Pins. Auch die 6 analogen Inputs sind vorhanden. Lediglcih die I2C Schnittstelle liegt auf den Digital Pins 2 und 3 (Analog 4 und 5 beim Arduino). Obwohl der ARM7 Prozessor mit 3,3V läuft sind die DIgital Pins 5V tolerant. Als Ausgangspegel liefern sie aber nur 3,3V. Der zulässige Ausgangstrom liegt bei nur 4mA (20mA beim Arduino).

USB Schnittstelle

Die USB Host Schnittstelle ist auf einem Standard USB A Stecker herausgeführt und unterstützt Standard Geräte wie Tastatur, Maus, Massenspeicher. Auch USB Geräte mit virtuellen seriellem Port (wie z.B. der Arduino) lassen sich ohne weiteres Darüber ansprechen.
WLAN und Bluwetooth Dongle werden allerdimgs nicht unterstützt.
Die USB Host Schnittstelle arbeitet völlig unabhängig von der USB client Schnittstelle, die auf einem microUSB Stecker herausgeführt ist. Diese Schnittstelle dient ausschlieslich zum Übertragen der Programme und zum Debuggen. Allerdings kann über den Mode Jumper Die Debug Schnittstelle als normale USB HID Schnittstelle verwendet werden. Dann muß man über die erste serielle Schnittstelle debuggt werden.

micro SD Card

Die microSD Card Schnittstelle wird im „echten“ SD-Card Modus angesprochen, d.h. 4 Datenbits und niocht wie sonst üblich im 1Bit SPI MNode. Dadurch werden sehr hohge Datenraten sowohl beim Schreiben wie beim Lesen erzielt. Als SD Karten Format wird FAT32 erwartet. Es werden alle gängigen SD Karten einschließlich SDHC und beliebiger Größe unterstützt.

Netzwerk

Obwohl auf dem LPC2388 eine Ethernet Schnittstelle integriert ist, wird diese nicht unterstützt. Mit dem aktuellen Beta GHI-SDK werden aber Ethernet Module mit dem WIZnet W5100 Chipsatz unterstützt. Das sind u.a. das SparkFun Arduino Ethernet Shield. Dabei ist ein kompletter TCP/IP Stack implementiert, auch UDP wird unterstützt.

I2C, SPI, UART, CAN, PWM

Die üblichen Standard Schnittstellen sind natürlich auch auf dem FEZ Domino vorhanden. Es gibt eine I2C Schnittstelle auf den Digital Pins 2 und 3. Dazu kommen 2 SPI Schnittstellen und 3 UART Schnittstellen. COM1 liegt auf den digital Pins 0 und 1 wie beim Arduino. Ebenso SPI1 auf den Digital Pins 11,12,13 (wie beim Arduino). COM2 und SPI2 liegen auf einer zusätzlichen 10 poligen Stiftleiste. Ein CAN Bus Interface liegt auf den Digital Pin 7 und 4. COM4 als 3. UART Schnittstelle kann zwar zusätzlich aktiviert werden, geht dann aber auf Kosten von 2 A/D Wandlern (An 2 und 3). Die Digital Pins 5,6,8,9,10 haben PWM als Zusatz Funktion (Pin 3 und Pin 11 wie beim Arduino dagegen nicht). Auf allen Pins kann aber mithilfe von Timer Output Compare zusätzlich PWM Funktionalität erzeugt werden.

Software

Die Software ist schnell installiert und fügt sich nahtlos in Visual Studio 2010 ein inklusive Smart completion und Debugger. Man klickt auf Run und das Programm wird über USB auf die Hardware übertragen und kann dort ausgeführt oder debugged werden. Sehr komfortabel. Zum Erstellen eigener Projekte dienen Templates. Dort wählt man einfach nur das Ziel Device aus erhält ein lauffähiges Programm Gerüst.

Was wird benötigt

Auf der tinyCLR Seite kann man sich durch die Komponenten klicken und findet dort Treiber zu den gängisten Sensoren, Aktoren und Shields. Dazu gibt es noch ein Wiki mit User-Projekten mit Quellcodes zum Download.

Multithreading

Ein tolles Feature von .NETMF is multithreading. Obwohl .NETMF kein Echtzeit Betriebssytem lassen sich mehere Threads erzeigen und laufen quasi parallel.

Hello world in .NETMF

Here is a simple program that shows a blinking LED in .NETMF.

using System;
using System.Threading;

using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

using GHIElectronics.NETMF.FEZ;

namespace FEZ_Domino_Application1
{
  public class Program
  {
    public static void Main()
    {
      // Blink board LED

      bool ledState = false;

      OutputPort led = new OutputPort((Cpu.Pin)FEZ_Pin.Digital.LED, ledState);

      while (true)
      {
        // Sleep for 500 milliseconds
        Thread.Sleep(500);

        // toggle LED state
        ledState = !ledState;
        led.Write(ledState);
      }
    }

  }
}

Nachteile

Bei allen Vorteilen die NETMF und das FEZ Domino board bieten, sollten auch ein paar Nachteile erwähnt werden:

  • Verwendung vieler Parallel Pins. Ein LCD Modul im 4Bit Mode anzuschliessen ist schon extrem aufwändig. Da Pins alle einzeln als separate Objekte betrachtet werde, es gibt keine Gruppierungen (Arrays, Nibbles oder Bytes) von Pins
  • Nur 3,3V Ausgangsspannung. Kann zu Problemen besonders bei FET führen, die bei 5V noch funktionieren aber nicht mehr bei 3,3V
  • Nur 4mA Ausgangsstrom. LEDs die 20mA benötigen sollte man immer über Transistoren anschliessen, oder LowCurrent LEDs verwenden.
  • Kein microDelay. Exakte Timings die Delays im us Bereich benötigen, sind kaum machbar
  • Pin Toggle Zeiten. Togglen von Pins per Software dauert mehrere us. Dazu kommt zyklisch (alle 18,2ms) noch die Garbadge Collection dazu, die für Verzögerungen von einigen ms führen kann.

Alternativen

Nebem dem FEZ Domino gibt es noch einige andere Boards im Arduino Form Faktor, z.B.:

  • das FEZ Panda. Sehr viel preiswerter als das FEZ Domino, dafür mit 69 IOs aber ohne USB Host und optionaler microSD Card für 35$.
  • das FEZ Mini board. Von der Belegung Parallax BS2 bzw. Arduino Mini pin kompatibel.
  • Vom Hersteller Secret Labs gibt es die Netduino Reihe mit dem Netduino und dem
  • NetDuino+ mit Ethernet und microSD Card. Preislich sicher sehr interessant, weitere Erfahrungen habe ich noch nicht damit gemacht, da die Boards in Europa kaum verfügbar sind.

Zu erwähnen wäre noch das FEZ Open Projekt .NETMF als Open Source Projekt. Klingt interessant aber noch im Beta Stadium. Mal sehen was daraus wird. Läuft derzeit auf dem FEZ Panda und der FEZ Hacker Plattform.

Fazit

Mich hat das .NET Fieber gepackt. Es macht einfach riesigen Spaß damit zu programmieren. Es wird schwer werden wieder mit dem Arduino zu arbeiten, wenn man sich erst mal in die .NET Welt gewagt hat. Aber es gibt sicher Anwendungen geben, für die Arduino die bessere Wahl ist und bleibt.

Weblinks

Bezugsquellen:

2 Antworten auf „Mikrocontroller mit .NET und C# programmieren“

  1. Sehr aufschlussreicher Artikel. Ich muss zugeben, dass ich ebenfalls von der .NET Programmierung begeistert bin. Eine sehr interessante Sache.

Schreibe einen Kommentar

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