C# tritt elegant im kleinen Schwarzen auf

Code in C# und Microcontroller stehen sich nicht eben nahe, nehmen manche an. Angesichts eines winzigen Boards, des Netduino, erweist sich die Annahme als Irrtum. Wer dem ‘kleinen Schwarzen’ noch nicht begegnet ist, wird von dessen elegantem Äußeren nicht nur fasziniert sein, weil er weiß, was sich dahinter verbirgt. Wenn er es denn weiß. Ein 32-Bit-Controller von Atmel, getaktet mit 48MHz, der in C# programmierbar ist, und zwar ohne irgendein weiteres Board einzuschalten (wie etwa das auch nicht unelegante Dragon-Board). Der ARM7-Controller ist nämlich in das .NET Micro Framework eingebettet, das auf der Netduino-Hardware als Software implementiert ist.

Der Standdard-Version des Netduino steht ein Netduino Plus zur Seite, um gegebenenfalls auf 2 GB Speicher einer auswechselbaren MicroSD-Karte zurückzugreifen, sowie das Board ans Ethernet anzubinden, so daß sich die uneingeschränkte Kommunikationsfähigkeit mit dem LAN und WAN über das TCP/IP-Protokoll eröffnet. Aber auch ohne Netz im Hintergrund bietet sich das Board an, um C# als »see sharp« auszubuchstabieren. Es lassen sich digitale und analoge Ports ansprechen, Signale einlesen oder ausgeben, es laufen Timer ab, Interrupts werden ausgelöst, die PWM arbeitet nebenher, und zwischenzeitlich legt sich der Prozessor schlafen, solange es nichts weiter zu tun gibt.

Und all das geschieht unter Visual-C# aus der Entwicklungsumgebung heraus, an die das Netduino-Board unmittelbar angeschlossen ist, sobald der Stecker des Micro-USB-Kabels eingesteckt wird. Lediglich das .NET Micro Framework ist zuvor zu installieren. Es fügt sich nahtlos in die Entwicklungsumgebung von Visual-C# ein. Templates für Projekte mit dem Netduino beziehungsweise Netduino Plus lassen sich auswählen, und das Board wird im Debugging-Modus programmiert, wobei das Programm automatisch in den Flash-Speicher des Boards übertragen wird. Anschließend wird das Board abgenabelt, um bis zur nächsten Umprogrammierung allein zu arbeiten. Bei jedem Power-Up startet das Programm. Einen (Reset-) Taster gibt es auch, nebst weißer Kontroll-LED. Außer einer zusätzlichen blauen LED, die bequem ansteuerbar ist, ist sonst nichts weiter an Bord genommen worden. Knappes Design, es unterstreicht die sich bietenden Möglichkeiten. Auf dem Board, das dem bekannten und bewährten Arduino-Layout folgt, stehen geregelte 3.3V und 5.0V zur Verfügung. Es wird seinerseits über das angeschlossene USB-Kabel mit 5V versorgt, oder wahlweise über ein externes Netzteil oder eine entsprechenden Batterie mit Gleichspannung zwischen 7.5V und 12V.

Fehlt bloß noch ein eigenes Programm. Hier ein harmloses Beispiel:

// NetduinoPlus Timer Recipe (by Peter Gold)

// Device: NetduinoPlus
// Task: Invoke timer indicated by blue LCD on board.

using System;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;
using SecretLabs.NETMF.Hardware;
using SecretLabs.NETMF.Hardware.NetduinoPlus;

namespace NetduinoPlusTimer
{
    public class Program
    {
        static OutputPort led = new OutputPort(Pins.ONBOARD_LED, false); // blue LED on board

        public static void Main()
        {
            // specify time interval in milliseconds
            int timeInterval = 11000; // 11000ms = 11s
            // invoke timer
            System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(onTimer), null, 0, timeInterval);
            // let microcontroller sleep
            Thread.Sleep(Timeout.Infinite);
        }

        private static void onTimer(object state)
        {
            // notify each tick of timer by blinking blue LED
            led.Write(true); // LED on
            Thread.Sleep(300); // 300ms delay
            led.Write(false); // LED off
            // or toggle LED by: led.Write(!led.Read());
        }
    }
}

Das Programm, geeignet für den Netduino und den Netduino Plus, bewirkt lediglich, daß ein blaues Licht blinkt. Trotzdem ist das nicht ganz ohne. Immerhin wird auf Interrupt-Ebene gearbeitet. Der Prozessor ist nicht länger involviert, weshalb er seine Zeit verschläft, energiesparend.

Leave a comment