2. Che cosa sono?
I microcontrollori sono “piccoli computer” in un unico dispositivo e
sono utilizzati in applicazioni specifiche ( General Porpose )
● Controllo dispositivi
● Domotica
● Sistemi di sicurezza
● LCD e Touch Screen
3. Differenze tra Microprocessori e Microcontrollori
I microcontrollori hanno miglior
capacità di gestione dell’I/O e
dell’interrupt.
I microprocessori hanno miglior
capacità di elaborazione delle
informazioni.
4. Architettura interna
I microcontrollori sono formati da:
● CPU, parte centrale del dispositivo
predisposta al controllo.
● Memoria per il programma
● Memoria per i dati
● Timer
● Periferiche I/O
5. Architettura interna
Memoria per il programma
1. Tipo FLASH
2. Estensione di 1024 locazioni di 14 bit ciascuna
3. Ogni locazione è distinta da un indirizzo
esadecimale ( 000h - 3FFh )
4. 8 locazioni riservate allo STACK ( contiene l’
indirizzo di ritorno delle subroutine )
5. All’avvio il Program Counter punta all’indirizzo
000h ( Contiene il primo codice del
programma )
6. Architettura interna
Memoria per i dati
Costituita da due parti:
1. EEPROM, con estensione di 64 locazioni di un
byte
2. RAM ( file register ), divisa in due banchi
a. Banco 0 formato da 80 locazioni di un
byte ciascuna ( 00h - 3Fh )
b. Banco 1 formato da 12 locazioni di un
byte ciascuna ( 80h-0Bh )
7. Architettura interna
Periferiche I/O
1. Porte I/O
2. ADC ( Analog Digital Converter ), per acquisire
segnali analogici
3. Comparatori, per il confronto tra due tensioni
4. Muduli CCP ( Capture Compare PWM )
5. I/O Seriale, per collegare il seriale al
microcontrollore con dispositivi esterni
8. File Register
Nella memoria RAM vi sono due tipi di
locazioni:
● Registri specializzati, riservati a particolari
funzioni non usabili dall’operatore
● Registri di uso generale, a dispozione dell’
utente
9. File Register: PORTA (05h) PORTB (06h)
In questi due registri vengono posti:
● I dati che debbono essere inviati alle singole linee della PORTA o della
PORTB
● I dati che provengono dall’esterno
10. File Register: TRISA (05h) TRISB (06h)
I singoli bit dei registri TRISA e TRISB servono per determinare quale linea della
PORTA e PORTB va considerata come input e quale come output:
● Bit posto a 1: Input
● Bit posto a 0: Output
11. File Register: STATUS (03H)
Il bit più importante del registro STATUS è il numero 5 (RP0) e permette di
selezionare il banco di memoria utilizzato:
● RP0 = 0 , banco 0
● RP0 = 1 , banco 1
12. File Register: OPTION (80h)
Tale registro permette di fare varie configurazioni di sistema:
● T0CS (Bit 5), permette di selezionare la sorgente per il segnale di clock del
timer (T’CS=0 clock interno, T0CS=1 clock esterno)
● PSA (Bit 3), permette di assegnare il prescaler al timer TMR0 ( PSA=0 ) o
al watch-dog timer WDT ( PSA=1 )
13. File Register: INTCON ( 8Bh )
Il registro INTCON serve per la gestione degli interrupt, GIE è il bit numero 7 ed
è il più importante:
● GIE = 0, Interrupt disabilitato
● GIE = 1, Interrupt abilitato
14. File Register: TMR0 ( 01h )
E’ un timer interno al microcontrollore a 8 bit che
permette di fare precise temporizzazioni.
E’ possibile utilizzare un timer esterno.
Ad ogni timer è possibile associare un prescaler
(divisore di frequenza).
Esso genera un reset ad un intervallo prestabilito
in fase di programmazione. Questo avvio ciclico
permette di riscontrare situazioni di stallo.
15. Catena di programmazione
I microcontrollori possono essere programmati in Assembly, Pascal e C.
MicroC è un IDE (ambiente di sviluppo) che ci permette di semplificare la
catena di programmazione, in quanto esso svolge le seguenti azioni:
● Compila le istruzioni inserite, ottenendo un file oggeto ( .obj )
● Effettua il link con le librerie
● Trasforma il programma ottenuto dal linker in Assembly e poi in
Esadecimale ( Hex )
● Trasforma il codice esadecimale in codice binario
16. Proteus
Proteus è un programma per la progettazione e la simulazione di circuiti
elettronici. Esso è costituito da due parti:
● ISIS, ambiente di progettazione e simulazione dei circuiti grazie alla
presenza di una libreria in cui vi sono tutti i componenti e la
strumentazione necessaria (Es. generatore di funzione, oscilloscopio,
multimetro)
● ARES (PCB-Designer), per realizzare lo schema PCB dei circuiti
17. Relazione tra MicroC e Proteus
Per simulare il funzionamento dei microcontrollori bisogna seguire i seguenti
passaggi:
1. Realizzazione dello schema del circuito tramite Proteus
2. Scrittura del codice relativo al microcontrollore in MicroC ed effettuando il
building
3. Caricamento del codice nel microcontrollore in Proteus
19. MicroC: Led ad intermettenza
void main() {
PORTA=0; /* Porto a la Porta A a zero logico*/
TRISA=0; /* inizializzo la Porta A come uscita*/
while(1) /* ciclo sempre vero*/
{
PORTA=~PORTA; /* complemento a uno della Porta A*/
delay_ms(500); /* delay time di 500ms*/
}
}
Le istruzioni PORTA=0 e TRISA=0 servono per configurare la PORTA come
uscita.
Successivamente viene effettuato il complemento a uno della PORTA in modo
tale che cambi stato (led spenti si accendono e viceversa) con un delay time di
500 ms, tutto questo è inserito in un ciclo infinto, in modo da realizzare l’
intermittenza dei led.
21. MicroC: Led a scalata
void main() {
PORTA=0; /* Porto a la Porta A a zero logico*/
TRISA=0; /* inizializzo la Porta A come uscita*/
while(1) /* ciclo sempre vero*/
{
delay_ms(500); /* delay time di 500ms*/
PORTA.f0=~PORTA.f0; /* complemento a uno del bit 0 della Porta A*/
delay_ms(500);
PORTA.f1=~PORTA.f1;
delay_ms(500);
PORTA.f2=~PORTA.f2;
delay_ms(500);
PORTA.f0=0;
PORTA.f1=0;
PORTA.f2=0;
}
}
All’interno del ciclo infinito, con un delay time di 500 ms viene effettuato il
complemento ad uno delle singole linee della PORTA (RA0 si ottiene con
PORTA.f0) in modo tale che cambi stato. Successivamente tutte le linee
vengono resettate ed il ciclo si ripete.
22. MicroC: Istruzioni per programmare un LCD
Istruzioni utili:
1. Lcd_Init() per aprire la libreria di
un LCD;
2. Lcd_Out(riga,colonna,”testo”)
mette in output il testo richiesto
3. LCD_SHIFT_LEFT/RIGHT per
far scorrere il testo ella direzione
desiderata
23. MicroC: Istruzioni per programmare un LCD
// Settaggio dei pin del LCD
sbit LCD_RS at RB0_bit;
sbit LCD_EN at RB1_bit;
sbit LCD_D4 at RB2_bit;
sbit LCD_D5 at RB3_bit;
sbit LCD_D6 at RB4_bit;
sbit LCD_D7 at RB5_bit;
// Direzione dei pin
sbit LCD_RS_Direction at TRISB0_bit;
sbit LCD_EN_Direction at TRISB1_bit;
sbit LCD_D4_Direction at TRISB2_bit;
sbit LCD_D5_Direction at TRISB3_bit;
sbit LCD_D6_Direction at TRISB4_bit;
sbit LCD_D7_Direction at TRISB5_bit;
void main() {
char i;
while(1)
{
Lcd_Init();
Lcd_Out(1,16,
"Classe 4AT");
delay_ms(500);
for(i=0;i<32;i++)
{
Lcd_Cmd
(_LCD_SHIFT_LEFT);
Lcd_Cmd
(_LCD_CURSOR_OFF);
delay_ms(200);
}
}
}