DevExperience

.Net Framework, Internet of Things & M2M, Embedded Systems, Design Patterns Paolo Patierno's Blog

MVP Award

I'm Microsoft MVP for Windows Embedded

Recent Posts

Apps & Articles

Progetti

Pubblicazioni

Tags

My Profiles

 

My Embedded101 Blog

My YouTube Channel

Windows Embedded CE 6.0

Building Embedded Devices using Windows Embedded CE 6.0 R2

Archives

Sto leggendo...

Windows Embedded

.Net Micro Framework

.Net Framework & CLR

Email Notifications

Open Source Hardware

RSS Blog Post

ottobre 2011 - Post

μPLibrary : un driver per i Passive Infrared Sensor (PIR)

Ho integrato nella mia libreria per il .Net Micro Framework un driver per poter gestire un sensore PIR (Passive Infrared Sensor) per la rilevazione dei movimenti. Per capirci è uno di quei sensori di cui sono dotati gli impianti di allarme casalinghi.

La nuova classe Pir è molto semplice da usare e prevede di fornire al costruttore tutte le informazioni relative al pin del nostro micro al quale intendiamo connettere l’uscita del sensore PIR. Tra di esse ovviamente c’è l’identificativo del pin, attivazione o meno dell’eventuale filtro per il disturbo, eventuale resistenza di pullup/pulldown, fronte o livello dell’interrupt sul quale vogliamo avere segnalazione di movimento o meno. Infine, va specificato lo stato iniziale del driver, se abilitato o meno.

Inoltre mette a disposizione :

  • Motion : un evento che viene sollevato quando viene rilevato un movimento o meno (dipende da come abbiamo impostato la segnalazione dell’interrupt nel costruttore). Ad esso è associata la class PirEventArgs che ha le due seguenti proprietà :
    • Motion : indica se c’è stato o meno un movimento;
    • Time : timestamp in cui si è verificato un cambiamento di stato del sensore (rilevato movimento o meno);
  • Enabled : proprietà attraverso la quale possiamo abilitare o meno le segnalazioni da parte del PIR;

Per i miei test ho usato il seguente componente abbastanza economico.

d21d53a70507f8098a63971d0655347a_image_300x225

Esso prevede banalmente tre pin di collegamento, ossia la massa, l’alimentazion ed un pin di uscita che va collegato al pin del nostro micro. Ogni qual volta il sensore rileva un movimento, esso fornisce una tensione di 3,3 V sul pin di uscita che torna a 0 V in assenza di movimento. Sfruttando i due fronti (salita e discesa) del segnale, è possibile configurare l’istanza della classe Pir in modo che sollevi l’evento solo in caso di movimento oppure in presenza di una variazione (movimento, non movimento e viceversa).

Il progetto lo trovate su Codeplex e nella Nuget gallery (sia sul sito che all’interno del plugin per Visual Studio 2010) aggiornato alla versione 1.1.0.0.

Swap di due variabili senza la variabile di appoggio ? Si può !

Una delle prime funzioni (escludendo il solito Main() che produce il famosissimo “Hello World”) che si scrive quando ci si avvicina al mondo della programmazione, è quella che ci permette lo swap (scambio) di valori tra due variabili.

Tipicamente si è portati a scrivere del codice di questo tipo …

   1: private void Swap(ref int a, ref int b)
   2: {
   3:     if (a != b)
   4:     {
   5:         int tmp;
   6:  
   7:         tmp = a;
   8:         a = b;
   9:         b = tmp;
  10:     }
  11: }
… ossia siamo portati ad utilizzare una terza variabile (tmp) di appoggio.
 
Ebbene, tale variabile si può assolutamente evitare, riscrivendo la funzione nel modo seguente …
 
   1: private void Swap(ref int a, ref int b)
   2: {
   3:     if (a != b)
   4:     {
   5:         a ^= b;
   6:         b ^= a;
   7:         a ^= b;
   8:     }
   9: }
… ed utilizzando solo ed esclusivamente le proprietà dell’operatore logico XOR (commutativa, associativa identità).
Posted: 28 ott 2011 19:26 da Paolo | con no comments
Inserito sotto:
WP7 Fast Application Switching…cosa c’è dietro ?

Posto il link ad un interessantissimo articolo che descrive cosa esegue il CLR durante il Fast Application Switching in WP7 “Mango”.

Cosa accade tra i due eventi di Deactivated ed Activated all’insaputa dello sviluppatore ed ovviamente dell’utilizzatore finale.

Vi consiglio di dargli un’occhiata…

Posted: 26 ott 2011 8:05 da Paolo | con no comments
Inserito sotto:
Blog Nokia Conversation … la nuova Metro UI

Non vi sembra che la nuova UI del blog Nokia Conversation sia molto familiare a tutti coloro che posseggono uno smartphone Windows Phone 7 ? Ha qualcosa della Metro UI ?

Occhiolino

nokia_conversation_0

nokia_conversation

Visitare per credere….

Posted: 26 ott 2011 8:05 da Paolo | con no comments
Inserito sotto:
Nuget Gallery … c’è anche la μPLibrary !

nuget-229x64_556266e8-afb7-4f84-912b-c99a3f9bf742

Più o meno tutti conoscono Nuget, il tool che permette di trovare ed installare facilmente numerosi packages senza necessità di cercarli nei meandri della rete.

Perfettamente integrato con Visual Studio, possiamo visualizzare l’elenco dei packages disponibili online ed installarli con un click; saranno subito fruibili all’interno del nostra solution. Nuget gestisce anche il versioning ed eventuali dipendenze delle librerie che stiamo scaricando.

Oggi, la Nuget gallery si arricchisce anche della libreria μPLibrary per il .Net Micro Framework che sto sviluppando da qualche settimana.

upLibraryNuget

Posted: 22 ott 2011 16:58 da Paolo | con no comments
Inserito sotto: , ,
μPLibrary : display LCD provider con GPIO e Shift Register

Ho aggiunto alla mia libreria su Codeplex la possiblità di pilotare un display LCD attraverso le due seguenti tipologie di provider :

  • GpioLcdTransferProvider: utilizzando direttamente i pin di GPIO di un micro e collegarli ai pin del display;
  • Shift74HC595LcdTransferProvider : utilizzando uno shift register collegato attraverso un solo pin al micro e poi sfruttare le relative uscite per pilotare il display;

La prima soluzione si basa fondamentalmente sulla prima versione del driver che ho rilasciato nelle settimane scorse. La seconda soluzione utilizza il driver dello shift register 74HC595 e permette di risparmiare parecchi pin del micro per pilotare il display.

Entrambi implementano l’interfaccia ILcdTransferProvider che espone :

  • Send() : metodo con il quale viene inviato un comando o un dato al display. Ciascun provider usa al suo interno una propria modalità (pin GPIO, driver shift register, ….);
  • InterfaceDataMode : proprietà che definisce se il display è pilotato nella modalità a 4 oppure 8 bit;
μPLibrary : managed driver per lo shift register NXP 74HC595

La mia libreria μPLibrary su Codeplex si è ampliata con l’aggiunta di un managed driver per la gestione di uno shift register 74HC595 della NXP, il cui datasheet è possibile scaricare al seguente link.

In base alle potenzialità fornite dal componente, ho implementato i seguenti metodi per le corrispondenti funzionalità :

  • Clear() : ripulisce lo shift register e pone le uscite in alta impedenza;
  • Empty() : carica uno shift register vuoto all’interno dello storage register, in modo che gli output vadano a zero;
  • Output() : invia una sequenza di byte sulla linea seriale di ingresso al componente, che li espone l’uno dopo l’altro in parallelo sulle otto uscite;

Inoltre, la classe mette a disposizione più costruttori in base alla configurazione hardware scelta per i pin ma soprattutto fornisce due modalità di funzionamento :

  • Bit banging : il segnale di clock dello shift register viene pilotato via software  attraverso un pin di GPIO;
  • SPI (Serial Peripheral Interface) : viene utilizzata l’interfaccia SPI in cui il MOSI va connesso all’ingresso seriale del componente ed il SCKL va connesso al clock di shift;
Nuovo free ebook sul Windows Phone Toolkit

bookcover

Rilasciato dal team di WindowsPhoneGeek un free ebook dedicato al Windows Phone Toolkit e quindi intitolato “Silverlight for Windows Phone Toolkit In Depth” e scritto da Boryana Miloshevska.

  • 246 pagine
  • Pubblicato 11 Ottobre 2011
  • Include tutti i controlli del Windows Phone Toolkit Agosto 2011
  • 22 Capitoli
  • Include tutti i codici sorgenti
  • Basato su Windows Phone Mango

E’ possibile scaricarlo qui.

Posted: 12 ott 2011 7:52 da Paolo | con no comments
Inserito sotto:
μPLibrary tra i progetti del .Net Micro Framework

La libreria helper per .Net Micro Framework, che ho da poco cominciato a sviluppare, è stata aggiunta tra i “Related Projects” del .Net Micro Framework su Codeplex.

Untitled

Posted: 5 ott 2011 18:30 da Paolo | con no comments
Inserito sotto: ,
Rilasciato il .Net Micro Framework 4.2 RTM !

MSLogo

 

 

 

 

E’ stata ufficialmente rilasciata la RTM del .Net Micro Framework 4.2 di cui è possibile scaricare l’SDK ed il Porting Kit e tutti i codici sorgenti sul sito Codeplex.

Le nuove funzionalità aggiunte sono le seguenti :

  • Remote Firmware Update : possibilità di aggiornamento remoto del firmware dall’SDK e dal PK;
  • Complete Cryptographic Object Model (PKCS#11) : supportati quasi tutti i tipi e gli algoritmi del .Net Framework (desktop);
  • 1-Wire, PWM e A/D Object Model : supporto per connessione 1-Wire, PWM e A/D attraverso un ben definito Object Model;
  • SNTP e FTP (Client e Server) : implementazioni client e server per SNTP e FTP;
  • StringBuilder e Regex : aggiunte tali classi come nel .Net Framework;
  • VB.Net : possibilità di sviluppare le applicazioni anche in VB.Net oltre che in C#;
  • Supporto per device con Cortex M3 : aggiunto tale supporto per la famiglia di processori STM32;
  • PKStudio : implementato il nuovo strumento PKStudio che prende il posto del Solution Wizard per la creazione di nuove soluzioni nell’ambito del Porting Kit;

Inoltre sono stati introdotti ulteriori miglioramenti tra cui le performance del DPWS ed un’ottimizzazione del codice IL.

La notizia è riportata sul blog ufficiale del .Net Micro Framework ed è stata data dal coordinatore del progetto, Colin Miller.

Posted: 5 ott 2011 18:10 da Paolo | con no comments
Inserito sotto: ,
μPLibrary : .Net Micro Framework Helper Library su CodePlex
mflogo codeplex-logo_thumb

Oggi ho creato e pubblicato su Codeplex il mio progetto μPLibrary completamente dedicato al mondo embedded ed al .Net Micro Framework.

Lo scopo è quello di fornire una serie di managed drivers per interfacciare la propria board con i componenti hardware più diffusi ed inoltre di mettere a disposizione una serie di componenti software di vario genere, da utilizzare nelle proprie applicazioni.

Per adesso, l’unica implementazione realizzata è quella relativa al driver per la gestione di un display LCD compatibile HD4478U (controller Hitachi di cui sono dotati la maggior parte dei display LCD e diventato uno standard de facto).

Spero che possa ritornare utile a qualche appassionato come me  e non mancherò di arricchirlo nel tempo.

Posted: 1 ott 2011 14:12 da Paolo | con no comments