30.06.2012

Pierwszy program NETMF

Aby rozpocząć programować w NETMF nie trzeba kupować od razu żadnej elektroniki, procesorów itp. Nie trzeba również umieć lutować (na razie). Po prostu ze strony NETMF ściągamy aktualny SDK, instalujemy i możemy napisać pierwszy program!. Na przykład coś takiego:

using System;
using System.IO.Ports;
using System.Text;
using System.Threading;
using Microsoft.SPOT;
using Microsoft.SPOT.Hardware;

namespace MFConsoleApplication1
{
    public class Program
    {
        private const int Delay = 500;

        public static void Main()
        {
            Debug.Print("start");

            var led1 = new OutputPort((Cpu.Pin)3, false);

            using (var serial = new SerialPort("COM1"))
            {
                Debug.Print("open serial port");
                serial.Open();
                WriteHello(serial);
            
                while (true)
                {
                    ChangePort(led1, serial);
                }
            }
        }

        private static void WriteHello(SerialPort serial)
        {
            var sb = new StringBuilder("Hello ");
            sb.Append(SystemInfo.OEMString);
            sb.Append(" Version: ");
            sb.Append(SystemInfo.Version);
            sb.Append(" Model: ");
            sb.Append(SystemInfo.SystemID.Model);

            if (SystemInfo.IsEmulator)
                sb.Append(" running on emulator");

            sb.AppendLine(String.Empty);

            string msg = sb.ToString();
            Debug.Print(msg);

            byte[] msgBuff = Convert(msg);
            serial.Write(msgBuff, 0, msg.Length);
        }

        private static void ChangePort(OutputPort port, SerialPort serial)
        {
            bool nextState = !port.Read();
            port.Write(nextState);

            var sb = new StringBuilder("Port ");
            sb.Append(port.Id);
            sb.AppendLine(nextState ? " on" : " off");

            string msg = sb.ToString();
            Debug.Print(msg);

            byte[] msgBuff = Convert(msg);
            serial.Write(msgBuff, 0, msgBuff.Length);

            Thread.Sleep(Delay);
        }

        private static byte[] Convert(string message)
        {
            byte[] result = Encoding.UTF8.GetBytes(message);
            return result;
        }
    }
}

Program najpierw przedstawia się na porcie COM, a następnie w nieskończoność mruga (powiedzmy diodą) na porcie 3 procesora jednocześnie wysyłając informację na port szeregowy:

Hello Microsoft Copyright (C) Microsoft Corporation. All rig Version: 4.2.0.0 Model: 2 running on emulator

Port 3 on

Port 3 off

27.06.2012

Początki w .NET Micro Framework

Zapomniałem zupełnie, że kiedyś założyłem bloga. Teraz jest okazja żeby go użyć, bo potrzebuję miejsca do opisywania moich doświadczeń z mikro-kontrolerami i programowaniem w NETMF. A i może się komuś jeszcze przyda.

Kiedyś natrafiłem na jakąś stronę o .NET Micro Framework i jakież było moje zdziwienie, że nic o tym wcześniej nie słyszałem. Używam Visual Studio na co dzień i używam C#, ale programowanie mikro-kontrolerów to coś zupełnie nowego i niesamowitego. Jeśli mogę używać Visual Studio i Resharpera (Reflector na pewno też się przyda) do edycji i uruchamiania oprogramowania, które działa na jakiś płytkach elektronicznych to ja chcę to robić (czytaj: spróbować się pobawić)! A do tego pisać w C#, a nie w C/C++ czy asemblerze (przypomniały mi się czasy 8051). Oczywiście zdaję sobie sprawę z tego, że program będzie mniej wydajny niż napisany w C/C++, no ale coś za coś. Poza tym nie będą to jakieś systemy przemysłowe działające w czasie rzeczywistym. Do mrugania diodami lub do zrobienia sterownika grupy czytników RFID (tak mi teraz przyszło do głowy) chyba w zupełności wystarczy.

NETMF działa jednak tylko na mikro-kontrolerach (a może procesorach) ARM (ARM7, ARM Cortex M3, ARM Cortex M4, ARM9). Czyli o programowaniu w NETMF na mikro-kontrolery AVR (popularne AtmegiXXX) możemy zapomnieć. Ceny tych procesorów też są nie małe: około 60, 70zł za sztukę (np. za STM32F4), co w porównaniu do 5, 10 zł za AVRa jest sumą ogromną. Niemniej wydaje mi się że gra jest warta świeczki (dla lamera takiego jak ja). Również nie wszystkie ARM będą działały z NETMF. Muszą mieć odpowiednią pojemność pamięci RAM i Flash. Poniżej lista procesorów na których NETMF na pewno będzie działał (może będzie uzupełniana):