Undicesima parte del tutorial di Marco Gottardo sui PIC. Implementazione del firmware di comunicazione seriale e dell'interfaccia .net per il controllo diretto dei punti di I/O per la Micro-GT mini, funzionante anche per la sorella maggiore Micro-GT PIC versatile IDE.

 

MICRO-GT MINI INTERFACCIA DI CONTROLLO DIRETTO DELL'I/O    

Let's GO PIC !!!

capitolo 11

Controllo seriale del PORTB della Micro-GT mini tramite interfaccia .net


In questo undicesimo capitolo si metterà a disposizione degli utenti una semplice interfaccia in versione demo sviluppata in .net a cura del team di sviluppatori software della G-Tronic Robotic. Versioni più complete e potenti potranno essere sviluppate a richiesta. Viene invece sviscerato completamente il firmware del PIC con particolare riferimento alla comunicazione seriale.

Parti del sistema.

Il funzionamento richiede un PC con installato il sistema operativo XP con qualsiasi service pack, oppure windows Vista 32 o 64 bit, oppure win7 a 32 o 64 bit purché sia istallato il framework 2.0 scaricabile gratuitamente dal link sottostante:

 http://www.microsoft.com/downloads/it-it/confirmation.aspx?FamilyID=0A391ABD-25C1-4FC0-919F-B21F31AB88B7

Il file ha un peso di circa 45 megabyte e consente l'esecuzione dei programmi sviluppati in .net, in mancanza di questa installazione il lancio dell'interfaccia restituisce una segnalazione di errore del tipo "framework mancante".

Per l'esecuzione su un netbook o notebook è necessario essere attrezzati con un comune adattatore USB->RS232, a tal proposito segnalo che i test sono stati eseguiti con un modello "Manhattan" serial to USB converter  visibile al link:

http://www.manhattan-products.com/en-US/products/708-usb-to-serial-converter

mentre su un desktop munita di una normale porta COM sarà sufficiente collegarsi con il cavo seriale con piedinatura sottoindicata:

Il medesimo cavo sarà utilizzato come prolunga nel caso di utilizzo del convertitore sopracitato abbinato al netbook/notebook.

Parte fondamentale del sistema è una Micro-GT mini, munita o no di bootloader a seconda del tipo di caricamento che si vuole effettuare oppure La sorella maggiore Micro-GT PIC versatile I.D.E. nella quale sia alloggiato il PIC 16F876A oppure 16F877A.

Nei due casi (876 o 877) e relativamente alla Micro-GT PIC versatile IDE (ovvero la scheda grande) si può entrare direttamente all'UART dei controllori agendo sui due connetori SV11 e SV12, trasformando la scheda nella medesima modalità di funzionamento della mini Micro-GT, ovvero in grado di essere programmata o controllata via covertitore USB->RS232.

Approfondiamo questo argomento di sicuro interesse a tutti i possessori della Micro-GT completa.

 

Configurazione Micro-GT PIC versatile IDE per funzionamento con USB->RS232

Osserviamo innanzitutto le piedinature dei due microcontrollori a 28 e a 40 pin nelle immagini sottoriportate:        

       

Contiamo i pin a partire dall'ultimo, di entrambi i PIC, che ovviamente è quello in alto a destra che sarà il 28 per 876 e il 40 per 877. Si osserva che il pin di ricezione seriale è il numero 11 per il pic 876 e la trasmissione seriale è il successivo, ovvero il 12, mentre relativamente al pic a 40 pin , ovvero 877, troviamo la ricezione seriale al pin 15 e la trasmissione al successivo numero 16.

Osserviamo ora la parte di schema elettrico interessata alla configurazione della Micro-GT completa:

Come si può notare entrambe le possibilità 876 e 877 sono previste dall'hardware, basterà infatti ponticellare SV11 e SV12 nei pin 2-3, per collegare in modalità supervisione (caricamento diretto dei programmi via ICSP in modalità LVP, ovvero tramite bootloader) il PIC 876, mentre ponticellando i medesimi tra 1-2 si configura per la comunicazione in programmazione/supervisione il PIC 877.

Questo semplifica notevolmente la vita a tutti i possesori della Micro-GT che intendono programmarla usando un PC portatile che come sappiamo è privo di porta seriale standard.

Inoltre non è più necessario il cavetto pentapolare ICSP, e il circuito integrato CD4049 si trova automaticamente bypassato.

Per evitare interferenze durante la programmazione in questa modalità è bene rimuovere completamentamente questo cavetto, lasciando liberi i pin dei connettori ICSP1 e ICSP2, e in alcuni casi anche agire in sezionamento (apertura) del dip S13 canale 1 e il canale 2, ovvero disabilitate momentaneamente i LED relativi al PORTC e al PORTD, anche se al massimo potranno visualizzare il lampeggio dovuto al classico transito dei dati sul filo di programmazione seriale.

Rimane necessario il cavetto ICSP nella sola fase preliminare, ovvero quella in cui nel chip di cui siamo in possesso ineriamo per la prima volta il bootloader che sarà carica come un normale file .hex, anche se andrà ad allocarsi in una particolare area della memoria che non verrà poi interessata dalla scrittura del programma.

Il bootloader, in sostanza, funge da sistema operativo del nostro PIC operando in questa maniera:

  1. Attende latente in una area protetta della momeria che si verifichi un evento di reset dovuto ad una azione sul pulsante master clear.
  2. Si verifica l'evento di reset, si porta in ascolto sull'UART.
  3. Attende in ascolto  per 200 millisecondi che si instauri un flusso di dati alla velocità impostata sulla porta di comunicazione che deve concidere con il baudrate citato all'interno del sorgente del bootloader stesso, al fine di instaurare una sincronia tra scrittura e trasmissione del flusso dati. questo  significa che ogni clock e ogni quarzo necessita di una specifica compilazione del bootloader, velocità diverse e compilazioni diverse non faranno funzionare il sistema.

       

Analisi del firmware.


Benché la piedinatura e le periferiche integrate siano maggiori nel modello 877 che nel 876 l'architettura interna è la medesima, quindi potranno funzionare (a meno di tentare di allocare/pilotare punti di I/O inesistenti) con lo stesso firmware.
Il firmware si prefigge di leggere una stringa in arrivo all'UART e accendere il corrispondente LED sull'I/O onboard in entrambi i modelli di piattaforma, sia la Micro-GT mini che la Micro-GT completa. in questo caso si tratterà della fila di LED visibile nella riga centrale della foto sottostante.

Mentre l'abilitazione dell'accensione dei LED nella Micro-GT mini avviene solamente collegando l'apposito cavetto, nella Micro-GT completa è anche necessario abilitare il canale agendo sul DIP S13, la cui serigrafia indica chiaramente "out enable"  canale 1, ovvero quello più a sinistra. 

Si ricorda che avendo molte funzionalità abbinate ad ogni singolo pin dello zoccolo textool e relativamente al modello completo, sarà sempre necessario lavorare con gli schemi alla mano, ad esempio a due pin del PORTB concidono le conessione del secondo quarzo (4 Mhz) predisposto per i PIC di modello inferiore, bisogna quindi deviare con gli appositi jumper le conessioni (vedi schema) al fine di permettere l'accensione del byte completo di LED RB.

Questo problema non esiste nel modello mini che richiede solamente la conessione del cavetto flat a 8 conduttori.

Prima di essere realizzata in forma professionale, su supporto laminato FR4 dual layer, la Micro-GT mini è stata a lungo testata su prototipi sviluppati in FidoCad. Nell'immagine sottostante il layout del prototipo.

Benché il concetto base rimane lo stesso, nel prototipo risultava mancate la compatibilità diretta con il programmer PicKit2 e PicKit3, e non vi è alcun LED di utilità come demoboard. La versione Eagle è più compatta e comprende queste utilità.

Il bootloader, azione preliminare.

Come accennato nel precedente episodio di "Let's GO PIC !!!" per poter caricare i firmware nella memorie del PIC in modalità LVP (a bassa tensione, ovvero usando solo i 5 volt dell'alimentazione) è necessario caricare preliminarmente il BOOTLOADER. Si tratta di un piccolo programma che funge da sistema operativo, che si mette in ascolto nella porta seriale per circa 200 ms dopo la pressione del tasto di RESET presente nella scheda. Passato questo tempo viene ignorato il tentativo di scrittura e il programma va semplicemente in esecuzione. Esistino vari tipi di BOOTLOADER, alcuni ufficiali distribuiti dalla stessa MicroChip, altri customizzati programmati dai vari utenti. In genere sono specifici per il tipo di microcontrollore impiegato e per la velocità di quarzo e di caratteri al secondo lungo la linea seriale impiegata. Anche l'accupazione e l'allocazione in memoria non è identica per tutti. In genere si ha, come segnalato in precedenti post, l'occupazione delle prime 4 parole e delle ultime 213 della medesima memoria in cui è allocato il programma, ovvero da 0x0000 a 0x0003 e da 0x1F2A a 0x1FFF, ma come detto potrebbe variare da PIC a PIC e da bootloader ad un altro.

Attenzione, alcuni bootloader potrebbero avere degli effetti collaterali, come ad esempio tenere impegnato un pin di I/O anche durante il normale funzionamento, ad esempio il pin PGM concidente nel caso del 16F876 con RB3, ovvero il quarto LED della Micro-GT mini.

Dal link è possibile scaricare il bootloader testato ->  bootloader 16F876A 4Mhz 9600(6).zip.

La comunicazione seriale PC->Micro-GT.

Per questioni pratiche e anche di standardizzazione, cerchero' di usare, per quanto possibile, in tutti i progetti G-Tronic la medesima stringa di comunicazione. 

L'esperienza ha portato a fare cadere la scelta nella stringa di sei caratteri: 

@,C1,C2,C3,C4,->

Dove la freccetta finila indica il "line feed" ovvero l'invio o "Enter".

Potenzialmente ognino dei caratteri indicati da C1 a C4 possono rappresentare sia un valore numerico espresso come posizione all'interno della tabella ASCII che il carattere vero e proprio ovvero il calore "char" espresso in chiaro nella stringa stessa.

In questo modo la stringa risulta essere molto versatile ed adatta a tutte le applicazioni didattiche nonche' a molte professionali.

Associamo ai caratteri della stringa un significato per l'applicazione qui proposta.

Data la semplicita' dell'evento richiesto che comporta la sola accensione e spegnimento di un'uscita digitale collegata al PORTB, decidiamo di impegnare il solo primo carattere, "C1", con significato di "canale interessato dal comando", e che il firmware abbinera' tale evento a una particolare reazione che e' un settaggio nello specifico pin del PORT.

Tale settaggio potra' essere di "ON" o di "OFF", quindi si decide di abbinare due stringhe a ogni pin RBx.

Il formato prescelto e': 

Per fare un esempio concreto, la stringa  "@I000->" viene deciso che sara' abbinata all'evento di accensione del pin RB0 del PORTB. 

Per definire i valori ASCII da usare nel firmware, allo scopo di decoficare le stringhe ASCII (american standard code for information interchange), ci si riferisce a delle tabelle di conversione standardizzate, esistono nel web una moltitudine di convertitori online di facile ed intuitivo utilizzo.

Personalmente ho usato questo -> http://www.mikezilla.com/exp0012.html

Tale tabella di calcolo e' necessaria per fare coincidere il significato "ASCII text" inviato dall'interfaccia .not (e in questo formato la vede il programmatore lato PC) con quella interpretata dal firmware ovvero come la interpreta e vede il programmatore lato microcontrollore.

Ecco che si ha la corrispondenza:   @I000->  corrisponde a 0x49

Se non si ha ben compreso questo aspetto allora il firmware che segue ha poco significato.

chi non lo avesse ancora fatto nei precedenti capitoli di "Let's GO PIC" scarichi adesso il manuale del microcontrollore interessato 16F876/877, presi come riferimento per i corsi e per le piattaforme Micro-GT.

scarica databook -> manuale16F87x(6).pdf

Andate a pagina 7 del databook, potrete vedere l'architettura interna dei microcontrollori, e osservate l'architettura interna, questa e' pressoche' uguale per i due modelli a 28 e a 40 pin a meno del fatto che 877 ha delle periferiche in più connesse allo stesso bus.

Nell'immagine ho evidenziato in giallo le due periferiche di comunicazione seriali disponibili, la Master Synchronous serial port, il cui acronimo e' MSSP, pensata allo scopo principale di interconnettere altri microcontrollori oppure delle periferiche specifiche quali delle memorie EEPROM, dei Display, dei convertitori analogici digitali e simili.

Questo modulo e' pensato per funzionare secondo due modalita':

  1. come interfaccia periferica seriale (nel mauale indicata con SPI)
  2. intercomunicazione tra microcontrollori o circuiti integrati predisposti (nei manuali modalita' nota come inter-integrated Circuit ovvero I2C). A suav volta il medoto I2C può operare in due maniere per il quale dedicheremo un capitolo di Let's GO PIC. Si fa accenno che le parti comunicanti potranno essere configurate e operare in modalita' master oppure slave.

Vi e' poi il modulo ADDRESSABLE UNIVERSAL SYNCHRONOUS RECEIVER TRANSMITTER indicato nei manuali come USART, a volte abbreviato semplicemente nel termine generico SCI che sta a indicare SERIAL COMMUNICATIONS INTERFACE.  Questo modulo può essere configurato per eseguire una comunicazione di tipo FULL DUPLEX asincrona in modo da poter comunicare con periferiche come vecchi display a raggi catodici oppure porte seriali di comunicazione di computer basate sullo standart EIA-RS232C, oppure può essere configurato per eseguire una comunicazione di tipo half duplex allo scopo di interfacciarsi con dispositivi periferici quali i convertitori analogici digitali o digitali analogici, nonche' le memorie EEPROM allo scopo di memorizzare dati o comandi da impartire successivamente ai PORT (configurazioni memorizzate delle uscite come ad esempio nella realizzazione di un sequencer programmabile).

Le configurazione vengono impartite operando sui bit dei due appositi registri ad 8 bit denominati TXSTA e RCSTA.

Le due immagini seguenti mostrano la disposizione dei bit di configurazione all'interno di questi registri:

 

 Sopra ad ogni bit possiamo notare le diciture R oppure R/W con significato:

Vediamo ora il significato di questi partendo da sinistra del primo registro, ovvero dal bit meno significativo del registro TXSTA.

(bit 0) TX9D = E' usato per effettuare il controllo della parità dei bit trasmessi. Ma chiediamoci, "Che cosa significa parità?". Si tratta di una tecnica abbastanza efficace, ma non infallibile che permette di controllare se il pacchetto di bit trasmessi in seriale, arrivato al ricevente, è uguale a quello spedito dal trasmittente. La tecnica consiste nell'aggiungere o non aggiungere al treno di impulsi il bit di controllo in modo che il numero totale di bit alti (1 logico) nel pacchetto sia sempre e comunque pari. Si verifica quindi che se nel pacchetto sono presenti all'arrivo un numero dispari di bit a 1 sicuramente vi è stato un errore di trasmissione, d'altro canto se nel pacchetto ci sono come ci si aspetta un numero pari, non è detto che questa trasmissione sia corretta dato che potrebbe essersi verificato il cambio falsato di livello ben due o più bit. Benché non infallibbile la tecnica è comunque molto usata perche molto semplice da realizzare, difatto si tratta di eseguire gli Ex-Or dei bit prima che questi siano inviati inviati, e aggiungere il risultato al pacchetto. Una volta raggiunto il destinatario si esegue di nuovo Ex-Or di tutti i bit compreso quello di parità con essi inviati. Se si ottiene il medesimo risultato 1 o 0 ottenuto prima dell'invio allora la trasmissione è andata a buon fine.

Bisogna tenere presente che questo tipo di tecnica è in grado di effettuare solo un controllo e non una correzione pertanto, una volta ritenuto non valido il pacchetto ricevuto e richiesto di nuovo l'invio, si può entrare in loop infinito dato che il pacchetto corretto potrebbe non arrivare mai a causa della persistenza del disturbo che ha causato l'errore.

Nota aggiuntiva in merito è che il controllo di parità può essere fatto in maniera concettualmente analogo sul dispari anziché sul pari.

 E' importante conoscere una terminologia basilare delle trasmissioni, DTE = data terminal equipment, DCE = data comunication equipment.

Nell'applicazione che stiamo andando a sviluppare la Micro-Gt sarà, con limitazione, delegata a fare il DTE, mentre il PC sarà il DCE.

Normalmente nel DCE, viene montato il maschio del connettore DB9, mentre nel DTE viene montata la femmina, come si può facilmente osservare osservando la porta seriale nel lato posteriore di un PC e il connettore di un vecchio modem a 56k.

 

 

Osserviamo nella foto che il connettore della Micro-GT è femmina assegnandoli il ruolo di DTE, come avverrà quando verrà posta in supervisione di un processo con invio di dati al PC in cui si potrà sviluppare un sinottico in .net o altri linguaggi.

(bit 1) TRMT = stato del registro di scorrimento che carica in bit nel cavo TX di trasmissione 1= TSR vuoto, mentre 0 = TSR pieno.

(bit 2) BRGH =selettore di trasmissione ad alta velocità. La velocità di trasmissione di una linea seriale è misurato in baud rate, ovvero simboli ASCII trasmessi al secondo, spesso erroneamente confusi con bit al secondo. impostato a 1 questo bit commuta la porta o il canale di trasmissione ad alta velocità, mentre posto a 0 lo commuta a bassa velocità. Nelle trasmissioni seriali esiste un segnale di clock che serve a sincronizzare le informazioni inviate lungo l'unico conduttore con il ricevente che può quindi ricostruirne il significato.

(bit 3) = non usato.

(bit 4) SYNC = Questo bit segnala al modulo USART di commutarsi in trasmissione sincorna se posto a 1 oppure asincrona se posto 0, in pratica dice al sistema di agganciarsi o meno a un segnale di clock.

(bit 5) TXEN = abilitazione alla trasmissione, quando è posto a 1 la trasmissione è abiltitata.

(bit 6) TX9 = consente al nono bit, quello di parità di essere trasmesso oppure no. Quando questo bit è a 1 la trasmissione è di nove bit compresa la parità, quando è a 0 la trasmissione è a 8 bit e non c'è quindi il controllo sulla parità dato che il bit non verrà inviato.

(bit 7) CSRC = Bit di selezione della sorgente di clock per la trasmissione, in modalità asincrona pede significato mentre in modalità sincrona quando posto a 1 dice che il dispositivo è master per la trasmissione e tiene quindi conto del clock interno, tale clock è generato da una fonte hardware interna denominata BRG, quando è posto a 0 il dispositivo trasmette in slave mode, ovvero aggancia la velocità e la sincronia a una fonte esterna di clock. 

Procediamo con l'analisi del secondo registro, RCSTA abbinato alla ricezione dei dati nel lato Micro-GT.

(bit 0) RX9D = ha il medesimo significato del bit 0 del registro precedente, ma il suo contenuto va calcolato dal programmatore nel lato firmware. Il calcolo si esegue, come già spiegato,  valutando gli Ex-Or dei singoli bit ricevuti.

(bit 1) OERR = bit di segnalazione di errore che nella manialustica è indicato con "Overrun error", questo potrà essere resettato agendo nel bit4 del medesimo registro indicato con CREN il cui significato è chiarito tra qualche riga. Se il bit in questione vale 0 allora non vi sono stati errori durante la trasmissione.

(bit 2) FERR = questo bit può essere utlizzato in caso di errore per richiedere l'invio del medesimo byte ma privo di errori, quando è a 0 la ricezione è stata valida e non c'è richiesta di un nuovo invio del byte.

(bit 3) ADDEN = address detect enable bit, quando è a 1 nella modalità di ricezione asincrona , e con il bit RX9 alto, abilita gli interrupt di ricezione dal buffer quando carico.  Quando è a zero vengono ricevuti tutti i byte in arrivo e l'ultimo bit di ogni pacchetto è considerato bit di parità.

(bit 4) CREN = Abilita la ricezione continua di informazioni quindi è concettualmente legato alla modalità asincrona di trasmissione in cui posto a 1 abilita la ricezioen continua dei dati, se posto a 0 non è ailitata la ricezione continua dei dati.

(bit 5) SREN = questo bit abilita la ricezione singola di un dato e può funzionare diversamente in maniera sincrona o asincrona. Nella modalità di trasmissione sincrona si distingue ulteriormente tra il modo master e il modo slave. Riassumendo si ha "modo sincrono Master"  bit alto = abilitazione della ricezione del singolo dato, bit a zero disabilitazione della trasmissione del singolo dato. Va tenuto presente che ad ogni trasmissione riuscit di un dato singolo vine resettato automaticamente ed è proprio grazie a questo evento che possimo stabilire un "handle" del flusso di informazione.

(bit 6)  RX9 = consente la ricezione del nono bit quando necessario o richiesto, quando è alto  consente, quando è basso disabilita.

(bit 7) SPEN = Bit che abilita la porta seriale e consente l'uso della trasmissione seriale (Serial port enable bit). Se si omette la configurazione di questo bit i corrispondenti pin del processore non hanno significato di RX e TX ma semplicemente di PORT C rispettivamente RC7 per il pin di ricezione RX e RB6 per il pin di trasmissione RC6. La configurazione è: SPEN=1 -> porta seriale abilitata, mentre con SPEN=0 -> RC6 e7 sono porte digitali

 Settaggi per l'uso della comunicazione seriale nel firmware. 
 I registri predetti vanno citati e configurati nel firmware, quindi nel software lato PIC.

//Inizializzazione UART

TXSTA= 0x20;  // TX abilitato
RCSTA= 0X90;  // Registro RX USART
BRGH = 1;      // USART alta velocità
SPBRG= 25;      // Generatore di Baud Rate (25=9600 baud)

scarica il progetto MpLab di connessione all'interfaccia software -> bistabili direct IO-MicroGT-mini(1).zip

 

Firmware del controllo diretto I/O.

Nella tabella iniziale, tipica dello stile di programmazione del corso online "Let's GO PIC!!!" sono chiaramente indicate le stringhe preassegnate dal firmware (software lato pic) ai vari eventi. A commento è riportato l'evento causato dal riconoscimento della stringa.

L'analsi del software evidenzia che la ricezione e la decodifica della stringa avviene in funzioni diverse, la prima (ricezione) avviene a cura della funzione di interrupt "SerChar" definita di tipo void che definisce per ogni singolo carattere ricevuto la sua posizione ordinata assegnandoli segnificato di C1,C2,C3,C4 all'interno della formattazione predetta. Si cura dell'avanzamento alla lettura del carattere successivo e del rilevamento dei caratteri "line feed" e carrige return", ovvero l'invio, che chiude la stringa stessa. L'apertura di una nuova stringa avverrà alla ricezione del carattere chiocciola "@", qualsiasi cosa non faccia parte di questo formato viene semplicemente ignorato.

La decodifica della stringa, ovvero l'assegnazione di un significato ad ogni singolo carattere ricevuto e l'abbinamento di questo ad uno specifico evento avviene a cura della funzione "Par_ser" anch'essa di tipo void, il cui nome ricorda nella teoria delle stringhe il parsing, ovvero la scansione e riconoscimento. L'effettivo evento hardware, abbinato al segnale software avviene proprio in questa funziona a cura di un if multiplo noto come switch, la cui molteplicità è implementata nei vari "case". Leggendo il sorgente ci si accorge facilmente che ad ogni punto di I/O sono abbinati due eventi che sono l'accensione e lo spegnimento.

Al fine di impedire blocchi in codinzione di acceso è stato implementato l'evento di uscita che comporta sul reset del PORTB, ovvero forza a zero tutte le uscite, analoga funzione avrà il tasto "reset" presente sull'interfaccia software lato PC, ma senza la necessità di uscita dal software di controllo.



/**************************************************************
*            Micro-GT mini Direct Control I/O                     *
*                       G-Tronic Robotics                                  *
*                        beta 1 (17/07/2011)                                  *
* Questo programma è sviluppato per PIC16F876A         *
* piattaforma Micro-GT mini                                               *
*                                                                                          *

* Scopo del programma:                                                 *
* Controllare via seriale 8 comandi di ON/OFF da inviare *
* alla Micro-GT mini con la seguente legenda                    *
* Nota: Firmware utilizzabile con Micro-GT versatile IDE  *
*                                                                                          *
* Comandi di accensione:                                                *
* LED0 @I000inv RB0 ->ON                                              *
* LED1 @L000inv RB1 ->ON                                             *
* LED2 @M000inv RB2 ->ON                                            *
* LED3 @N000inv RB3 ->ON                                            *
* LED4 @O000inv RB4 ->ON                                            *
* LED5 @P000inv RB5 ->ON                                             *
* LED6 @Q000inv RB6 ->ON                                            *
* LED7 @R000inv RB7 ->ON                                             *
*                                                                                            *
* Comandi di spegnimento:                                              *
* LED0 @S000inv RB0 ->OFF                                            *
* LED1 @T000inv RB1 ->OFF                                            *
* LED2 @U000inv RB2 ->OFF                                            *
* LED3 @V000inv RB3 ->OFF                                            *
* LED4 @Z000inv RB4 ->OFF                                             *
* LED5 @X000inv RB5 ->OFF                                            *
* LED6 @Y000inv RB6 ->OFF                                            *
* LED7 @J000inv RB7 ->OFF                                             *
*                                                                                            *
* RESET @A000inv resetta tutte le uscite                           *
* quit @B000inv PORTB=0                                                  *
*                                                                                             *
* Importante: Le stringhe inviate sono di tipo impulsivo da   *
* parte dell'interfaccia .net che genera il                               *
* comando di OFF                                                                 *
*************************************************************/

#include <pic.h> //libreria standard di riconoscimento hardware
#include "delay.h" //libreria potenziata versione 2010 di MicroChip per creare ritardi

#define LED0 RB0
#define LED1 RB1
#define LED2 RB2
#define LED3 RB3
#define LED4 RB4
#define LED5 RB5
#define LED6 RB6
#define LED7 RB7
#define RESET 0



extern void Par_ser(void); //predichiarazione funzione scansione contenuto stringhe
extern void Var_Init(void); //predichiarazione funzione inizializzazione variabili

unsigned char C1,C2,C3,C4,RxPos,Flags; //dichiarazione variabili contenute in stringa e di riconoscimento stringa

main(void) //inizia la funzione principale
{
   TRISA = 0x00; // tutte uscite per evitare interferenze
    TRISB = 0x00; // uscite comandi
    TRISC = 0xf8; // bit 6-7 Seriale

    PORTA = 0x00; // azzera le porte
    PORTB = 0x00; // azzera il PORT B
    PORTC = 0x00;

    Var_Init(); //inizializza le variabili di trasmissione seriale
    ADCON1= 0x87; // PORTA all digital mode

//Inizializzazione uart
TXSTA= 0x20; // TX abilitato
RCSTA= 0X90; // Registro RX USART
BRGH = 1; // USART alta velocità
SPBRG= 25; // Generatore di Baud Rate (25=9600 baud)

//Inizializzazione TIMER1
T1CON = 0; // TIMER 1 resettato
T1CKPS1 = 0,T1CKPS0=0; // TIMER1 prescaler = 1
T1OSCEN = 0; // TIMER1 external oscillator disable
TMR1CS = 0; // TIMER1 internal clock (fosc/4)
TMR1ON = 0; // TIMER1 in STOP

//Inizializzazione interrupt
INTCON = 0; // Interrupt disabilitato
PIE1 = 0; // Interrupt di periferica disabilitati
GIE = 1; // Global Interrupt Enable
PEIE = 1; // Periferal Interrupt Enable
RCIE = 1; // USART Receive Interrupt Enable

for (;;){
   if (Flags==1) Par_ser();
   DelayMs(2); // Delay aggiuntivo
    }
}  //fine del main


void interrupt SerChar(void) //prototipo ricezione
{
   if (RCREG==0x40 | RxPos > 6) //se arriva la chiocciola dimensiona la stringa
    {

         C1=0,C2=0,C3=0,C4=0; //azzero la stringa
       RxPos=0,Flags=0;
      }

if (RxPos==1) C1=RCREG; //ricezione della stringa comandi
if (RxPos==2) C2=RCREG;
if (RxPos==3) C3=RCREG;
if (RxPos==4) C4=RCREG;
if ((RxPos==5) && (RCREG==0x0d)) Flags=1; // <CR> terminator
RxPos++;
}


void Var_Init(void){
RxPos=0;
Flags=0;
}


void Par_ser(void) // Analisi comandi
{
Flags=0;
switch (C1){
   case 0x49: //carattere I Accensione LED 0
   LED0 = 1;
  break;
   case 0x53: //carattere S Spegnimento LED 0
  LED0 = 0;
  break;

  case 0x4C: //carattere L Accensione LED 1
   LED1 = 1; 
   break;
   case 0x54: //carattere T Spegnimento del LED 1
   LED1 = 0;
    break;

    case 0x4D: //carattere M Accensione LED 2
   LED2 = 1;
   break;
   case 0x55: //carattere U Spegnimento LED 2 
   LED2 = 0;
     break;

    case 0x4E: //carattere N Accensione LED 3 
    LED3 = 1;
     break;      case 0x56: //carattere V Spegnimento LED 3 
   LED3 = 0;
    break;

   case 0x4F: //carattere O Accensione LED 4 
   LED4 = 1; 
     break;     case 0x5A: //carattere Z Spegnimento LED 4 
   LED4 = 0;
   break;

    case 0x50: //carattere P Accensione LED 5 
     LED5 = 1; 
      break;
    case 0x58: //carattere X Spegnimento LED 5 
   LED5 = 0;
   break;

    case 0x51: //carattere Q Accensione LED 6
   LED6 = 1; 
   break;
   case 0x59: //carattere Y Spegnimento LED 6 
   LED6 = 0;
   break;

     case 0x52: //carattere R Accensione LED 7 
  LED7 = 1; 
  break;
  case 0x4A: //carattere J Spegnimento LED 7
   LED7=0;
    break;
       case 0x41: //carattere A resetta il PORT B
      PORTB=RESET;
     break;
     case 0x42: //carattere B inviato prima di uscire dall'interfaccia
     PORTB=RESET;
      break; 
     }
  }

.

 

Anteprima interfaccia VB.net

Nell’immagine seguente vediamo l’anteprima dell’interfaccia sviluppata visual basic 2011 noto come VB.net (dotnet).
 
 
Download Micro-GT mini Interface ->  microGTinterface demo1.zip
 
Note per la versione Demo 1 del software "Micro-GT mini interface"
All'interno del pacchetto compresso troverete un file TXT in semplice lingua inglese che spiega le limitazioni di questa versione demo liberamente distribuita.
 
Il tasto START stabilisce la comunicazione seriale in maniera diretta se il computer in uso possiede questa porta, se siamo nel caso di PC netbook/notebook allora preliminarmente si deve controllare l’indirizzo COM assegnato al dispositivo USB (il cavo di interfaccia USB/seriale), tale controllo è possibile effettuarlo tramite il pannello di controllo di windows, in genere una sola volta dato che usando la medesima porta USB verrà solitamente assegnato lo stesso indirizzo. Se già si conosce l’indirizzo, ad esempio COM3 basterà settare questo nel campo PORT. Nulla vieta di andare a tentoni fino a stabilire la connessione, non c’è nessun pericolo di danneggiare la scheda oppure il cavo adattatore o il PC.
Per impostare la comunicazione settiamo un generico 9600 oppure 19200 caratteri al secondo, dovrebbero andare entrambi bene.
La pressione del tasto start stabilisce la comunicazione e tramite l’azione sui LED disegnati nell'immagine della scheda,  comporta l’invio della stringa abbinata all’accensione del pin del port corrispondente.
La tonalità del rosso dei LED cambia a seconda che questi siano premuti (accesi) o rilasciati (spenti). Il cambio di stato avviene con pressioni successive.
La stringa inviata viene visualizzata nel campo indicato con “output string”.
In questa versione preliminare, beta e gratuita la comunicazione è unidirezionale, ovvero dal PC operiamo sull’accensione dei canali segnalati con i LED della Micro-GT mini, ma nella versione successiva comparirà un tasto di selezione dei prodotti di periferica Micro-GT mini oppure Micro-GT versatile IDE (e anche successive produzioni).
Sarà inoltre possibili acquisire segnali di vario genere digitali e analogici, o controllare gli stessi.
Inoltre sarà possibile pilotare tutte le periferiche integrate della Micro-GT versatile IDE quali il ponte H, il driver L298 degli stepper motor, i display a sette segmenti e i display LCD sia testuali che grafici.
E’ prevista l’integrazione di una sezione editor e downloader per la quale si è ancora in fase di sviluppo.
 
 
Nella foto vediamo l'amico ing. Alejandro Gatto che esegue alcuni test funzionali sull'interfaccia dotnet. La versione demo è installata nel suo notebook, con sistema operativo WIN XP  SP3. Sopra al tavolo notiamo esserci due esemplari di Micro-GT mini su pcb professionale e il prototipo sviluppato in FidoCad (si distingue perché il circuito stampato è marrone). Sul tavolo notiamo anche la presenza della scheda di espansione che presenteremo in uno degli episodi di let's go pic dedicato ai mini shield. Questa "espansion board" mette a disposizione ben 22 uscite digitali (segnalazioni LED rossi con possibilità del riporto del segnale a bordo macchina o a transistor ti potenza per comandare elettrovalvole) e 8 ingressi a pulsante N.A. con segnalazione LED verdi.  Sono disponibili anche gli striplineper la connessione dei segnali analogici e dei servomotori.  Le conessioni tra la Micro-GT mini che funge da mainbord e la scheda di espansione avvengono tramite cavo flat saldato su tripline femmina a 8 conduttori per lato.  
 
 
Il sistema può essere alimentato praticamente con qualsiasi cosa abbiate in casa, ad esempio un vecchio alimentatore da stampante, facendo attenzione che si tratti di tensione continua compresa tra 7 e 24 volt. In molti casi sperimentali potrete riportare  fuori dalla scheda la tensione a 5 volt regolata dall'LM7805 presente nel circuito tramite i predisposti morsetti (vedere schema nel tutorial Let's GO PIC !!! capitolo 10).  
 
Scarica i filmati dei test dell'interfaccia VB.net in formato 3gp (visibili con quicktime o altro visualizzatore di filmati ottenuti tramite la videocamera del telefonino. -> test interfaccia Mini Micro-GT.zip
 
 
Suggerimenti applicativi.
Con la Micro-GT mini, abbinata al software di interfaccia qui liberamente scaricabile potrete realizzare:
 
1) Tesine scolastiche di controllo dell'I/O
2) Controllo da computer di punti luce a relè
3) Controllo di  elettrovalvole
4) Controlli in generale in catena aperta.
5) collegamento con il medesimo software alla Micro-GT PIC versatile IDE (con le stesse limitazioni dovute al demo)
 
In un prossimo foturo, sarà migliorata l'interfaccia VB.netal fine di implementare:
 
1) controllo di sequenze cicliche
2) comunicazioni bidirezionali
3) controlloprofessionale di gruppi valvole.
5) gestione dei segnali analogici
6) posizionamento dei servomotori
7) controllo in posizionamento, direzione, senso di marcia dello stepper motor (solo Micro-GT PIC versatile ide)
8) Controllo del ponte H della Micro-GT versatile IDE
9) Invio di stringhe per la visualizzazione LCD (vari modelli)
10) interfacce e supervisioni per le tesine scolastiche.
11) controllo della comunicazione con protocollo I2C
 
I circuiti stampati della Micro-GT mini e della Micro-GT versatile IDE sono disponibili a prezzo di costo sostenuto per il realizzo contattandomi all'indirizzo mail    [email protected]
Fino ad esaurimento scorte è anche possibile richiedere piccole forniture per laboratori scolastici e/o hobbistici.
Su richiesta potrete avere anche esemplari montati e collaudati.
 
Buon divertimento a tutti
M.G. as ad.noctis
 

Licenza Creative Commons
This opera is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 2.5 Italy License