PIC18F47J53 COME FARE UN PWM FACILE E

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "PIC18F47J53 COME FARE UN PWM FACILE E"

Transcript

1 Steve Blackbird (TardoFreak) PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 11 June 2013 Di tanto in tanto capita che qualche utente del forum richieda un circuito per variare in modo lineare o PWM l' intensità di LED. L' ultima discussione che ho letto si chiama "breathing LED" in cui si richiedeva un circuito in grado di far variare la luminosità di un LED con un andamento ascendente e discendente in modo da dare l' impressione che il LED respiri. La prima cosa che ho pensato è stata "Questo è un lavoro che con un micro si risolve in pochissimo tempo!". Infatti l' ho preso come spunto per implementarlo sul PIC18F47J53 cogliendo allo stesso tempo l' occasione per illustrare come le cose si possono fare con poco (spirito da vecchio microcontrollista eh eh eh) e come si utilizzano le fasi di funzionamento all' interno di un programma oltre che, ovviamente, implementare un PWM multicanale. Per la realizzazione pratica utilizzerò la scheda PIERIN PIC18. La tecnica PWM da implementare Non sarò di certo io quello che farà il solito pistolotto sulla tecnica di regolazione PWM (Pulse Width Modulation) perché sia ElectroYou che la rete ne sono pieni e la sua spiegazione esula dallo scopo di questo articolo. Quello che invece si deve sapere è che con questo programma si implementerà un controllo PWM a 32 livelli che verrà utilizzato per far variare la luminosità dei due LED che si trovano montati sul PIERIN PIC18 in modo lineare dando l' impressione che questi "respirino". In questo programma vengono comandati solo due LED ma, come si potrà ben vedere e capire, se ne potrebbero pilotare molti di più. La cosa che penso sia interessante è che non verrà utilizzata nessun' altra periferica che non sia stata utilizzata fino a questo articolo. In pratica utilizzerò solamente il Timer 2 che è già stato utilizzato nel programma di Demo e quindi conosciuto. E' vero che il PIC18F47J53 ha una ricca dotazione di timer con i quali si può fare qualsiasi cosa ma in questo caso se ne possono fare a meno. Abbiamo un micro potente e veloce ed un timer con comparatore. Non ci serve altro e tanto meno ci andremo a complicare la vita studiando altri tipi di timer... almeno per ora Descrizione del programma L' idea alla base del programma è realizzare, all' interno di un' interrupt ciclica, il controllo PWM. La frequenza deve essere sufficientemente alta da non fare apparire PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 1

2 il LED sfarfallanti ma che, allo stesso tempo, sia gestibile con facilità dal microcontrollore. Nel programma di demo l' interrupt ciclica era realizzata con il timer 2 che generava una chiamata ogni millisecondo. Questa volta il timer 2 verrà inizializzato in modo da generare una interrupt ogni 100 us., dieci volte di più, con la particolarità che gestirà ugualmente i timer software (sempre con risoluzione 1 ms.) e contemporaneamente la larghezza dell' impulso delle due uscite collegate ai LED con una frequenza di 312,5 Hz (un periodo di 3,2 ms) sufficientemente alta da dare un buon effetto visivo ed evitare lo sfarfallamento. Gestione dei timer software Posto che si vuole mantenere il funzionamento dei timer software come nel programma demo (decremento ogni millisecondo) e sapendo che l' interrupt viene chiamata ogni 100 us si utilizza una variabile che funge da divisore. In pratica la si fa contare da 0 a 10 e, quando è arrivata a 10 la si azzera e si aggiornano i timer software. Il risultato è avere dei timer software che si decrementano ogni millisecondo esattamente come nel programma demo. Gestione del PWM Anche la gestione del PWM utilizza una variabile che conta da 0 a 32. Se il valore della variabile (che contiene il livello di luminosità del canale) è superiore al valore del contatore l' uscita corrispondente verrà tenuta alta mentre se il suo valore è inferiore l' uscita sarà tenuta a 0. Avremo così ottenuto in modo semplice la parzializzazione del periodo in 32 passi che possono essere tutti disattivati (nel caso che il valore valga 0) oppure tutti attivati del il valore vale 32. Il programma Il progetto è stato creato partendo dal progetto di base e si è lavorato esclusivamente su file main.c. La prima cosa che salta all' occhio è la dichiarazione delle variabili locali. Questa volta ne abbiamo 4 volatile unsigned short timer_delay_1; // Timer software 1 volatile unsigned short timer_delay_2; // Timer software 2 Che sono i due timer software ognuno utilizzato dalla sua funzione autonoma che gestisce l' effetto luminoso del suo led e volatile char pwm_level_1; // Livello luminosità LED1 (0-32) volatile char pwm_level_2; // Livello luminosità LED2 (0-32) Che sono le due variabili che contengono i livelli di luminosità dei due LED. Troviamo anche due prototipi di funzione in più che sono PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 2

3 void gestione_led1(void); void gestione_led2(void); Si è deciso di fare due funzioni distinte ognuna per la gestione autonoma di ognuno dei due LED ma non solo per questo motivo. Questa volta prossima vedere come si gestiscono due processi contemporaneamente a patto di evitare alcune cose e seguire un certo rigore nella scrittura delle stesse. La funzione di servizio dell' interrupt Anche in questo caso il timer è stato inizializzato per generare una interrupt con priorità bassa mantenendo così le cose come sono nel programma di demo. Troviamo inizialmente la dichiarazione delle due variabili che fungono da divisore di base tempi e da contatore per il PWM. Sono dichiarate come statiche perché devono mantenere il loro valore anche al di fuori della funzione (se fossero dichiarate come variabili locali sarebbero azzerate ogni volta che viene chiamata la funzione) e, allo stesso tempo, non sono visibili al resto del programma. In pratica si comportano come variabili globali ma si possono usare solo all' interno della funzione. A loro viene assegnato un valore iniziale di 0. void lowpriorityinterrupt() // Verifica quale flag ha causato l' interrupt // Esegui la parte di codice di servizio dell' interrupt // Azzera il flag che ha causato l' interrupt //... static char time_base = 0; static char pwm_counter = 0; // Gestione dell' interrupt del timer 2 if(pir1bits.tmr2if) // Gestione del PWM del LED 1 if (pwm_level_1 < pwm_counter) LATDbits.LATD6 = 1; else LATDbits.LATD6 = 0; // Gestione del PWM del LED 2 if (pwm_level_2 < pwm_counter) LATDbits.LATD7 = 1; else LATDbits.LATD7 = 0; pwm_counter++; if (PWM_LEVELS == pwm_counter) pwm_counter = 0; // gestione del timer software. I timer software devono decrementarsi PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 3

4 // fino ad arrivare a 0. Una volta arrivati a 0 restano fermi a 0. // La gestione avviene solo quando la variabile time_base raggiunge il // valore TIME_BASE_COUNTS in modo da aggiornare i timers ogni ms. time_base++; if (TIME_BASE_COUNTS == time_base) time_base = 0; if (timer_delay_1) timer_delay_1--; if (timer_delay_2) timer_delay_2--; // Resetta il flag che ha generato l' interrupt PIR1bits.TMR2IF = 0; La gestione delle uscite dei LED è semplicissima. Se il valore contenuto nella variabile che rappresenta la luminosità è inferiore al valore del contatore l' uscita viene mandata alta, altrimenti rimane bassa. Così, se il valore della variabile vale 0 l' uscita sarà sempre a 0, ma se il valore vale 32 (valore che il contatore non raggiunge mai) l' uscita sarà fissa ad 1. Notare infatti che il contatore viene incrementato solo dopo la gestione delle uscite e se vale 32 viene riportato a 0. In pratica varia da 0 a 31. La gestione dei timer software differisce da quella del programma demo solo proprio perché i timer vengono decrementati ogni 10 incrementi della variabile time_base ottenendo così un decremento ogni millisecondo. Le funzioni che gestiscono i due LED Sono due funzioni sostanzialmente uguali e quindi ne analizziamo una sola. Notare la dichiarazione di una variabile (statica) di tipo enum. Questa variabile può assumere solo due valori: fase_up e fase_down. Il perché è comprensibile: se dobbiamo fare vedere i LED che "respirano" ci sarà una prima fase in cui il LED aumenta la luminosità (fase_up) ed una in cui la diminuisce (fase_down). // Funzione per la gestione del LED1 // La luminosità sale lentamente e scende velocemente // Note: // utilizza il timer software soft_timer_1 e controlla la // luminosita del LED tramite la variabile pwm_level_1 void gestione_led1(void) PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 4

5 static enum // variabile che contiene lo stato di funzionamento fase_up, fase_down fase_ciclo = fase_up; // Aggiorna la luminosità quando il timer_1 è arrivato a 0 if (!timer_delay_1) switch(fase_ciclo) // Salita lenta case fase_up: timer_delay_1 = 80; if (PWM_LEVELS == pwm_level_1) fase_ciclo = fase_down; else pwm_level_1++; break; // Discesa veloce case fase_down: timer_delay_1 = 20; if (0 == pwm_level_1) fase_ciclo = fase_up; else pwm_level_1--; break; //switch(fase_ciclo) // if (!timer_delay_1) Quindi quando la funzione sta eseguendo la fase ascendente verrà solo eseguita la parte di programma che sta sotto il case fase_up: e l'ì altra non verrà eseguita. Quando la fase ascendente sarà terminata, cioè quando il valore di luminosità avrà rangiunto il valore massimo la variabile fase_ciclo cambierà di valore assumendo il valore fase_down come indicato in questo disegno. PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 5

6 Forse per due soli stati di funzionamento questo può sembrare eccessivo dichiarare una variabile enum ma gli stati di funzionamento potrebbero essere molti. In questo modo viene solo eseguita la parte relativa allo stato di funzionamento realizzando così una macchina a stati. Se non si introducono cicli che possono fermare l' elaborazione (come ad esempio i ritardi fissi o le attese di tasti premuti) ma si usa la macchina a stati si possono eseguire più compiti contemporanenamente. Una sorta di multitasking cooperativo (di bassa macelleria) ma che funziona... e pure bene. Il main Nel main, dopo le opportune inizializzazioni che non starò nuovamente ad analizzare (non vorrei essere ripetitivo) troviamo la parte operativa vera e propria. // Inizializza i livelli dei due LED ed azzera i due timer pwm_level_1 = 0; pwm_level_2 = 0; timer_delay_1 = 0; timer_delay_2 = 0; // Ciclo infinito di funzionamento for(;;) // Inserire il programma qui. gestione_led1(); gestione_led2(); //for(;;) PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 6

7 E' effettivamente semplice: azzeramento delle variabili ed esecuzione continua delle due funzioni. Notare che in questo programma sono solo due perché ci sono da gestire solo gli effetti visivi di 2 LED ma ce ne potrebbero essere molte di più. Magari ci potrebbe essere una funzione che testa i pulsanti per farci un qualcosa, un' altra funzione che realizza una rete logica con altri ingressi ed uscite, un po' di tutto. L' importante è che si tenga presente che ogni funzione (task) non deve tenere il controllo del programma per più di un tempo stabilito a priori e, tanto meno, deve piantare il programma all' interno di una attesa! Se non si seguono queste regole allora niente funziona ma se si seguono le potenzialità di un programma diventano notevoli. Suggerimenti per la sperimentazione Il risultato visivo di questo programma è quello mostrato in questo video. I due LED non "resipirano" sincronizzati. E' un effetto voluto proprio per far vedere che due funzioni sono completamente autonome. Il programma esegue in buona sostanza due task in parallelo. Flash Per poterlo vedere funzionare anche senza compilare tutto il programma con MPLAB si può programmare il file.hex chiamato easy_pwm.hex direttamente dentro la scheda. Se poi si incomincia a variare i valori con cui sono caricati i timer software si variano le velocità di lampeggio. Si può anche leggere da un ingresso analogico, magari collegato ad un potenziometro, scalarne il valore in modo che vada da 0 a 32 e comandare manualmente la luminosità di un LED oltre che, naturalmente, PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 7

8 aggiungere altri canali PWM. Con un po' di buona volontà il divertimento e gli esperimenti sono assicurati. Cio detto, e scusando di eventuali errori ed imprecisioni, non mi resta che augurare BUONA SPERIMENTAZIONE!. Il sorgente completo // File di definizione dei registri del micro. #include "p18f47j53.h" // File di libreria contenete le funzioni di ritardo #include "delays.h" // File di configurazione dei fuses #include "configurazione.h" // Mappatura delle interrupt #include "mappa_int.h" // Header del main #include "main.h" // Defines del programma // Numero di interrupts per base tempi 1ms. #define TIME_BASE_COUNTS 10 // Nmumero di livelli per le uscite PWM #define PWM_LEVELS 32 // Variabili globali #pragma udata volatile unsigned short timer_delay_1; // Timer software 1 volatile unsigned short timer_delay_2; // Timer software 2 volatile char pwm_level_1; // Livello luminosità LED1 (0-32) volatile char pwm_level_2; // Livello luminosità LED2 (0-32) // Funzione di servizio delle interrupt ad ALTA priorità PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 8

9 #pragma code #pragma interrupt highpriorityinterrupt void highpriorityinterrupt() // Verifica quale flag ha causato l' interrupt // Esegui la parte di codice di servizio dell' interrupt // Azzera il flag che ha causato l' interrupt //... // Funzione di servizio delle interrupt a BASSA priorità #pragma interruptlow lowpriorityinterrupt void lowpriorityinterrupt() // Verifica quale flag ha causato l' interrupt // Esegui la parte di codice di servizio dell' interrupt // Azzera il flag che ha causato l' interrupt //... static char time_base = 0; static char pwm_counter = 0; // Gestione dell' interrupt del timer 2 if(pir1bits.tmr2if) // Gestione del PWM del LED 1 if (pwm_level_1 < pwm_counter) LATDbits.LATD6 = 1; else LATDbits.LATD6 = 0; // Gestione del PWM del LED 2 if (pwm_level_2 < pwm_counter) LATDbits.LATD7 = 1; else LATDbits.LATD7 = 0; pwm_counter++; if (PWM_LEVELS == pwm_counter) pwm_counter = 0; // gestione del timer software. I timer software devono decrementarsi // fino ad arrivare a 0. Una volta arrivati a 0 restano fermi a 0. // La gestione avviene solo quando la variabile time_base raggiunge il // valore TIME_BASE_COUNTS in modo da aggiornare i timers ogni ms. time_base++; if (TIME_BASE_COUNTS == time_base) PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 9

10 time_base = 0; if (timer_delay_1) timer_delay_1--; if (timer_delay_2) timer_delay_2--; // Resetta il flag che ha generato l' interrupt PIR1bits.TMR2IF = 0; // Prototipi delle funzioni #pragma code void timer2_deinit(void); void gestione_led1(void); void gestione_led2(void); // Funzioni #pragma code // De-inizializza il timer 2 e lo porta nello stato in cui si trovava // subito dopo il RESET void timer2_deinit(void) T2CON = 0; // Resetta il timer 2 control register TMR2 = 0; // Azzera il contatore interno PR2 = 0; // Azzera il registro comparatore PIE1bits.TMR2IE = 0; // Disabilita l' interrupt IPR1bits.TMR2IP = 0; // Resetta il bit di priorità dell' interrupt PIR1bits.TMR2IF = 0; // Azzera il flag di interrupt // Funzione per la gestione del LED1 // La luminosità sale lentamente e scende velocemente // Note: // utilizza il timer software soft_timer_1 e controlla la // luminosita del LED tramite la variabile pwm_level_1 PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 10

11 void gestione_led1(void) static enum // variabile che contiene lo stato di funzionamento fase_up, fase_down fase_ciclo = fase_up; // Aggiorna la luminosità quando il timer_1 è arrivato a 0 if (!timer_delay_1) switch(fase_ciclo) // Salita lenta case fase_up: timer_delay_1 = 80; if (PWM_LEVELS == pwm_level_1) fase_ciclo = fase_down; else pwm_level_1++; break; // Discesa veloce case fase_down: timer_delay_1 = 20; if (0 == pwm_level_1) fase_ciclo = fase_up; else pwm_level_1--; break; //switch(fase_ciclo) // if (!timer_delay_1) // Funzione per la gestione del LED2 // La luminosità sale velocemente e scende velocemente in modo simmetrico // Note: // utilizza il timer software soft_timer_2 e controlla la // luminosita del LED tramite la variabile pwm_level_2 void gestione_led2(void) static enum // variabile che contiene lo stato di funzionamento fase_up, fase_down fase_ciclo = fase_up; PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 11

12 // Aggiorna la luminosità quando il timer_2 è arrivato a 0 if (!timer_delay_2) switch(fase_ciclo) // Salita veloce case fase_up: timer_delay_2 = 15; if (PWM_LEVELS == pwm_level_2) fase_ciclo = fase_down; else pwm_level_2++; break; // Discesa veloce case fase_down: timer_delay_2 = 15; if (0 == pwm_level_2) fase_ciclo = fase_up; else pwm_level_2--; break; //switch(fase_ciclo) // if (!timer_delay_2) // MAIN FUNCTION void main(void) // Fa partire il PLL. // Anche se viene selezionato tramite i bit di configurazione // il suo funzionamento non è automatico. Ha bisogno di un comando. OSCTUNEbits.PLLEN = 1; // Attende abbastanza tempo per far stabilizzare il PLL Delay1KTCYx(10); // Da ora in poi abbiamo il PLL funzionante ed il micro con il turbo. // Inizializzazione delle periferiche // Inizializza la PORTD // bit 4 input pulsante PL0 // " 5 input pulsante PL1 // " 6 output LED LED1 PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 12

13 // " 7 output LED LED2 TRISD = 0x3F; // Mette a 0 tutte le uscite LATD = 0; // De-inizializza il timer2. Non sarebbe necessario perché il micro esce // allo stato di RESET ma è comunque buona pratica de-inizializzare sempre // le periferiche per non tralasciare nessun bit. timer2_deinit(); // Inizializza il timer 2 per interrupt ogni 100 microsecondi. // prescaler divide per 16 T2CONbits.T2CKPS = 2; // Postscaler divide per 5 T2CONbits.T2OUTPS = 4; // Imposta il valore comparatore a 150 PR2 = 15; // Imposta l' interrupt del Timer 2 a priorita' bassa IPR1bits.TMR2IP = 0; // abilita interrupt del timer PIE1bits.TMR2IE = 1; // Selezione ed abilitazione delle interrupt // Ora che si sono inizializzate tutte le periferiche si possono abilitare // Oppurtunamente le interrupt // abilita le interrupt a bassa priorita' RCONbits.IPEN = 1; // abilta tutte le interrupt a priorità bassa INTCONbits.GIEL = 1; // Abilita tutte le interrupt in generale INTCONbits.GIEH = 1; // Attivazione delle periferiche // Con le interrupt abilitate possiamo ora far partire il timer 2 // Accende il timer T2CONbits.TMR2ON = 1; // Inizializza i livelli dei due LED ed azzera i due timer pwm_level_1 = 0; pwm_level_2 = 0; timer_delay_1 = 0; timer_delay_2 = 0; PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 13

14 // Ciclo infinito di funzionamento for(;;) // Inserire il programma qui. gestione_led1(); gestione_led2(); //for(;;) Estratto da " index.php?title=userspages:tardofreak:pic18f47j53-come-fare-un-pwm-facile-emulticanale" PIC18F47J53 COME FARE UN PWM FACILE E MULTICANALE 14

PIERIN PIC18 IL PROGRAMMA DEMO:

PIERIN PIC18 IL PROGRAMMA DEMO: Steve Blackbird (TardoFreak) PIERIN PIC18 IL PROGRAMMA DEMO: TIMER E SUPER VELOCITÀ PER IL MICRO 2 June 2013 Il programma di demo caricato sul PIERIN PIC18, quello che fa lampeggiare i due LED, per intenderci,

Dettagli

LE INTERRUPT. UTILIZZO PRATICO CON IL PIERIN PIC18 1

LE INTERRUPT. UTILIZZO PRATICO CON IL PIERIN PIC18 1 Steve Blackbird (TardoFreak) LE INTERRUPT. UTILIZZO PRATICO CON IL PIERIN PIC18 22 June 2013 Introduzione Nel precedente articolo ho cercato di spiegare cosa sono le interrupt, in questo vorrei spiegare

Dettagli

Vogliamo far lampeggiare i led collegati come in figura ai bit della porta D del PIC 18F8722 presente sulla demo board in dotazione al laboratorio.

Vogliamo far lampeggiare i led collegati come in figura ai bit della porta D del PIC 18F8722 presente sulla demo board in dotazione al laboratorio. Lampeggio di 8 led Vogliamo far lampeggiare i led collegati come in figura ai bit della porta D del PIC 18F8722 presente sulla demo board in dotazione al laboratorio. Bit7 Bit6 Bit5 Bit4 Bit3 Bit2 Bit1

Dettagli

PIC18F47J53 UN MODULO IN C PER

PIC18F47J53 UN MODULO IN C PER Steve Blackbird (TardoFreak) PIC18F47J53 UN MODULO IN C PER PILOTARE DISPLAY LCD 18 June 2013 Introduzione Se è vero che un programma in C lo si può scrivere all' interno di un unico file è anche vero

Dettagli

GENERATORE DI BASE TEMPI

GENERATORE DI BASE TEMPI Steve Blackbird (TardoFreak) GENERATORE DI BASE TEMPI 4 October 2010 Non è passato neanche un anno dalla mia iscrizione in questo bellissimo sito ed in questo, seppur breve periodo, frequentando il forum

Dettagli

GESTIONE DELLE INTERRUZIONI (INTERRUPT)

GESTIONE DELLE INTERRUZIONI (INTERRUPT) GESTIONE DELLE INTERRUZIONI (INTERRUPT) In informatica, un interrupt o interruzione è: un segnale asincrono che indica il bisogno di attenzione da parte di una periferica finalizzata ad una particolare

Dettagli

CONTATORE/TIMER PROGRAMMABILE CTC Z80 1. Piedinatura 2. Struttura interna 4. Modo timer 5. Modo Counter 8. Programmazione del CTC 13

CONTATORE/TIMER PROGRAMMABILE CTC Z80 1. Piedinatura 2. Struttura interna 4. Modo timer 5. Modo Counter 8. Programmazione del CTC 13 CONTATORE/TIMER PROGRAMMABILE CTC Z80 1 Piedinatura 2 Struttura interna 4 Modo timer 5 Modo Counter 8 Programmazione del CTC 13 Gerarchia di priorità delle interruzioni 17 Interfacciamento 17 Contatore/Timer

Dettagli

TIMER H-M-S CON PIC [2] - IL PROGRAMMA 1

TIMER H-M-S CON PIC [2] - IL PROGRAMMA 1 Davide Bagnoli (DADO91) TIMER H-M-S CON PIC [2] - IL PROGRAMMA 15 January 2013 Eccoci alla seconda puntata. Adesso voglio parlare un po' del programma che fa funzionare il timer che ho progettato, ma prima

Dettagli

TUTORIAL GPL_BENZINA CON PIC16F1826 (UTILIZZO DELL ADC)

TUTORIAL GPL_BENZINA CON PIC16F1826 (UTILIZZO DELL ADC) TUTORIAL GPL_BENZINA CON PIC16F1826 (UTILIZZO DELL ADC) Tutorial di Maroncelli Matteo e Zoffoli Federico, 5A. Creare un programma che simula gli indicatori di livello da serbatoi GPL e Benzina. Attraverso

Dettagli

PIC18F47J53 NOZIONI DI BASE SULLA

PIC18F47J53 NOZIONI DI BASE SULLA Steve Blackbird (TardoFreak) PIC18F47J53 NOZIONI DI BASE SULLA SERIALE 8 June 2013 Potere interagire con un microcontrollore attraverso una linea seriale è una cosa semplice e potente. Può sembrare una

Dettagli

del Linguaggio C Istruzioni di iterazione

del Linguaggio C Istruzioni di iterazione Istruzioni i Iterative ti del Linguaggio C Istruzioni di iterazione Le istruzioni di iterazione forniscono strutture di controllo che esprimono la necessità di ripetere una certa istruzione durante il

Dettagli

Ing. Emiliano Capuzzo Remote Contro NEC 11/11/2003. Remote Control NEC

Ing. Emiliano Capuzzo Remote Contro NEC 11/11/2003. Remote Control NEC Remote Control NEC Questo progetto risponde all esigenza di decodificare ed utilizzare i codici prodotti da telecomandi IR che adottano la codifica NEC Trasmissione Format. Questo tipo di codifica è attualmente

Dettagli

Corso di programmazione Arduino DI MALVEZZI DAVIDE

Corso di programmazione Arduino DI MALVEZZI DAVIDE Corso di programmazione Arduino DI MALVEZZI DAVIDE Argomenti Pin digitali e pin analogici Gestione di timer e bottoni Utilizzo della porta seriale Oggetto String Controllo di schermi LCD Utilizzo dell

Dettagli

Arduino/Raspberry Board and GSM Library

Arduino/Raspberry Board and GSM Library Necessità di trovare una soluzione per la gestione delle diverse breakout GSM Gestione dei motori GSM di costruttori diversi: SIMCOM (SIM800C, SIM900 ecc) QUECTEL (M95) FIBOCOM (G510) Interfacciamento

Dettagli

Calcolatori Elettronici T Ingegneria Informatica A3 - Gestione delle interruzioni

Calcolatori Elettronici T Ingegneria Informatica A3 - Gestione delle interruzioni Calcolatori Elettronici T Ingegneria Informatica A3 - Gestione delle interruzioni Giovanni Bonaccio, Stefano Mattoccia Arduino Interrupt Nella scheda Arduino Uno sono presenti due tipologie diverse di

Dettagli

La comunicazione con l esterno

La comunicazione con l esterno La comunicazione con l esterno Input / Output Le porte di I/O I Dati entrano Disp In Disp In Dispositivo di Ingresso Porta In Porta In Porte di Ingresso CPU Bus dati I Dati escono Porta Out Disp Out Porta

Dettagli

Primo programma in C

Primo programma in C Primo programma in C Struttura minima di un file C Applicazioni C in modo console Struttura del programma Commenti Direttive #include Definizione di variabili Corpo del main 2 Struttura minima di un file

Dettagli

Guida alla Settima Esercitazione

Guida alla Settima Esercitazione Guida alla Settima Esercitazione curata da Ilaria Casale La seguente esercitazione è divisa in due parti. Nella prima parte si comprenderà come gestire la periferica GPIO per generare un'interruzione.

Dettagli

DISPOSITIVO PER LA LETTURA DI UN ENCODER INCREMENTALE

DISPOSITIVO PER LA LETTURA DI UN ENCODER INCREMENTALE DISPOSITIVO PER LA LETTURA DI UN ENCODER INCREMENTALE Si propone l'uso di un microcontrollore pic16f84 della Microchip. Si acquisiscono i segnali di un encoder con due canali in quadratura con la possibilità

Dettagli

TERMOMETRO DIGITALE CON PIC18 PIERIN E NTC SENZA UTILIZZARE ADC 1

TERMOMETRO DIGITALE CON PIC18 PIERIN E NTC SENZA UTILIZZARE ADC 1 Luca Di Liello (Luca1995) TERMOMETRO DIGITALE CON PIC18 PIERIN E NTC SENZA UTILIZZARE ADC 15 September 2013 Una piccola introduzione Ecco che finalmente riesco a scrivere un bell'articolo sulla mia prima

Dettagli

PIC E DISPLAY A 7 SEGMENTI CON

PIC E DISPLAY A 7 SEGMENTI CON Steve Blackbird (TardoFreak) PIC E DISPLAY A 7 SEGMENTI CON MULTIPLEXING 12 September 2010 Display a 7 segmenti I display a LED a 7 segmenti fecero apparizione più di 30 anni fa nelle prime calcolatrici

Dettagli

Laboratorio di Algoritmi e Strutture Dati

Laboratorio di Algoritmi e Strutture Dati Laboratorio di Algoritmi e Strutture Dati 1 Note di carratere generale Docente: Camillo Fiorentini 9 ottobre 2007 L obiettivo è quello di scrivere delle semplici funzioni per risolvere problemi di tipo

Dettagli

CONTROLLARE UN SERVOCOMANDO A DISTANZA. 1

CONTROLLARE UN SERVOCOMANDO A DISTANZA. 1 Massimo Peino (mpeino) CONTROLLARE UN SERVOCOMANDO A DISTANZA. 30 January 2012 Introduzione Quest'articolo segue all'articolo "CONTROLLARE UN SERVOCOMANDO CON UN PIC". Secondo me vi conviene darci un occhiata

Dettagli

PIERIN PIC18 - MISURARE LA TEMPERATURA CON

PIERIN PIC18 - MISURARE LA TEMPERATURA CON Steve Blackbird (TardoFreak) PIERIN PIC18 - MISURARE LA TEMPERATURA CON GLI NTC 30 June 2013 Introduzione Quando si uniscono la conoscenza dell' elettronica, la matematica e la possibilità di far funzionare

Dettagli

Arduino: Programmazione

Arduino: Programmazione Programmazione formalmente ispirata al linguaggio C da cui deriva. I programmi in ARDUINO sono chiamati Sketch. Un programma è una serie di istruzioni che vengono lette dall alto verso il basso e convertite

Dettagli

Qualsiasi programma in C++ segue lo schema:

Qualsiasi programma in C++ segue lo schema: Qualsiasi programma in C++ segue lo schema: #include // libreria che gestisce flusso di input e output using namespace std; // uso di librerie standard del C++ int main() { // dichiarazioni

Dettagli

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI

Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI Prof. Pagani Corrado LINGUAGGIO C: SELEZIONE E CICLI IF Ogni linguaggio di programmazione presenta almeno una struttura di controllo decisionale. La sintassi del linguaggio C è la seguente. if ()

Dettagli

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione

Lezione 5 e 6. Fabio Scotti ( ) Laboratorio di programmazione per la sicurezza. Valentina Ciriani ( ) Laboratorio di programmazione Lezione 5 e 6 - Concetto di blocco - Controllo del flusso di un programma - Costrutti per la scelta if e switch - Costrutti while e for - Operatori in C Fabio Scotti (2004-2009) Laboratorio di programmazione

Dettagli

Esercitazione 4. Comandi iterativi for, while, do-while

Esercitazione 4. Comandi iterativi for, while, do-while Esercitazione 4 Comandi iterativi for, while, do-while Comando for for (istr1; cond; istr2) istr3; Le istruzioni vengono eseguite nel seguente ordine: 1) esegui istr1 2) se cond è vera vai al passo 3 altrimenti

Dettagli

Fondamenti di Informatica A. A. 2018/19

Fondamenti di Informatica A. A. 2018/19 Fondamenti di Informatica Prof. Marco Lombardi A. A. 2018/19 AlgoBuild: Strutture Iterative e Selettive OUTLINE Blocco condizionale (Struttura selettiva IF - IF/ELSE) Esempi Cicli a condizione iniziale

Dettagli

Elap CM78N C-01 ISTRUZIONI PER LA CONFIGURAZIONE

Elap CM78N C-01 ISTRUZIONI PER LA CONFIGURAZIONE CM78N CONTATORE ELETTRONICO PROGRAMMABILE A DUE PRESELEZIONI SOFTWARE C-01 ISTRUZIONI PER LA CONFIGURAZIONE Lo strumento può essere configurato dall utente per adattarsi a diversi modi di funzionamento.

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica AlgoBuild: Strutture selettive, iterative ed array Prof. Arcangelo Castiglione A.A. 2016/17 AlgoBuild : Strutture iterative e selettive OUTLINE Struttura selettiva Esempi Struttura

Dettagli

Arduino & Oltre corso di coding ed elettronica maker

Arduino & Oltre corso di coding ed elettronica maker Arduino & Oltre corso di coding ed elettronica maker Aprile maggio 2019, Spazio Chirale alla Garbatella Stefano Capezzone www.chirale.it/download-arduino SSID: spazio chirale best Pass: persico32 This

Dettagli

Informatica per Statistica Riassunto della lezione del 21/10/2011

Informatica per Statistica Riassunto della lezione del 21/10/2011 Informatica per Statistica Riassunto della lezione del 1/10/011 Igor Melatti Costrutti del linguaggio C: ripasso Si consideri il programma C alla Figura 1 ci sono due dichiarazioni di funzioni, insertion

Dettagli

Tipi di dato, variabili, istruzioni

Tipi di dato, variabili, istruzioni Tipi di dato, variabili, istruzioni Esercizio 1 Implementare un servizio che estrae due numeri random tra 1 e 100, stampa a video i due numeri ed esegue le seguenti operazioni: se almeno uno dei due numeri

Dettagli

LO HAI MAI REALIZZATO CON UN PIC? LA LAMPADA SIBILLA! 1

LO HAI MAI REALIZZATO CON UN PIC? LA LAMPADA SIBILLA! 1 Paolo Rognoni (Paolino) LO HAI MAI REALIZZATO CON UN PIC? LA LAMPADA SIBILLA! 28 October 2010 Voglio raccontare la storia che mi ha portato a realizzare una lampada segna passo, una lampada notturna di

Dettagli

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter

Informatica B a.a 2005/06 (Meccanici 4 squadra) PhD. Ing. Michele Folgheraiter Informatica B a.a 2005/06 (Meccanici 4 squadra) Scaglione: da PO a ZZZZ PhD. Ing. Michele Folgheraiter Funzionamento macchina di von Neumann clock Memoria Centrale: Tutta l informazione prima di essere

Dettagli

Il primo programma C++

Il primo programma C++ Il primo programma C++ Un programma in qualsiasi linguaggio evoluto è una sequenza di istruzioni che la CPU dopo opportune conversioni esegue. La sintassi dei linguaggi di programmazione è molto piu rigida

Dettagli

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S La programmazione dei PIC TIMERS.

Nicola Amoroso. Corso introduttivo sui microcontrollori A. S La programmazione dei PIC TIMERS. Corso introduttivo sui microcontrollori A. S. 2007 2008 TIMERS Nicola Amoroso namoroso@mrscuole.net NA L7 1 Timers I timer sono precisi contatori, che possono essere configurati per incrementarsi su fronti

Dettagli

SEA Descrizione. Centralina Controllo Strip LED RGB

SEA Descrizione. Centralina Controllo Strip LED RGB Descrizione La centralina di controllo consente di pilotare Strip LED RGB o Bianchi fino ad un massimo di 10 Mt per Strip da 60 LED/mt o 20 Mt per Strip da 30 LED/Mt. La centralina puo essere configurata

Dettagli

Centralina controllo pompa

Centralina controllo pompa Centralina controllo pompa INDICE 1 Il progetto...4 2 Gestione...6 2.1 TaskA_Main...6 2.2 TaskB_CpuClock...8 2.3 TaskC_InOut...12 2.4 Task ausiliari...13 2.5 Parametri ritentivi...13 3 Sonar...14 3.1 TaskD_Sonar...17

Dettagli

20/10/2014 M. Nappi/FIL 1

20/10/2014 M. Nappi/FIL 1 FIL Lezione 4: Istruzioni Iterative. Michele Nappi mnappi@unisa.it biplab.unisa.it 20/10/2014 M. Nappi/FIL 1 La struttura di Iterazione while Struttura tt di iterazione i Il programmatore specifica un

Dettagli

Elettronica dei Sistemi Programmabili A.A. 2013-2014. Microcontrollori. Introduzione allo sviluppo di progetti

Elettronica dei Sistemi Programmabili A.A. 2013-2014. Microcontrollori. Introduzione allo sviluppo di progetti Elettronica dei Sistemi Programmabili A.A. 2013-2014 Microcontrollori Introduzione allo sviluppo di progetti Premessa Qualunque sistema basato su microcontrollore deve eseguire un codice memorizzato in

Dettagli

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22

Lezione 21 e 22. Valentina Ciriani ( ) Laboratorio di programmazione. Laboratorio di programmazione. Lezione 21 e 22 Lezione 21 e 22 - Allocazione dinamica delle matrici - Generazione di numeri pseudocasuali - Funzioni per misurare il tempo - Parametri del main - Classificazione delle variabili Valentina Ciriani (2005-2008)

Dettagli

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

6 - Blocchi e cicli. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo 6 - Blocchi e cicli Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://pages.di.unipi.it/milazzo milazzo di.unipi.it

Dettagli

Facciamo lampeggiare un led

Facciamo lampeggiare un led Facciamo lampeggiare un led Passiamo a fare qualche esercizio, il più semplice per iniziare a programmare con Arduino è il canonico esercizio blink, che trovate anche negli esempi del programma. Si tratta

Dettagli

Fondamenti di Informatica

Fondamenti di Informatica Fondamenti di Informatica AlgoBuild: Strutture iterative e selettive Prof. Christian Esposito Corso di Laurea in Ingegneria Meccanica e Gestionale (Classe I) A.A. 2016/17 AlgoBuild: Strutture iterative

Dettagli

Corso introduttivo sui microcontrollori. Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic.

Corso introduttivo sui microcontrollori. Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic. Corso introduttivo sui microcontrollori Un sistema tastierino a matrice 4x4 da collegare alla nostra demoboard AnxaPic Nicola Amoroso namoroso@mrscuole.net na_16f88_key4x4 1 Colleghiamo un tastierino a

Dettagli

Assegnazione di una variabile

Assegnazione di una variabile Assegnazione di una variabile Per scrivere un valore dentro una variabile si usa l operatore di assegnazione, che è rappresentato dal simbolo =. Quindi, se scrivo int a; a = 12; assegno alla variabile

Dettagli

Architettura del calcolatore (Seconda parte)

Architettura del calcolatore (Seconda parte) Architettura del calcolatore (Seconda parte) Ingegneria Meccanica e dei Materiali Università degli Studi di Brescia Prof. Massimiliano Giacomin LINGUAGGIO E ORGANIZZAZIONE DEL CALCOLATORE Linguaggio assembly

Dettagli

Elementi di Informatica A. A. 2016/2017

Elementi di Informatica A. A. 2016/2017 Elementi di Informatica A. A. 2016/2017 Ing. Nicola Amatucci Università degli studi di Napoli Federico II Scuola Politecnica e Delle Scienze di Base nicola.amatucci@unina.it Programmazione C++ Parte 1

Dettagli

Variabili e Funzioni. Informatica 1 / 19

Variabili e Funzioni. Informatica 1 / 19 Variabili e Funzioni Informatica 1 / 19 Programmi C e Un programma C e composto da funzioni e variabili Variabile: memorizza valori appartenenti ad un insieme di definizione (dipendente dal tipo) Funzione:

Dettagli

Davide Gennaretti, Matteo Nicolini

Davide Gennaretti, Matteo Nicolini Seminario sui Microcontrollori Davide Gennaretti, Matteo Nicolini AA 2003-04 II Facoltà di Ingegneria Elettronica Cesena Cosa sono i microcontrollori? Piccoli computer concentrati in un chip Un Datapath

Dettagli

Nella parte sx dello schema abbiamo gli input del microcontrollore il quale ha la funzione di elaborare dei dati che acquisisce in tempo reale.

Nella parte sx dello schema abbiamo gli input del microcontrollore il quale ha la funzione di elaborare dei dati che acquisisce in tempo reale. PROPOSTA DI SOLUZIONE PER LA SECONDA PROVA DI MATURITÀ 2018 TRACCIA: Tecnologie e Progettazione dei sistemi elettrici ed elettronici ARGOMENTO: Acquisizione dati in tempo reale con conseguenti azionamenti

Dettagli

Componenti principali

Componenti principali Componenti e connessioni Capitolo 3 Componenti principali n CPU (Unità Centrale di Elaborazione) n Memoria n Sistemi di I/O n Connessioni tra loro Architettura di Von Neumann n Dati e instruzioni in memoria

Dettagli

ROBOTICA Syllabus Versione 1.0

ROBOTICA Syllabus Versione 1.0 ROBOTICA Syllabus Versione 1.0 Modulo Robotica Questo modulo definisce i concetti e le competenze fondamentali relativi ai principi di base di Robotica. Module Goals Chi supera la prova d esame per questo

Dettagli

5 INSOLITI IMPIEGHI DEL 555

5 INSOLITI IMPIEGHI DEL 555 Giovanni Schgör (g.schgor) 5 INSOLITI IMPIEGHI DEL 555 16 February 2010 L' NE555 L'NE555 è un circuito integrato che contiene un multivibratore che può essere configurato come monostabile (timer), come

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Una funzione per i numeri di Fibonacci

Dettagli

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica Dipartimento di Elettronica, Informazione e Bioingegneria Informatica B Sezione D Franchi Alessio Mauro,

Dettagli

STRUTTURA DI UN ALGORITMO 1) LIBRERIE. 2) EVENTUALI COMMENTI // testo

STRUTTURA DI UN ALGORITMO 1) LIBRERIE. 2) EVENTUALI COMMENTI // testo STRUTTURA DI UN ALGORITMO 1) LIBRERIE #include #include include le funzioni di input/output include funzioni di base (pausa...) 2) EVENTUALI COMMENTI // testo 3) MAIN (corpo dell'algoritmo

Dettagli

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} }

ERRATA CORRIGE. void SvuotaBuffer(void); void SvuotaBuffer(void) { if(getchar()!=10) {svuotabuffer();} } ERRATA CORRIGE Pulizia del buffer di input: come fare? (1) Dopo aver richiamato getchar() per prelevare un carattere dal buffer di input, inseriamo una seconda chiamata a getchar(), senza assegnare il

Dettagli

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni

Componenti principali. Programma cablato. Architettura di Von Neumann. Programma cablato. Cos e un programma? Componenti e connessioni Componenti principali Componenti e connessioni Capitolo 3 CPU (Unita Centrale di Elaborazione) Memoria Sistemi di I/O Connessioni tra loro 1 2 Architettura di Von Neumann Dati e instruzioni in memoria

Dettagli

Raccolta Test di Laboratorio di Sistemi a Microcontrollore

Raccolta Test di Laboratorio di Sistemi a Microcontrollore Raccolta Test di Laboratorio di Sistemi a Microcontrollore prof. Corrado Santoro 1 Digital I/O 1. Quale delle seguenti istruzioni permette di porre a 0 la linea PC4? GPIOC->ODR &= (int32_t)0x10; GPIOC->ODR

Dettagli

MULTIVIBRATORI. BISTABILE Entrambi gli stati sono stabili; l uscita commuta solo con un opportuno comando. Esempio i Flip-Flop

MULTIVIBRATORI. BISTABILE Entrambi gli stati sono stabili; l uscita commuta solo con un opportuno comando. Esempio i Flip-Flop MULTIVIBRATORI I multivibratori sono oscillatori che forniscono in uscita tensioni a due livelli diversi qualsiasi. Possono essere positivo e negativo o positivo e zero oppure negativo e zero. Relativamente

Dettagli

Lezione 6: Array e puntatori

Lezione 6: Array e puntatori Lezione 6: Array e puntatori Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Struttura della lezione Una funzione per i numeri di Fibonacci

Dettagli

I dispositivi di input/output

I dispositivi di input/output I dispositivi di input/output I dispositivi di input/output (anche detti periferiche), permettono di realizzare l'interazione tra l'uomo e la macchina La loro funzione primaria è quella di consentire l'immissione

Dettagli

Dati due punti sul piano calcolare la loro distanza

Dati due punti sul piano calcolare la loro distanza Introduzione al C Primo esempio in C Dati due punti sul piano calcolare la loro distanza Soluzione: la distanza fra due punti si calcola secondo il teorema di Pitagora, con la formula: y Distanza = (lato12

Dettagli

Programmare con le interruzioni (2)

Programmare con le interruzioni (2) Programmare con le interruzioni (2) G. Lettieri 12 Aprile 2018 Nelle Figure 1 e 2 riportiamo una versione diversa dell esempio visto la volta precedente. Tutta l elaborazione è stata spostata direttamente

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 5: Funzioni e programmazione modulare Vittorio Scarano Corso di Laurea in Informatica Università degli Studi di Salerno Esercizi (Fibonacci e numeri primi) Funzioni Regole

Dettagli

Le modulazioni impulsive

Le modulazioni impulsive Le modulazioni impulsive a cura di Francesco Galgani (www.galgani.it) Indice 1 Introduzione 2 2 La modulazione PAM 3 2.1 Cenni teorici....................................... 3 2.2 Simulazione con il computer

Dettagli

1

1 1 2 3 4 5 /*acquisizione-dati-2canali-ad-da-pwm.c ACQUISIZIONE DATI E CONTROLLO PWM A 2 CANALI (CON 2 SENSORI E 2 USCITE IN PWM)*/ /** C O N F I G U R A T I O N B I T S ******************************/

Dettagli

MATLAB c. Lucia Gastaldi Dipartimento di Matematica Lezione 4 (15 ottobre 2003)

MATLAB c. Lucia Gastaldi Dipartimento di Matematica  Lezione 4 (15 ottobre 2003) MATLAB c M-file. Lucia Gastaldi Dipartimento di Matematica http://dm.ing.unibs.it/gastaldi/ Lezione 4 (15 ottobre 2003) Esercizio Problema 3: la successione di funzioni f n (x) = (x 2 x) n per 0 x 1 è

Dettagli

Le basi del linguaggio Java

Le basi del linguaggio Java Le basi del linguaggio Java Compilazione e interpretazione Quando si compila il codice sorgente scritto in Java, il compilatore genera il codice compilato, chiamato bytecode. È un codice generato per una

Dettagli

Passare argomenti al programma

Passare argomenti al programma Passare argomenti al programma Quando si invoca un programma è possibile passare degli argomenti ad esso durante la chiamata. Gli argomenti ricevuti saranno stringhe (array di char) quindi l insieme di

Dettagli

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I Lezione 4 Elementi lessicali e espressioni logiche Matricole 2-3 Elementi lessicali il linguaggio C ha un suo vocabolario di base i cui elementi sono detti token esistono 6 tipi di token: parole chiave

Dettagli

Esercitazione Talentis. Marco Branciforte

Esercitazione Talentis. Marco Branciforte Esercitazione Talentis Marco Branciforte Scopo 2 Accendere e variare la luminosita` di un LED PWM => per pilotare il LED Timer 2 Channel 1 - PWM mode 100Hz Periferiche utilizzate 3 ADC => per variare la

Dettagli

Esame di INFORMATICA ARCHITETTURA DI VON NEUMANN. Lezione 4 ARCHITETTURA DI VON NEUMANN

Esame di INFORMATICA ARCHITETTURA DI VON NEUMANN. Lezione 4 ARCHITETTURA DI VON NEUMANN Università degli Studi di L Aquila Facoltà di Biotecnologie Esame di INFORMATICA A.A. 2008/09 Lezione 4 ARCHITETTURA DI VON NEUMANN Anni 40 i dati e i programmi che descrivono come elaborare i dati possono

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 24 settembre 2007 Outline 1 M-file di tipo Script e Function Script Function 2 Elementi di programmazione

Dettagli

GARA NAZIONALE DI ELETTRONICA E TELECOMUNICAZIONI PROVA SCRITTA. 7 maggio 2013

GARA NAZIONALE DI ELETTRONICA E TELECOMUNICAZIONI PROVA SCRITTA. 7 maggio 2013 Soluzione Istituto Statale di Istruzione Secondaria Superiore ETTORE MJORN 24068 SERITE (G) Via Partigiani 1 -Tel. 035-297612 - Fax 035-301672 e-mail: majorana@ettoremajorana.gov.it - sito internet: www.ettoremajorana.gov.it

Dettagli

INFORMATICA. Strutture iterative

INFORMATICA. Strutture iterative INFORMATICA Strutture iterative Strutture iterative Si dice ciclo (loop) una sequenza di istruzioni che deve essere ripetuta più volte consecutivamente. Si consideri ad esempio il calcolo del fattoriale

Dettagli

PIERIN PIC18 UNBOXING

PIERIN PIC18 UNBOXING brabus PIERIN PIC18 UNBOXING 20 June 2013 Dopo pochi giorni dall'"ordine ufficiale" su EY, l'ambito PIERIN PIC18 è arrivato anche a casa mia! PIERIN_1.jpg L'oggetto è indubbiamente pratico e versatile,

Dettagli

Iterazione A. Ferrari

Iterazione A. Ferrari Iterazione A. Ferrari Iterazioni (cicli) L iterazione è una struttura che consente di ripetere più volte l esecuzione di un insieme di istruzioni. Due tipi di iterazione: iterazioni enumerative: consentono

Dettagli

Università degli Studi di Cassino

Università degli Studi di Cassino Corso di Gestione eccezioni nel MIPS Interruzioni Anno Accademico 2004/2005 Francesco Tortorella Modi di esecuzione user / kernel Due modi di esecuzione: User kernel Per ognuno dei due modi di esecuzione

Dettagli

Esercitazione 3. Espressioni booleane I comandi if-else e while

Esercitazione 3. Espressioni booleane I comandi if-else e while Esercitazione 3 Espressioni booleane I comandi if-else e while Esercizio Si consideri la seguente istruzione: if (C1) if (C2) S1; else S2; A quali delle seguenti interpretazioni corrisponde? if (C1) if

Dettagli

Appunti di informatica. Lezione 4 anno accademico 2015-2016 Mario Verdicchio

Appunti di informatica. Lezione 4 anno accademico 2015-2016 Mario Verdicchio Appunti di informatica Lezione 4 anno accademico 2015-2016 Mario Verdicchio Numeri primi Si definisce primo un numero intero maggiore di 1 che ha due soli divisori: se stesso e 1 Esempi di numeri primi:

Dettagli

Università degli Studi di Cassino

Università degli Studi di Cassino Corso di Gestione eccezioni nel MIPS Interruzioni Anno Accademico 2007/2008 Francesco Tortorella Modi di esecuzione user / kernel Due modi di esecuzione: User kernel Per ognuno dei due modi di esecuzione

Dettagli

$QDOLVLGHOSURJUDPPDTXDGUDWR

$QDOLVLGHOSURJUDPPDTXDGUDWR $QDOLVLGHOSURJUDPPDTXDGUDWR /* */ calcolare l area del quadrato #include main(){ int lato, area; printf("lato "); scanf("%d", &lato); if(lato < 0) printf("errore nei dati \n"); else { area =

Dettagli

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main()

#include <stdio.h> /* l esecuzione comincia dalla funzione main */ int main() Primi passi Il mio primo programma #include /* l esecuzione comincia dalla funzione main */ int main() { printf( Hello World!\n" ); return 0; /* il programma termina con successo */ } /* fine

Dettagli

Capitolo IX. Convertitori di dati

Capitolo IX. Convertitori di dati Capitolo IX Convertitori di dati 9.1 Introduzione I convertitori di dati sono circuiti analogici integrati di grande importanza. L elaborazione digitale dei segnali è alternativa a quella analogica e presenta

Dettagli

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto 14 1. Dato un numero dire se è positivo o negativo 2. e se il numero fosse nullo? 3. Eseguire il prodotto tra

Dettagli

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO

ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE FORNITI DAL LINGUAGGIO C STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO ANALIZZIAMO NEI DETTAGLI GLI STATEMENTS DI SELEZIONE E DI RIPETIZIONE ORNITI DAL LINGUAGGIO C Premessa: STATEMENT SEMPLICE STATEMENT COMPOSTO BLOCCO Uno ement semplice termina con ; come, ad esempio: ressione;

Dettagli

Modi di esecuzione user / kernel

Modi di esecuzione user / kernel Corso di Gestione eccezioni nel MIPS Interruzioni Anno Accademico 2006/2007 Francesco Tortorella Modi di esecuzione user / kernel Due modi di esecuzione: User kernel Per ognuno dei due modi di esecuzione

Dettagli

LINEE GUIDA PER LA CONNESSIONE DI MCP PLUS A VIDEOTERMINALI PROFACE SERIE GP

LINEE GUIDA PER LA CONNESSIONE DI MCP PLUS A VIDEOTERMINALI PROFACE SERIE GP Introduzione LINEE GUIDA PER LA CONNESSIONE DI MCP PLUS A VIDEOTERMINALI PROFACE SERIE GP Questa nota applicativa fornisce alcuni elementi base per interfacciare il controllore MCP Plus ad un videoterminale

Dettagli

Laboratorio di Informatica I

Laboratorio di Informatica I Struttura della lezione Lezione 2: Elementi lessicali, casting e while Vittorio Scarano Laboratorio di Informatica I Corso di Laurea in Informatica Università degli Studi di Salerno Soluzione agli esercizi

Dettagli

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii

CORSO ARDUINO. Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM Jacopo Belli Giulio Fieramosca Luca Mattii CORSO ARDUINO Jacopo Belli Giulio Fieramosca Luca Mattii GOLEM 2016 1 FAQ time domande e risposte? 2 Iterazioni: while Si usa per ripetere un blocco di codice finché una condizione è vera, ma senza tenere

Dettagli

Costrutti di Programmazione Strutturata. Informatica 1 / 22

Costrutti di Programmazione Strutturata. Informatica 1 / 22 Costrutti di Programmazione Strutturata Informatica 1 / 22 Costrutti di Base Ricordi? Un algoritmo è detto strutturato se usa solo Sequenze di istruzioni Selezioni (se predicato allora fai istruzioni altrimenti

Dettagli

Ing. Lorenzo Vismara

Ing. Lorenzo Vismara Ing. Lorenzo Vismara ! "# #!$#%&# '(!)&!*)&#*$# +!, +$-.(( #!((%&#, #!& %&) /$#01&&#2! 0#( 3452 $ 6#( 1 2 &## #!7 #89): #;##( 1? )#&)< $9): #@82 #)AA)#&#&$( #7)&#7& @B && ##@A&#C 7 $C#&7 @B A&#)@#7&#

Dettagli