Anteprima
Vedrai una selezione di 5 pagine su 18
Tesina sul PicMicro Pag. 1 Tesina sul PicMicro Pag. 2
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Tesina sul PicMicro Pag. 6
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Tesina sul PicMicro Pag. 11
Anteprima di 5 pagg. su 18.
Scarica il documento per vederlo tutto.
Tesina sul PicMicro Pag. 16
1 su 18
Disdici quando vuoi 162x117
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Sintesi
Elettronica - Il Pic Micro
Informatica - Firmware
Inglese - Breve descrizione dei PIC
Storia - Nasciata dei Controller
Estratto del documento

Quali sono i linguaggi di programmazione che si possono

utilizzare nei PICMicro?

Il linguaggio di programmazione predefinito dei PICMicro è l’assembler. L’assembler è

sicuramente un modo molto potente di gestire il nostro microcontrollore ma non è certo il più

semplice da apprendere. Per programmare in assembler bisogna avere prima di tutto una profonda

conoscenza dell’architettura interna del PICMicro che stiamo utilizzando e una mente davvero

molto elastica: realizzare le cose in assembler richiede spesso davvero molte righe di codice, che

magari in C vengono scritte in maniera molto più semplice e/o intuitiva. Ma l’assembler in alcuni

rari casi è davvero necessario. Le istruzioni assembler disponibili per ogni PICMicro sono

contenute nel suo Datasheet, così come la descrizione della segmentazione della memoria e di tutte

le funzioni.

Il linguaggio, però, più semplice per la programmazione dei PicMicro è il C. I linguaggi C che

all’assembler e al C, esistono anche il Basic

seguono gli standard vengono chiamati ANSI-C. Oltre

e di recente anche il Pascal.

Quale programmatore utilizzare?

Personalmente mi sono servito di uno strumento ideato dalla Microchip: il PICKit2 (oggi giunto alla

versione 3):

Tale programmatore oltre a presentare il netto vantaggio di essere davvero piccolo e funzionante su

USB senza alimentazioni aggiuntive, ha anche altri lati positivi: costa poco, il firmware è

aggiornabile, lo si può utilizzare anche come tester per segnali digitali e ha un suo software di

programmazione realizzato dalla stessa Microchip.

Molti altri PicMicro hanno anche disponibile la funzione LVP (Low Voltage Programming) che

permette la programmazione a basso voltaggio (ovvero non dovremo più fornire i 13.5 V sul pin

ma richiede per la programmazione l’utilizzo di un pin aggiuntivo

MCLR ma soltanto 5V)

(contrassegnato come PGM, normalmente non utilizzato per la programmazione standard).

Altra buona modalità di programmazione di alcuni PIC è quella tramite BootLoader: si programma

per la prima volta il PIC in maniera normale, inserendo al suo interno un programma particolare che

prende il nome di Bootloader, che occupa poco spazio. Le volte successive, quando dobbiamo

riprogrammarlo, si farà utilizzo unicamente della porta seriale del PC: sarà il PIC, tramite le

funzioni svolte dal Bootloader, a capire se si deve mettere in modalità di programmazione oppure in

modalità di esecuzione programma. 4

Timer0 e Prescaler: cosa sono?

Una periferica sempre presente in tutti i PICMicro è il Timer0. Il Timer0 è un semplice contatore

ad 8 bit, il suo conteggio viene incrementato automaticamente di 1 (essendo ad 8 bit va da 0 a 255)

ad ogni ciclo di istruzioni.

Il ciclo di istruzioni in un PICMicro è pari alla frequenza di clock divisa per 4: ciò equivale a dire

che una singola istruzione (parliamo però di istruzioni assembler=linguaggio macchina e non di

istruzioni C) viene eseguita in 4 cicli di clock: indicando con Fosc la frequenza di clock (la

frequenza del quarzo o dell’oscillatore in genere), la frequenza di un ciclo di istruzioni è quindi pari

a Fosc/4.

In realtà, anche se la maggior parte delle istruzioni rispetta questa regola, ve ne sono alcune che

richiedono più di 4 cicli di clock per essere eseguite, ma per ora soprassediamo su questo

argomento. Quello che ci interessa sapere è che il Timer0 si incrementa di 1 unità ogni 4 colpi di

clock, ovvero con una frequenza di Fosc/4: se stiamo utilizzando un quarzo da 20Mhz, la frequenza

è l’inverso del

di esecuzione delle istruzioni è pari a 20/4 = 5MHz, sappiamo che la frequenza

eseguita nel tempo di 1/5 = 0,2 μS.

tempo (periodo) e per cui ogni istruzione sarà

Il Prescaler altro non è che un divisore di frequenza, ci permette cioè di dividere la frequenza (la

velocità) del nostro ciclo di istruzioni (Fosc/4) in valori più piccoli, facendoci ottenere tempi di

esecuzione più alti e quindi più facilmente gestibili o in ogni caso impostabili sui valori che

desideriamo. Ovviamente il prescaler non influisce sulla velocità di esecuzione di tutte le istruzioni,

le istruzioni continueranno ad essere eseguite ad una velocità di Fosc/4: esso difatti influisce

unicamente sull’incremento del Timer0.

I valori su cui possiamo impostare il prescaler (ovvero il divisore) sono : 2, 4, 8, 16, 32, 64, 128,

256. Come vedete il valore di 1 non è presente: in questo caso basta semplicemente non assegnare il

prescaler al Timer0. Interfaccia con LCD

è sicuramente un’interfaccia molto interessante e utile nei progetti utilizzanti i

Un display LCD

microcontrollori, questo perché può visualizzare una grande varietà di informazioni e rendere

quindi le cose più semplici agli utilizzatori per la creazione di menù, interfacce utente ecc. 5

I display più comuni sono quelli basati sull’arcinoto controller HD44780 prodotto dalla Hitachi.

“esterne”,

I display utilizzanti tale controller sono costruiti con varie caratteristiche tra le quali il

numero di righe e il numero di caratteri (o colonne) che il display è in grado di visualizzare (i più

diffusi sono i display 16×2 : 2 righe, ognuna delle quali può visualizzare 16 caratteri) e la

colorazione della retroilluminazione (la più comune è quella verde con caratteri neri, ma è molto

diffusa anche la retroilluminazione blu con caratteri bianchi o nera con caratteri bianchi).

Funzionamento dei display basati su controller HD44780 o compatibile

Vediamo innanzitutto come si presenta esternamente un classico display lcd 16×2:

Partiamo col dire che NON tutti i display presentano la piedinatura disposta in questo modo, anche

se questa è la più comune.

Di questi 16 pin, 14 sono per il funzionamento del display e i rimanenti 2 servono per la

retroilluminazione (che avviene mediante una matrice di led). Generalmente i due pin destinati alla

retroilluminazione sono gli ultimi 2: il 15 è collegato all’anodo, e richiede 4,2V, e il 16 è il catodo,

e quindi va a massa.

Su alcuni display i pin di retroilluminazione si trovano in posizione 1 e 2.

piedinatura “classica” è la seguente:

La Pin Denominazione Descrizione

1 Vss o Gnd Massa

2 Vcc +5V

3 Vo Regolazione contrasto

4 RS Register Select (selezione dati/istruzioni)

5 R/W Read/Write

6 E Enable (Abilitazione) 6

7 D0 Linea Dati, bit 0

8 D1 Linea Dati, bit 1

9 D2 Linea Dati, bit 2

10 D3 Linea Dati, bit 3

11 D4 Linea Dati, bit 4

12 D5 Linea Dati, bit 5

13 D6 Linea Dati, bit 6

14 D7 Linea Dati, bit 7

15 A Anodo Retroilluminazione (+4.2V)

16 K Catodo Retroilluminazione (Massa)

La libreria per il pilotaggio dell’LCD

La libreria (lcd.c) è necessaria per utilizzare un display LCD.

Tale libreria comprende numerose utili funzioni, basterà semplicemente includerla nel nostro

programma nel modo consueto:

#include "lcd.c"

Le funzioni disponibili sono:

LCD_INIT();

Serve ad effettuare l’inizializzazione del display, va richiamata una solta volta e prima di qualsiasi

altra funzione, altrimenti il display non sarà in grado di operare.

LCD_CLEAR();

Effettua la pulizia del display, ovvero cancella il contenuto della DDRAM e porta il cursore nella

prima posizione (riga 1, colonna 1).

LCD_CMD(char);

Invia un comando al display, tale funzione viene utilizzata, ad esempio, da LCD_CLEAR e da altre;

è anche possibile inviare comandi personalizzati, come ad esempio i codici numerici associati ai

vari entry mode, sarà comunque una funzione molto poco sfruttata direttamente.

LCD_GOTO(riga,colonna); 7

Posiziona il cursore per la scrittura alla riga e alla colonna specificata. La numerazione è in base 1,

per cui scrivendo:

LCD_GOTO(1,1);

il cursore si posizionerà alla prima riga, prima colonna.

LCD_PUTCH(char);

Scrive un unico carattere sul display, char ovviamente può essere immesso in qualsiasi formato

numerico (decimale, binario -anteponendo come sempre 0b-, esadecimale -anteponendo 0x- o

il carattere tra singoli apici ”-),

formato carattere -scrivendo è utile per scrivere quei caratteri che

non hanno corrispondenza del codice ascii sulla tastiera: basta avere sottomano la tabella con

l’elenco dei codici carattere del controller che abbiamo a disposizione sull’LCD. Esempio:

LCD_PUTCH(0b11110valore3); //scrive il simbolo omega

LCD_PUTS(“stringa”);

Scrive una stringa intera sul display. Se ci posizioniamo alla prima colonna della prima riga, e

abbiamo a disposizione un LCD 16×2 e in tale stringa scriviamo una parola superiore ai 16

caratteri, ovviamente i caratteri dal diciassettesimo in poi non saranno visibili, per cui stiamo attenti

quando utilizziamo questa funzione se non vogliamo avere effetti indesiderati sul display. Esempio:

LCD_PUTS("Ciao");

LCD_PUTUN(numero);

Scrive un numero privo di segno sul display, come numero sono accettati il formato CHAR (8bit) o

INT (16 bit), per cui sono ammessi numeri interi da 0 fino a 65535.

LCD_PUTSN(numero);

Scrive un numero compreso di segno. Per numeri positivi il segno non viene rappresentato, per

numeri negativi, viene anteposto il segno meno davanti al numero. Supporta sia CHAR che INT in

accettando un numero “signed” i valori ammissibili vanno da

ingresso, ovviamente -32768 a 32767.

8

Schemi di montaggio

-Alimentatore 5V (Trasformatore 220V-5V)

D1 VR1 7805

Vin Vout +5V

T1 2 1 GND

V+

AC C1 C2 C3

220V , 50 Hz 1000uF, 25V 10uF, 25V

AC 470uF, 25V

V-

4 3

Trasformatore 220V/12V

-Allarme Vcc

C2 R1 R2 R3 R4 R5 R6

Vcc U1

1 20

LED1 Vcc VDD VSS SW1

R7 2 19

RA5 RA0 SW2

R8 3 18

RA4 RA1

LED2 SW3

R9 4 17

RA3 RA2

BZ1 BUZZER 5 16

RC5 RC0

-

Vcc + Q1 6 15

RC4 RC1

R10 7 14

RC3 RC2 P1

8 13

LED3 RC6 RB4 P2

9 12

RC7 RB5 P3

R11 10 11

LED4

Vcc RB7 RB6

Q2 PIC 16F690

R12 R13 LED5 R14 Vcc

LED6

Q3 LCD1 DISPLAY LCD

9 8 7 6 5 4 3 2 1

16 15 14 13 12 11 10 Vcc Vcc R15

Vcc R16 9

Elenco componenti allarme

Riferimento Valore - Sigla - Descrizione

BZ1 BUZZER

C2 Condensatore 100 nF

LCD1 Display LCD 16x2

LED1 LED giallo

LED2 LED giallo

LED3 LED rosso

LED4 LED rosso

LED5 LED verde

LED6 LED verde

P1 Pulsante normalmente aperto

P2 Pulsante normalmente aperto

P3 Pulsante normalmente aperto

Q1 Transistor NPN C546B

Q2 Transistor NPN C546B

Q3 Transistor NPN C546B

10 KΩ

R1 Resistenza 10 KΩ

R2 Resistenza 10 KΩ

R3 Resistenza 10 KΩ

R4 Resistenza 10 KΩ

R5 Resistenza 10 KΩ

R6 Resistenza 220 Ω

R7 Resistenza 220 Ω

R8 Resistenza 10 KΩ

R9 Resistenza 4.7 KΩ

R10 Resistenza 100 Ω

R11 Resistenza 4.7 KΩ

R12 Resistenza 4.7 KΩ

R13 Resistenza 100 Ω

R14 Resistenza

5 KΩ

R15 Trimmer 5 KΩ

R16 Trimmer

SW1 SW-SPST

SW2 SW-SPST

SW3 SW-SPST

U1 PIC 16F690 10

Come si presentano

-Alimentatore 5V (Trasformatore 220V-5V)

-Allarme 11

PIC-ENGLISH

A microcontroller is a much more elaborate device than a microprocessor. A microprocessor is a

chip designed solely to perform calculations. A microcontroller contains an internal microprocessor

(CPU), plus many other devices that allow them to interact with the outside world, lines of

communication, a bit of memory to store data and programs, converters analog / digital etc.. So, a

microcontroller is in fact a complete computer system within an integrated circuit and we can

change the definition of the acronym PIC with "Programmable Intelligent Computer" even if the

classical definition is "Programmable Interface Controller ". When we speak about PICs and

PicMicros we refer to integrated circuits produced by a Microchip, but there is a wide variety of

microcontrollers, each one different in architecture, development, programming languages, costs,

etc..

A generic microcontroller is also identified with the initials MCU (Micro Controller Unit - Unit

microcontroller).

The PIC microcontrollers have a RISC architecture (Reduced Instruction Set Computer), in fact

those MCUs can perform all their functions by relying to a reduced set of instructions (between

35 and 77 instructions). 12

Il linguaggio C

Il C è un linguaggio di programmazione ad alto livello.

Il C è rinomato per la sua efficienza, e si è imposto come linguaggio di riferimento per la

realizzazione di software di sistema su gran parte delle piattaforme hardware moderne. La

standardizzazione del linguaggio (da parte dell'ANSI prima e dell'ISO poi) garantisce la portabilità

Dettagli
Publisher
18 pagine
5 download