Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date:...

16
NA – L12 1 Corso introduttivo sui microcontrollori A. S. 2007 – 2008 Programmare i PIC in C Accendiamo 8 Led in sequenza – Leggere lo stato di un PIN Esempi: Led Flasher v1 e v2 Nicola Amoroso [email protected] http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/ http://www.mrscuole.net/anxapic/

Transcript of Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date:...

Page 1: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 1

Corso introduttivo sui microcontrollori

A. S. 2007 – 2008

Programmare i PIC in CAccendiamo 8 Led in sequenza – Leggere lo stato di un PIN

Esempi: Led Flasher v1 e v2

Nicola [email protected]

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 2: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 2

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza

Sviluppiamo il nostro secondo semplice esercizioLed Flasher

Accendiamo 8 led in sequenza con ritardo di 500 ms

Ricordiamo i punti fondamentali di sviluppo per:

Analisi, progettazione e stesura del progetto

1. Analisi e stesura per punti cronologici del problema con definizione dell’HW

2. Flow – Charts3. Scrittura del codice4. Simulazione opportuna5. Programmazione Controllore e verifica su demoBoard

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 3: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 3

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza

1. Analisi e stesura per punti cronologici del problema con definizione dell’HW

Il problema è alquanto semplice, si vogliono accendere, in sequenza, otto led collegati ad esempio sulla PORTDdel nostro microcontrollore; il ritardo di accensione per ogni singolo led è di 500 ms. L’hardware è alquantosemplice ed è facile definire il relativo schema elettrico.

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 4: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 4

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza

2. Il flow-chart

In questo esempio utilizziamo una tecnica già vista in precedenza nellaprogrammazione in assembler. Definiamo delle maschere di 8 bit in cui ogni bitrappresenta lo stato del led collegato al relativo PIN; bit alto => led acceso, bitbasso => led spento.; ad esempio 0x80 = 1000 0000 => corrisponde a Led 8acceso e gli altri led tutti spenti e così via.Il relativo flow-chart è presto implementato:

Definiamo un array con le maschere corrispondenti allo stato dei singoli Led

Indice array

Devi ancora accendere un Led?

In uscita la sequenza opportuna

Attendi 500 ms

Incrementa indice array

Le 9 maschere definite nell’array Led

L8 L7 L6 L5 L4 L3 L2 L1

0 0 0 0 0 0 0 00 0 0 0 0 0 0 10 0 0 0 0 0 1 00 0 0 0 0 1 0 00 0 0 0 1 0 0 0... … … … … … … …0 1 0 0 0 0 0 01 0 0 0 0 0 0 0

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 5: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 5

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza

3. Il codice sorgente

Il Pic Wizard tool del CCS Pic-C Compiler agevola notevolmente la inizializzazione di un nuovo progetto e ilrelativo setup hardware del microcontrollore utilizzato.

I commenti di un codice sorgenteaiutano nella comprensibilità delprogramma.

E’ buona norma inserirecommenti per “lasciare unatraccia comprensibile” delcodice prodotto.

Questo file è generato inautomatico dal Pic Wizard toolnella fase di creazione einizializzazione del progetto.

Il codice generato viene inclusonel main programma

Il codice incluso nel main program

Il main program

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 6: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 6

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza

3. Il codice sorgente

Il main program

Il ciclo “for(i=0; i<9; i++)” verifica e controlla queste condizioni

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 7: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 7

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza

4. La simulazione con Proteus VSM 5. La verifica su demoBoard

Compiliamo il codice sorgente [Compile in CCS PCWH Pic-C Compiler]. Verifichiamo il tutto con Proteus VSM,dovrebbe essere tutto OK! (ricordiamoci che in ambiente Isis-Proteus dobbiamo utilizzare il file “.cof “ per i collegamenti con il filesorgente in fase di debug).

Tutto OK?

Verifichiamo il lavoro programmando il

microcontrollore sulla nostra demo-Board e collegando il gruppo

resistenze-led (montato su breadBoard) sul bus

di espansione della stessa.

Il nostro progetto è stato felicemente

implementato!

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 8: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 8

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

Sviluppiamo il nostro secondo semplice esercizioLed Flasher v2

Accendiamo 8 led in sequenza con ritardo di 500 ms, il verso di accensione dei led (sinistra => destra o destra => sinistra) è definito dallo stato logico ai capi di un pulsante collegato in ingresso su un PIN del

nostro microcontrollore

Ricordiamo i punti fondamentali di sviluppo per:

Analisi, progettazione e stesura del progetto

1. Analisi e stesura per punti cronologici del problema con definizione dell’HW

2. Flow – Charts3. Scrittura del codice4. Simulazione opportuna5. Programmazione Controllore e verifica su demoBoard

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 9: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 9

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

1. Analisi e stesura per punti cronologici del problema con definizione dell’HW

L’esercizio è simile a quello precedente, l’unica novità è la presenza del pulsante collegato in ingresso di un PINdel microcontrollore (es. PIN RB1) il cui stato logico definirà il verso di accensione dei nostri 8 led.

Il pulsante P1 ècollegato con Pull-Upattivo sul PIN RB1 delnostro controllore.

P1 chiuso: livellologico su RB1 basso(L)

P1 aperto: livellologico su RB1 alto(H)

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 10: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 10

2. Il flow-chart

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

In questo esempio per la sequenza di accensione utilizziamo lamodalità di scorrimento [operatore << (scorrimento sinistra),operatore >> (scorrimento destra)] di una variabile.<<<<<<< Scorrimento verso sinistraEs: Leds = = 0x01; Leds = 0000 0001 Val inizialeLeds =Leds << 1; Leds = 0000 0010 scorr sx 1 posizLeds =Leds << 1; Leds = 0000 0100 scorr sx 1 posizLeds =Leds << 1; Leds = 0000 1000 scorr sx 1 posizLeds =Leds << 1; Leds = 0001 0000 scorr sx 1 posizLeds =Leds << 1; Leds = 0010 0000 scorr sx 1 posizLeds =Leds << 1; Leds = 0100 0000 scorr sx 1 posizLeds =Leds << 1; Leds = 1000 0000 scorr sx 1 posizLeds =Leds << 1; Leds = 0000 0000 scorr sx 1 posiz

>>>>>>>> Scorrimento verso destraEs: Leds = = 0x80; Leds = 1000 0000 Val inizialeLeds =Leds >> 1; Leds = 0100 0000 scorr dx 1 posizLeds =Leds >> 1; Leds = 0010 0000 scorr dx 1 posizLeds =Leds >> 1; Leds = 0001 0000 scorr dx 1 posizLeds =Leds >> 1; Leds = 0000 1000 scorr dx 1 posizLeds =Leds >> 1; Leds = 0000 0100 scorr dx 1 posizLeds =Leds >> 1; Leds = 0000 0010 scorr dx 1 posizLeds =Leds >> 1; Leds = 0000 0001 scorr dx 1 posizLeds =Leds >> 1; Leds = 0000 0000 scorr dx 1 posiz

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 11: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 11

2. Il flow-chart

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

Per definire il funzionamento si eseguono i seguenti steps:

1. System Set e definizione variabili

2. Leggi stato logico PIN RB1 (Pulsante P1)

3. Init variabile da inviare in uscita su PORTD

4. Invia valore su PORTD

5. Scorrimento verso Sx (Dx) della variabile da inviare in uscita

6. Controlla se tutti e 8 i leds sono stati accesi , se si torna a punto 2.

7. Altrimenti continua da punto 4.

N.B. => Le operazioni di accensione e scorrimento devono essereripetute per 9 volte in quanto oltre allo stato di accensione degli 8leds vi è anche lo stato in cui tutti e 8 i leds sono spenti

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 12: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 12

3. Il codice sorgente - Parte 1

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

Il Pic Wizard tool del CCS Pic-C Compiler agevola notevolmente la inizializzazione di un nuovo progetto e ilrelativo setup hardware del microcontrollore utilizzato. In seguito questa fase automatica verrà trascuratanell’analisi del codice sorgente

Definiamo P1 come riferimento per il PIN_B1 (RB1) del Microcontrollore

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 13: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 13

3. Il codice sorgente - Parte 2

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

Definiamo le condizioni hardware del Microcontrollore e le variabili in uso

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 14: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 14

3. Il codice sorgente - Parte 3

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

Questa parte di codice controlla il livello logico sul PIN RB1 e in funzione del suo valore si accendono i led da sinistra verso destra o viceversa.

N.B. => Built-In function CCS PCWH Pic-C CompilerInput(Pin_xx) Legge lo stato del livello logico associato al Pin_xxOutput_X(xxx) Scrive su PORTX il valore xxxDelay_ms(xxx) Ritardo di xxx millisecondi

Ulteriori informazioni sul CCS PCWH Pic-C manual o help on line del compilatore

Scorrimento Sx => Dx

Scorrimento Dx => Sx

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 15: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 15

4. La simulazione con Proteus VSM 5. La verifica su demoBoard

Compiliamo il codice sorgente [Compile in CCS PCWH Pic-C Compiler]. Verifichiamo il tutto con Proteus VSM,dovrebbe essere tutto OK! (ricordiamoci che in ambiente Isis-Proteus dobbiamo utilizzare il file “.cof “ per i collegamenti con il filesorgente in fase di debug).

Tutto OK?

Verifichiamo il lavoro programmando il

microcontrollore sulla nostra demo-Board e collegando il gruppo

resistenze-led (montato su breadBoard) sul bus

di espansione della stessa.

Il nostro progetto è stato felicemente

implementato!

Programmare i microcontrollori in linguaggio CAccendiamo 8 Led in sequenza con verso di accensione definito dallo stato di un Pulsante

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

Page 16: Lez12 · 2008. 4. 9. · Microsoft PowerPoint - Lez12.ppsx Author: Amministratore Created Date: 4/8/2008 7:52:03 PM ...

NA – L12 16

2 Led vengono accesi singolarmente a seconda del livello logico presente ai capi di un pulsante

collegato su un PIN del microcontrollore. [Suggerimento => Led collegati su RD2 e RD3 –

Pulsante su RB1 – Pulsante chiuso Led1 acceso e Led2 spento, Pulsante aperto Led1 spento e

Led2 acceso]

Sviluppare l’esercizio seguendo le semplici fasi di sviluppo:

1. Analisi del problema, schematizzazione a blocchi (se necessario), con schema elettrico

finale operativo

2. Impostazione del Software e relativo Flow – Chart

3. Codice sorgente in linguaggio C [CCS Pic PCWH Compilator]

4. Simulazione in ambiente Proteus VSM interfaccia ISIS

5. Presentazione del lavoro finale su demo-Board opportuna (Gp_Mbus …. AnxaPic4)

6. Opportuna documentazione conclusiva

Programmare i microcontrollori in linguaggio CUn esercizio proposto

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/

http://www.mrscuole.net/anxapic/