in

dotNet Umbria [DNU]

Il primo User Group in Umbria sul mondo .Net

Articoli

Articoli vari degli iscritti a DotNetUmbria

Primi passi con il .NET Microframework

Come accennavo in un mio precedente commento ad un post di Andrea, qualche tempo fa alcuni miei colleghi ed io ci siamo dilettati con alcuni primordiali esperimenti di “programmazione embedded” (le virgolette sono d’obbligo visto il livello davvero elementare dei nostri esperimenti); all’inizio è duro anche solamente scegliere cosa provare: il campo di applicazioni è vasto ma richiede competenze un po’ ad ampio spettro, comunque che vanno al di là delle sole conoscenze relative alla progettazione/realizzazione del software.

Abbiamo acquistato un kit di sviluppo Tahoe, ovvero una scheda equipaggiata con CPU Meridian, dotata di un display LCD, porta seriale, usb e una ridda di pin con passo un decimo di pollice per accedere facilmente alle porte I/O messe a disposizione dalla CPU stessa.  Ecco la nostra scheda (noterete che è ancora marcata ‘Embedded Fusion’…)

Il Tahoe Development Kit

Il passo successivo per noi è stato quello di informarci sui rudimenti dei protocolli di comunicazione I2C e SPI, supportati dal Meridian, e di procurarci i primi integrati da far interagire con la nostra scheda…

abbiamo pensato ai classici sensori di temperatura e ne abbiamo scelti alcuni che implementano il bus I2C e altri che invece dialogano via SPI e, per farci veramente del male, ce li siamo procurati in versione microscopica (con package SMD tra i più piccoli, al limite della saldabilità a mano!)… per poterli ‘cablare’ in una breadboard di dimensioni umane abbiamo comprato (o in un caso realizzato in casa, con tanto di bromografo e bagni in percloruro ferrico!) piccole Printed Board che ospitano l’integrato e offrono piazzole forate per poter saldare i classici cavetti di collegamento… ed eccovi il risultato nella sua forma migliore!

La breadboard 

Cosa stiamo osservando? Alla scheda sono collegati: due sensori di temperatura TMP100 (I2C) e un sensore di temperatura TMP123 (SPI) di Texas Instruments, ma non solo! Abbiamo fatto piccoli esperimenti anche con un RTC DS1678 (I2C) della Maxim e, dulcis in fundo (ma ancora tutto è in stato embrionale), un ADC ADS1000 (I2C) ancora di Texas Instruments.

Al di là del layout confusionario e dei singoli componenti usati quello che abbiamo messo in opera è una semplice comunicaizone con dispositivi esterni con i due protocolli citati; il risultato? Eccovi un termometro con ben tre sensori (e altre cose di contorno)! La temperatura rilevata dai primi due (identici) è quella delle prime due righe, poi abbiamo il clock; alla quarta riga la temperatura rilevata dal sensore SPI (che ha sensibilità maggiore) e in ultima riga un dato analogico (una tensione in particolare) convertito dall’ADC

Il display quando tutto è in funzione

Applicazioni pratiche? Chiaramente un termostato programmabile con rilevazione della temperatura in più punti, eccetera eccetera…

Ma da un punto di vista prettamente informatico, cosa abbiamo realizzato? Per ogni dispositivo una classe driver che eredita da una opportuna classe fornita dal SDK di Embedded Fusion (una per ogni protocollo che abbiamo usato, intendo), a formare un semplice diagramma di questo tipo:

ClassDiagram1

La routine principale del nostro software ‘prototipale’? A intervalli regolari chiediamo al processore di fare un giro di ‘transazioni’ di scrittura/lettura con i dispositivi esterni che abbiamo inizializzato e scriviamo i risultati sul display:

float temp_1 = Hardware.TMP100_1.Temperature;
float temp_2 = Hardware.TMP100_2.Temperature;
 
DateTime timestamp = Hardware.DS1678.TimeStamp;
 
float temp_spi=Hardware.TMP123.Temperature;
 
float data = Hardware.ADS1000.Data;
 
Dispatcher.Invoke(new TimeSpan(1000),
    new TimerCallback(delegate(object state) {
        _txt_1.TextContent = string.Concat("#1 : ",string.Concat(temp_1.ToString(), " °C"));
        _txt_2.TextContent = string.Concat("#2 : ", string.Concat(temp_2.ToString(), " °C"));
        _txt_3.TextContent = timestamp.ToString();
        _txt_4.TextContent = string.Concat("SPI : ", string.Concat(temp_spi.ToString(), " °C"));
        _txt_5.TextContent = string.Concat("Data : ", string.Concat(data.ToString(), ""));
    }),
    null);

Che ne dite? Approfondiamo? Avete idee o suggerimenti? A presto, allora!

Only published comments... Jun 25 2008, 05:49 PM by Gianluca Ruta
Filed under:
dotNet Umbria 2007-2008
Powered by Community Server (Commercial Edition), by Telligent Systems