Elettronica e Telecomunicazioni Introduzione ai Microcontrollori Corso integrato per la classe V Elettronica a.s. 2014/2015 Giuseppe La Marca ITIS Pininfarina Moncalieri (TO)
Microcontrollore Frequenza clock: oltre 1 GHz Numero bit: 8/16/32 Ridotto set di istruzioni Watt minimi dissipati: 0,001 Architettura di Harvard Microprocessore Frequenza clock: oltre 3 GHz Numero bit: 32/64 Elevati set di istruzioni Watt minimi dissipati: 50 Architettura di Von Neumann
16F84A Parameter Name Value Program Memory Type Flash Program Memory (KB) 1.75 CPU Speed (MIPS) 5 RAM Bytes 68 Data EEPROM (bytes) 64 Timers 1 x 8-bit Temperature Range (C) -40 to 85 Operating Voltage Range (V) 2 to 6 Pin Count 18
Interrupts E' un segnale che viene generato al verificarsi di un evento esterno. Effetti dell'interrupt Uno dei primi tre bit del registro INTCON commuta da zero ad uno (quale dei tre dipende dall'evento che ha causato l'interrupt) Si blocca lesecuzione del programma L'indirizzo dell'istruzione successiva all'ultima eseguita, viene scritto nello stack Viene eseguita la funzione di gestione dell'interrupt L'indirizzo della successiva istruzione da eseguire viene trasferito dallo stack al registro PCL Nota: All'interno della funzione che gestisce l'interrupt il programmatore deve riportare a zero il bit di INTCON che aveva segnalato l'evento.
Eventi che generano interrups Overflow del contatore TIMER0 Impulso sul piedino RB0 Cambiamento di stato ad uno dei piedini RB4 RB5 RB6 RB7
Timer0 Timer0 è un contatore a otto bit che viene incrementato di uno ad ogni ciclo di istruzioni assembler (ogni 4 impulsi di clock). L'overflow di timer0 è un evento che può essere utilizzato per generare un interrupt. Abilitazione dell'interrupt sull'overflow di timer0 Nel registro INTCON bisogna porre: GIE=1 abiltazione globale degli interrups T0IE=1 abilitazione dell'interrupt sull'overflow di timer0 Nel registro OPTION bisogna porre: PSA=1 per non assegnare a timer0 il prescaler PSA=0 per assegnare a timer0 il prescaler Il bit T0IF di INTCON si porta al valore 1 quando si verifica l'overflow di timer0. Il programmatore deve riportare a zero T0IF nella funzione che gestisce l'interrupt
Timer0
Timer0 (prescaler)
Interrupt Impulso sul piedino RB0 Abilitazione dell'interrupt Nel registro INTCON bisogna porre: GIE=1 abiltazione globale degli interrups INTE=1 abilitazione dell'interrupt causato da un impulso al piedino RB0 Nel registro OPTION bisogna porre: INTEDG=1 L'interrupt si verifica in corrispondenza del fronte di salita dell'impulso INTEDG=0 L'interrupt si verifica in corrispondenza del fronte di discesa dell'impulso Segnalazione dell'interrupt Il bit INTF di INTCON si porta al valore 1 quando si verifica l'overflow di timer0. Il programmatore deve riportare a zero INTF nella funzione che gestisce l'interrupt
Interrupt Impulso sul piedino RB0
Interrupt Cambiamento di stato ad uno dei piedini RB4 --- RB7 Abilitazione dell'interrupt Nel registro INTCON bisogna porre: GIE=1 abiltazione globale degli interrups RBIE=1 abilitazione dell'interrupt causato da un cambiamento di stato ad uno dei piedini RB4 - RB5 RB6 - RB7 Segnalazione dell'interrupt Il bit RBIF di INTCON si porta al valore 1 quando si verifica l'overflow di timer0. Il programmatore deve riportare a zero RBIF nella funzione che gestisce l'interrupt
freq periodo N_overflow Errore [Hz] [micros] micros micros % 440 2272,7 9 252,53 2268-0,21 10 227,27 2270-0,12 11 206,61 2266-0,29 12 189,39 2268-0,21 13 174,83 2262-0,47 14 162,34 2268-0,21 15 151,52 2265-0,34 16 142,05 2272-0,03 17 133,69 2261-0,51 18 126,26 2268-0,21 19 119,62 2261-0,51 20 113,64 2260-0,56 LA# 466 Hz 2145 micros LA 440 Hz 2272 micros Lab 415,3 Hz 2407 micros