Microcontrollori
-
Upload
samu97 -
Category
Engineering
-
view
431 -
download
0
Transcript of Microcontrollori
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
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.
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
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 )
Architettura interna
Memoria per i datiCostituita 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 )
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
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
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
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
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
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 )
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
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.
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
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
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
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.
MicroC: Led a scalatavoid 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.
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
MicroC: Istruzioni per programmare un LCD
// Settaggio dei pin del LCDsbit 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 pinsbit 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); } }}