Corso di Informatica Applicata Lezione 7 Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De Vito.

Slides:



Advertisements
Presentazioni simili
Introduzione al linguaggio C++
Advertisements

INFORMATICA Altre Istruzioni di I/O
Informatica Generale Susanna Pelagatti
Corso di Laurea Triennale in Ingegneria Gestionale Corso di Fondamenti di informatica A. A A.Pinto Algoritmi di ricerca 1.
Introduzione ai circuiti elettronici digitali
PROGRAMMARE IN PASCAL (le basi)
Cenni sul campionamento
PUNTATORI Introduzione
Circuiti sequenziali Capitolo 5.
MICROCONTROLLORI Di Tiziano Ragazzi.
Introduzione ai circuiti sequenziali
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione 1, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a.2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
CONVERSIONE ANALOGICO-DIGITALE, A/D
INTRODUZIONE AI CONVERTITORI ANALOGICO-DIGITALI (ADC)
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Importazione di dati Nellambito dellutilizzo di qualsiasi software statistico una necessità è quella di importare dati esterni forniti dallutilizzatore.
Gerarchie di priorità per la gestione delle interruzioni
Corso di Informatica Applicata - © 2005 Saverio De Vito Corso di Informatica Applicata Esercitazione Università degli studi di Cassino Corso di Laurea.
Corso di Informatica Applicata - Lezione 3 - © 2005 Saverio De Vito Corso di Informatica Applicata Lezione 3 Università degli studi di Cassino Corso di.
Corso di Informatica Applicata Lezione 6
Come aumentare le linee di I/O?
L. Servoli - Corso Fisica dei Dispositivi Elettronici 1 Uno scheduler deve avere implementate almeno le seguenti funzionalità: 1) Inizializzatore: preparazione.
Convertitore A/D e circuito S/H
Xscale Nicola Rebagliati 2001s135. Cose Xscale Xscale è una microarchitettura per processori che fornisce ottime prestazioni con bassi consumi energetici.
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
INFORMATICA Altre Istruzioni di I/O. © Piero Demichelis 2 Funzioni di I/O Per la lettura e la scrittura da videoterminale il C prevede numerose istruzioni.
3. Architettura Vengono descritte le principali componenti hardware di un calcolatore.
Strutture di controllo nel C
Rete Sincrona Una rete sequenziale sincrona, è dotata di un ingresso E, di un segnale di Clock e uno di reset. Ad ogni fronte del Clock, deve essere campionato.
Sistemi di acquisizione
Simulatore Breve riassunto dei comandi più importanti del simulatore MPLAB.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Elaborato di Laurea di Alessandro LAZZARINI BARNABEI
Esercitazione Microcontrollori PIC
Registro a scorrimento
Assembly2 Gestione dei ritardi.
LABVIEW Sommario Che cosa è uno strumento virtuale (VI) creato con LABVIEW Parti di un VI: pannello frontale diagramma a blocchi Confronto tra il principio.
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
WATCHDOG TIMER E’ un oscillatore interno al  C, ma indipendente dal resto dei circuiti, il cui scopo è quello di rilevare eventuali blocchi della CPU.
PIC16F84A (terza lezione). PARAMETRI MASSIMI DEL PIC Dissipazione totale = 800 mW Corrente diogni pin = 25 mA Corrente della PORTA completa = 50 mA Corrente.
Università Degli Studi di Napoli “ Federico II”
Analisi e Sintesi di un contatore BCD con Quartus II
Arduino: introduzione alla programmazione
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Allievi Elettrici - AA Le funzioni ricorsive in C
Gestione dei dispositivi di I/O:
INFORmazione autoMATICA
In grado di effettuare molte azioni elementari indipendenti automa universale generatore di sequenze riconoscitore di sequenze circuiti sequenziali sommatore.
MICROPROCESSORI Un processore è un circuito integrato in grado di effettuare operazioni di calcolo o di elaborazione dell'informazione Il circuito contiene.
DAC A RESISTORI PESATI.
Vediamo com'è fatto internamente un microcontrollore PIC, quali dispositivi contiene e come interagiscono tra loro. Nella figura seguente viene riprodotto.
sul Microcontrollore 16F84
Linguaggio C: Le basi Stefano Cagnoni e Monica Mordonini
Conversione Analogico/Digitale Le grandezze fisiche che vogliamo misurare variano con continuità in un dato intervallo ed in funzione del tempo: sono descrivibili.
Corso di Informatica Applicata - Lezione 5 - © 2005 Saverio De Vito Corso di Informatica Applicata Lezione 5 Università degli studi di Cassino Corso di.
Corso di Informatica Applicata - Lezione 4 - © 2005 Saverio De Vito Corso di Informatica Applicata Introduzione Università degli studi di Cassino Corso.
Corso di Informatica Applicata Introduzione Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De.
Introduzione ai Microcontrollori Una prima definizione I microcontrollori sono utilizzati per gestire segnali in ingresso (input utente o da sensori),
Corso sui microprocessori1 CORSO INTRODUTTIVO ALLA PROGRAMMAZIONE DEI MICROPROCESSORI (PIC16F877)
Acquisizione dati con ADC 0831 e PIC 16F84
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Sistemi di acquisizione Dati Sistemi di misura ad un canale.
Laboratorio II, modulo Conversione Analogico/Digitale ( cfr.
ISTITUTO TECNICO – SETTORE TECNOLOGICO
Algoritmi Avanzati a.a.2011/2012 Prof.ssa Rossella Petreschi Interconnessione tramite reti Lezione n°6.
Pic16f84 Assembly I/O.
Transcript della presentazione:

Corso di Informatica Applicata Lezione 7 Università degli studi di Cassino Corso di Laurea in Ingegneria della Produzione Industriale Ing. Saverio De Vito Tel.:

L’ interfacciamento di sensori ed attuatori comporta l’ analisi e la soluzione di numero di problematiche: Tipologia di sensore (Analogico, Digitale) Caratteristiche statistiche del sensore/attuatore (affidabilità, precisione, specificità, modello fisico dell’ attuatore etc.) Metodologia di interfacciamento Campionamento Caratteristiche del mezzo di interfacciamento Etc. Interfacciamento Sensori ed Attuatori

Interfacciamento di Sensori e Attuatori Ad esempio l’ interfacciamento di un sensore analogico richiede la presenza nel canale di acquisizione di un dispositivo per la conversione analogico/digitale…. L’ interfacciamento di un attuatore di potenza richiede la presenza sul canale di attuazione di un dispositivo di conversione in potenza….

Semplificando: Interfacciamento di Sensori e Attuatori A/DA/DMCUMCU Conv.PotenzaConv.Potenza AttuatoreAttuatoreSistemaFisicoSistemaFisico

Analizzeremo la struttura di alcuni semplici snippet per l’ interfacciamento di sensori ed attuatori. In particolare analizzeremo l’ interfacciamento di un sensore analogico per illuminotecnica e di un display a 7 segmenti.

In primis abbiamo bisogno di un PIC con capacità di conversione analogica digitale ad esempio il PIC16F874 o il PIC 16F88. Convertitore sulla porta A Sample and Hold SAR (Successive Approximation Register) Conversion in Sleep Mode (Interrupt/Interferenze) Interfacciamento di Sensori e Attuatori

unsigned char unsigned char unsigned char unsigned char void setup_hardware ( void ) { /* set all of PORTB for output */ set_tris_b ( 0x00 ) ; /* select A0 for analogue input */ /* and all other bits for */ /* digital I/O */ /* right justified value */ ADCON1 = 0x8E; /* bits 1-3 of PORTA for output */ /* using bit 0 for analogue */ /* input */ set_tris_a ( 0xf1 ) ; } Interfacciamento di Sensori e Attuatori Set up di registri come variabili (estensione non-standard del C2C) Setup dell’ Hardware

void main ( void ) { unsigned char h, l ; setup_hardware () ; while (1) { /* enable the converter and start */ /* a conversion */ ADCON0 = 0x05; /* spin while the conversion runs */ while ( ADCON0 & 0x04 ); /* can read the high nibble as it */ /* in bank 0 */ h = ADCRESH; /* now need to flip to bank 1 to */ /* read the low byte. */ /* flip to the other bank */ asm bsf STATUS, RP0 /* load the byte into the W register */ asm movf _ADCRESL, W /* flip back home */ asm bcf STATUS, RP0 /* store the W register in l */ asm movwf _l_main output_port_b ( l ); output_port_a ( h * 2 ) ; } } Interfacciamento di Sensori e Attuatori Routine di Acquisizione (potremmo convertrla in una funzione read_adc0)

Display Bar #define ONE_LED 114 #define TWO_LEDS 227 #define THREE_LEDS 342 #define FOUR_LEDS 456 #define FIVE_LEDS 570 #define SIX_LEDS 684 #define SEVEN_LEDS 798 #define EIGHT_LEDS 912 void display_bar ( int value ) { if ( value < ONE_LED ) { output_port_b ( 0 ) ; return; } if ( value < TWO_LEDS ) { output_port_b ( 1 ) ; return; } if ( value < THREE_LEDS ) { output_port_b ( 3 ) ; return; } if ( value < FOUR_LEDS ) { output_port_b ( 7 ) ; return; } if ( value < FIVE_LEDS ) { output_port_b ( 15 ) ; return; } if ( value < SIX_LEDS ) { output_port_b ( 31 ) ; return; } if ( value < SEVEN_LEDS ) { output_port_b ( 63 ) ; return; } if ( value < EIGHT_LEDS ) { output_port_b ( 127 ) ; return; } output_port_b ( 255 ) ; }

Accensione a Soglia #define THRESHOLD 300 void main ( void ) { int v; setup_hardware () ; while (1) { v = read_adc0(); if ( v > THRESHOLD ) { output_port_b ( 255 ) ; } else { output_port_b ( 0 ) ; } }

Approfondimenti & Richiami Controllo ed uso del Timer0 Controllo del Display LED a 4 Cifre e 7 segmenti Interrupts in Assembler Debouncing

Controllare il TIMER con prescaler Il registro TMR0 agisce come contatore attivato dal clock di sistema. Viene incrementato regolarmente con frequenza dipendente dal clock e dal prescaler. Il passaggio per lo 0 causa il lancio di un interrupt che se opportunamente servito può essere utile per problemi di timing, I/O (visualizzazione,) etc. Il prescaler agisce da divisore di frequenza programmabile e di fatto controlla la frequenza di generazione dell' interrupt legato a TMR0. Utilizzando il registro OPTION è possibile controllare l' inserimento del prescaler e la sorgente del clock (Esterno, Interno)

Controllare il TIMER con il prescaler Il valore del prescaler ci permette di ridurre la frequenza di incremento che in modo base è pari alla frequenza di clock diviso 4 (ogni 4 cicli di clock il TMR0 viene incrementato). Ad esmpio in modo base, se partiamo da una fclock pari a 4Mhz, otteniamo una frequenza di incremento TMR0 pari a 1 Mhz. I Bit PS0, PS1, PS2 del registro OPTION determinano il valore della ulteriore divisione in frequenza operata dal pre-scaler.

Controllare il TIMER con il Prescaler l prescaler va assegnato ad uno dei due registri timer presenti sul PIC target, TMR0 o Watch Dog Timer. Noi ci soffermeremo sul TMR0, ignorando il WDT. Ponendo il bit TOCS del registro OPTION a 0 selezioniamo il Clock del PIC, mentre con il bit PSA posto a 0 assegnamo il prescaler al TMR0. Per ottenere ad esmpio un ritardo pari a circa un secondo possiamo porre il prescaler a 32, per ottenere una frequenza di 31250/256 Hz = Contando 122 passaggi per lo 0 possiamo ottenere un ritardo di circa secondi. Per essere + precisi potremmo andare a porre a 6 il TMR0 ogni volta che effettua il round up. Avremo così 250 cicli anzichè 256 e quindi un ritardo di 1 secondo.

Gestione Interrupt in Assembler Nella scorsa lezione avevamo visto come il PIC, in corrispondenza di un interrupt saltava, cambiando PCL in una speciale locazione di memoria, rappresentante un vettore di interrupt di dimensioni unitarie. Questa locazione di memoria è la locazione 4 esadecimale della memoria programma. Da questa locazione parte la routine di gestione dell' interrupt del PIC target.

Gestione Interrupt in Assembler E' conveniente effettuare i soliti passi tra i quali : –Salvare il contenuto di eventuali registri sottoposti a cambiamento –Identificare il tipo di interrupt –Effettuare il clear del bit interrupt corrispondente in INTCON –Saltare in opportune locazioni di memoria dove effettivamente si implementa la routine di servizio terminante con un RETFIE

Gestione Interrupt in Assembler Esempio Interrupt Handling: ORG 04H ;**************************************************************** ; Interrupt handler ;**************************************************************** ;Toc, Toc, Chi è? Determinazione della tipologia btfsc INTCON,T0IF goto IntT0IF btfsc INTCON,RBIF goto IntRBIF ;Terminazione, Reset degli interrupts End_ih bcf INTCON,T0IF bcf INTCON,RBIF ;Ritorna al programma principale retfie Salto all' opportuno segmento di codice di servizio dal quale si ritornerà in END_ih Int Reset Ritorno

Gestione Interrupt in Assembler Esempio DBLINT.ASM

Corso di Informatica Applicata - Lezione 5 - © 2005 Saverio De Vito Controllare il Display Il display presente sulla scheda di sviluppo è dotato di 4 cifre a 7 segmenti. Il numero di bit necessari al loro controllo è maggiore di quello disponibile con i nostri PIC. Si ricorre ad un “trucco”: In realtà ogni unità del display è connessa alla porta B in parallelo, mentre i bit della porta A selezionano l’ unità che si vuole controllare. La visualizzazione di un numero a 4 cifre, si ottiene mediante visualizzazione in rapida successione delle 4 cifre su unità differenti sfruttando la persistenza del display e della retina umana. Ogni numero può essere visualizzato quindi presentando un opportuno pattern sulla porta B e assicurando la selezione di una particolare unità a 7 segmenti del display a disposizione.

Corso di Informatica Applicata - Lezione 5 - © 2005 Saverio De Vito void display ( unsigned char digit, unsigned char POs ) { /* turn on the required LED unit*/ output_port_a ( enable [POs] ) ; /* set the pattern on the LED */ output_port_b ( patterns [digit] ); } Problema del ritardo : selezione -> presentazione -> selezione Controllare il Display

Corso di Informatica Applicata - Lezione 5 - © 2005 Saverio De Vito Debouncing Lo switching di un interruttore meccanico causa in generale piccole oscillazioni che possono generare multiple transizioni di stato in programmi del tipo appena sviluppato. Lo stato finale dipende dal numero di transizioni (pari o dispari) che il codice è in grado di rilevare, in pratica lo stato finale si randomizza. Una soluzione è continuare a leggere lo stato fisico dell’ interruttore (nel nostro caso connesso ad un bit di porta I/O) fin quando non si stabilizza, ossia fino a quando non otteniamo un numero congruo di letture coerenti.