Area SX srl - Informatica e Microelettronica
0
Torna a: Home Page Soluzioni Microcontrollori PIC Primo esperimento di programmazione su EE01

Primo esperimento di programmazione su EE01

Data di pubblicazione: 30-09-2004 | Versione Italiana  | (No English Version)The English version of this article does not exists
Parole chiave: - PIC -

Primo esperimento di programmazione su EE01

Primo esperimento di programmazione su EE01

In questo articolo viene descritto come iniziare a prendere confidenza con la programmazione in C del modulo EE01 e come effettuare le prime semplici prove di interfacciamento locale prima di passare all'uso delle funzionalita' del modem GSM integrato

Il compilatore C utilizzato per gli esempi è il versatile CCS-C nella economica versione PCH dedicata ai PICmicro della famiglia 18 (maggiori informazioni).

Iniziamo con un primo esempio che non utilizza ancora le funzionalità del modem integrato nella scheda EE01 ma che ci consente di fare la prima sperimentazione per testare se il nostro ambiente di programmazione e la nostra scheda EE01 funzionano correttamente.

Lo schema elettrico di base utilizzato è riportato nel seguente articolo Alimentazione e programmazione ICSP.
A questo schema di base sono stati aggiunti due led, uno rosso ed uno verde secondo lo schema seguente:

 

Proviamo ora a far lampeggiare alternativamente i due led con un ritardo di 1 secondo tra un lampeggio ed il successivo. Il codice è il seguente:

#include <18F452.h>
#use Delay(Clock=10000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP

#define LED_ROSSO PIN_C0
#define LED_VERDE PIN_C1

void main(void) {  
  for (;;) {    
    delay_ms(1000);    
    output_high(LED_ROSSO);    
    output_low(LED_VERDE);    
    delay_ms(1000);    
    output_low(LED_ROSSO);    
    output_high(LED_VERDE);  
  }
}

La direttiva #include <18F452.h> determina l'inclusione nel sorgente del file 18F452.h fornito con il compilatore CCS in cui sono specificate tutta una serie di definizioni relative al tipo PICmicro in uso. Questa direttiva deve essere sempre inclusa nei vostri sorgenti.

La direttiva  #use Delay(Clock=10000000) comunica al compilatore la frequenza di clock del quarzo collegato al PICmicro, in questo caso un quarzo da 10MHz. Questa informazione verrà usata dal compilatore per la generazione di eventuali cicli di ritardo software. Anche questa direttiva deve essere sempre presente nei vostri sorgenti.

La direttiva #fuses HS,NOWDT,NOPROTECT,NOLVP determina il settaggio della Configuration Word interna al PICmicro. Questo particolare registro contiene dei flag che devono essere settati opportunamente durante la programmazione del PICmicro per consentire un corretto funzionamento. Ogni flag o fuses può essere settato con questa direttiva inserendo il nome relativo. In questo caso:

  • HS L'oscillatore lavora con un cristallo esterno con frequenza superiore a 4Mhz
  • NOWDT Il watch dog timer è disabilitato
  • NOPROTECT Il codice inserito non sarà protetto per cui il PICmicro, una volta programmato, potrà essere anche riletto
  • NOLVP La programmazione in modalitò Low Power è disattivata

Per maggiori informazioni sul significato dei fuses consultare il Datasheet Microchip del PICmicro 18F452

Le direttive:

 

#define LED_ROSSO PIN_C0
#define LED_VERDE PIN_C1

 

associano semplicemente i nomi LED_ROSSO e LED_VERDE ai rispettivi pin di I/O del PICmicro. Da questo punto in poi potremo riferirci al pin RC0 del PICmicro con il nome LED_ROSSO più semplice da ricordare.

Dalla istruzione main() inizia il vero codice che il PICmicro dovrà eseguire.
Tutto quello contenuto nelle parentesi graffe dopo la main()  fa parte della funzione main(). Ovvero il punto di ingresso da cui ogni programma in C inizia la sua esecuzione.

L'istruzione for(;;) è seguita anch'essa da una coppia di parentesi graffe ed indica che tutte le istruzioni all'interno di queste parentesi verranno eseguite a ciclo continuo.

All'interno di questo ciclo vengono eseguite due gruppi di istruzioni:

delay_ms(1000);
output_high(LED_ROSSO);
output_low(LED_VERDE);

e

delay_ms(1000);
output_low(LED_ROSSO);
output_high(LED_VERDE);

L'istruzione delay_ms(1000); si occupa di inserire un semplice ritardo software di 1000mS (1 secondo).

L'istruzione  output_high(LED_ROSSO); mette a 1 (5 volt) la linea LED_ROSSO corrispondente al pin RC0 del PICmicro. Questo provoca l'accensione del led rosso.
L'istruzione  output_low(LED_ROSSO); la mette invece a 0 (0 volt) causando lo spegnimento del led rosso.

La stessa cosa viene fatta per il led verde.

Esempio 2 - Input da una linea in ingresso

Vediamo ora come leggere lo stato di una linea di ingresso. Modifichiamo lo schema dell'esempio 1 aggiungendo un pulsante sulla linea RC2 ed una resistenza di pull up come visibile nello schema seguente:

La resistenza di pull up R3 serve a mantenere a 5 volt la linea di ingresso RC2. Se venisse omessa questa resistenza avremmo, sulla linea di ingresso RC2,  una condizione logica indefinita che renderebbe instabile il funzionamento del nostro programma.

Inseriamo il seguente codice C:

#include <18F452.h>
#use Delay(Clock=10000000)
#fuses HS,NOWDT,NOPROTECT,NOLVP

#define LED_ROSSO PIN_C0
#define LED_VERDE PIN_C1
#define S1        PIN_C2

void main(void) { 
  for (;;) {   
    if (input(S1)) {
      output_high(LED_ROSSO);   
      output_low(LED_VERDE);   
    } else {
      output_low(LED_ROSSO);   
      output_high(LED_VERDE); 
    } 
  }
}

 

Scopo di questo codice è riportare sui LED lo stato del pulsante S1 nel seguente modo:

  • Led rosso accesso e led verde spento se il pulsante S1 è rilasciato
  • Led rosso spento e led verde acceso se il pulsante S1 è premuto

Nella sezione iniziale del nostro codice abbiamo aggiunto la direttiva #define S1 PIN_C2 con cui assegnamo il nome del tasto S1 alla linea RC2 del PICmicro.
Nel loop infitito for(;;) abbiamo inserito l'operatore condizionale if il quale ci permette eseguire porzioni di codice distinte in base allo stato del pulsante S1.

Per rilevare lo stato del pulsante abbiamo utilizzato l'istruzione input(S1) la quale ritorna 1 se sulla linea di ingresso S1 (la linea RC2 del PICmicro) ci sono 5 volt e 0 se invece ci solo
0 volt. In C lo 0 viene interpretato come valore logico falso mentre qualsiasi altro valore viene interpretato come vero.

Nella if, quindi, vengono eseguite le seguenti istruzioni se il tasto è rilasciato (Linea S1 a 5 volt, valore di ritorno 1 = vero):

      output_high(LED_ROSSO);   
      output_low(LED_VERDE);   

 

E le seguenti se viene premuto (Linea S1 a 0 volt, valore di ritorno 0 = falso)

      output_low(LED_ROSSO);   
      output_high(LED_VERDE); 
 

Documentazione tecnica ed articoli relativi al modulo EE01

  • L'ambiente di sviluppo per EE01
    In questo articolo viene illustrato come installare l'ambiente di sviluppo standard MPLAB 6.xx ed il programmatore/debugger ICSP Microchip ICD2 consigliati per sviluppare applicazioini per il modulo EE01 
  • CCS-C per PICmicro serie 18
    PCH è una versione economica del compilatore CCS C, dotata della stessa potenza delle versioni piu' costose, ma limitato a generare codice eseguibile per i soli PICmicro della famiglia 18. Il PCH non dispone di una propria interfaccia IDE ma si integra perfettamente con l'interfaccia IDE standard MPLAB ed il programmatore debugger ICD 2 della Microchip consentendo cosi' di ottenere ottimo ambiente integrato ad un prezzo bassissimo. Ottimo per lo sviluppo di applicazioni per il modulo M2M EE01
  • Alimentazione e programmazione ICSP
    Schema elettrico di base per fornire alimentazione al modullo EE01 e consentirne la programmazione in circuit
  • Stringhe di connessione GPRS
    Elenco delle stringhe di connessione per l'accesso alla rete GPRS in modalita Easy GPRS su Wind, Vodafone e Tim
  • Piedinatura modulo EE01

Esempi di programmazione in C

Documentazione tecnica ed articoli relativi al modem GM862-GSM-GPRS-PCS

  • Telit GM862 Product Description Documento in formato PDF di 200 pagine in cui vengono descritti i modem Telit GM862 nelle versioni GSM, GPRS e PCS. Più di 130 pagine sono dedicate ai soli comandi HAYES (AT+) per la gestione del modem
  • Telit GM862 Software User Guide Documento in formato PDF di 122 pagine in cui vengono forniti esempi pratici di gestione del modem tramite comandi Hayes
  • EASY GPRS © White Paper L'EASY GPRS è una modalità operativa implementata sui modelli GPRS di Modem Telit GM862 che consente di effettuare connessioni TCP/IP su rete GPRS tramite semplici comandi AT. Questo breve documento descrive le caratteristiche fornite da questa modalità

Documentazione relativa al PICmicro 18F452

Documentazione tecnica ai tool di programmazione per PICmicro 18F452

Altri link utili


Segnala questo articolo: 



Parole chiave: - PIC -

Data di pubblicazione: 30-09-2004Hits: 34612
I marchi citati sono propriet� dei titolari dei relativi diritti. Le caratteristiche tecniche e i prezzi riportati sono indicativi e soggetti a variazioni senza preavviso. Le foto non hanno valore contrattuale. Nonostante accurate verifiche, il presente documento pu� contenere prezzi o specifiche errati. Area SX si scusa in anticipo e si impegna ad evitare tali imprecisioni.

 Area SX store
In questa sezione puoi ordinare direttamente i prodotti descritti in questo articolo
EE01.GPRS;EE01.NOMODEM
Tutti i prezzi indicati sono espressi in Euro con IVA e spese di trasporto escluse. I prezzi si riferiscono al singolo pezzo
DescrizioneCodicePrezzo

Rivenditori Social Contatti Condizioni
Area SX s.r.l
Via Stefano Longanesi 25
00146 Roma

Tel: +39.06.99.33.02.57
Fax: +39.06.62.20.27.85
P.IVA 06491151004
Condizioni di vendita
Procedura di rientro in garanzia
Condizioni per i rivenditori