Progettazione nell'ambiente LPCXpresso Introduzione alla progettazione di sistemi embedded a microcontrollore Prime esperienze con la breadboard All text and image content in this document is licensed under the Creative Commons Attribution-Share Alike 3.0 License (unless otherwise specified). S. Salvatori - Microelettronica aprile 2016 (1 di 44)
Sommario Breadboard: Connessioni interne Esempio Alimentazione Primo esercizio: LED Secondo esercizio: key-led I/O digitale Problema rimbalzo Esercizi 2/44
Breadboard 3/44
Breadboard Connessioni interne 4/44
Breadboard Connessioni interne collegamenti tra componenti linee di alimentazione 5/44
Breadboard CF esempio R1 10k R2 2-10k 6 OA 3 + 6/44
Breadboard CF esempio R1 10k R2 2-10k 6 OA 3 + 7/44
Breadboard CF esempio R1 10k R2 2-10k 6 OA 3 + 8/44
Breadboard CF esempio R1 10k R2 2-10k 6 OA 3 + 9/44
Breadboard Alimentazione singola 10/44
Strumenti utili 11/44
Prima prova: livello 0! 12/44
LED 3V3 R V LED 1.7 V I LED 2mA [3.3 1.7] R =800Ω 2 Scelgo 750 Ω Va bene un resistore tra 500 e 1500 Ω 13/44
LED 27 1 54 28 14/44
LED 3V3 GND 15/44
LED 3V3 R GND 3V3 16/44
LED 3V3 R GND 3V3 17/44
LED GND 3V3 3V3 R 18/44
Preparazione resistori 1 2 3 4 19/44
LED GND 3V3 3V3 R 20/44
Progetto blinker 21/44
Blinker 3V3 GND Usiamo P0.4 22/44
Blinker GND P0.4 P0.4 3V3 R 23/44
Blinker 24/44
Blinker 1. Duplicare il progetto Lab2c_delay e denominare la copia come: Lab4a_blinker ; 2. Inserire nella funzione main le istruzioni necessarie per far lampeggiare il LED esterno con una frequenza abbastanza bassa in modo da poterla osservare; int main (void) { /* SystemClockUpdate()... */ SystemClockUpdate(); /* initialize GPIO */ /* P0.4 DEFINED AS OUTPUT */ /* TURN OFF LED */ /* Loop forever */ while (1) { /* TURN ON LED */ delayms(500); /* TURN OFF LED */ delayms(500); } } 25/44
Seconda prova: livello 1 26/44
Key-led 3V3 S R S: norm. aperto Come facciamo a farlo lavorare in logica negata : se premo spengo? 27/44
Key-led S 3V3 R Devo modificare il cablaggio (inoltre si ha assorbimento di corrente anche se LED off) La soluzione hard-wired non si presta ad agevoli operazioni di aggiornamento 28/44
Progetto key-led 29/44
Key-led P0.4 R GND Resistore di pull-up. Va bene tra 10 kω e 100 kω P2.0 1k P2.0 P0.4 3V3 3V3 10k S Resistore di protezione. Va bene tra 100 Ω e 1 kω 30/44
Key-led 1. Duplicare il progetto precedente e denominare la copia come: Lab4b_keyled ; 2. Inserire nella funzione main le istruzioni necessarie per accendere o spegnere il LED in base allo stato del pulsante int main (void) { /* SystemClockUpdate()... */ SystemClockUpdate(); /* initialize GPIO */ /* P0.4 DEFINED AS OUTPUT */ /* TURN OFF LED */ /* Loop forever */ while (1) { if(lpc_gpio2->fiopin & (1 << 0)) /* TURN OFF LED */ else /* TURN ON LED */ } } 31/44
Progetto toggle 32/44
Toggle 1. Duplicare il progetto precedente e denominare la copia come: Lab4c_toggle ; 2. Inserire nella funzione main le istruzioni necessarie per cambiare lo stato del LED ogni volta che viene premuto il pulsante P0.4 R Non modificare il montaggio rispetto al progetto precedente P2.0 3V3 1k 10k S 33/44
Toggle Diagramma di flusso toggle 0 T key pressed F toggle=1 F toggle ~toggle T Accendi LED Spegni LED Ma si possono adottare altre soluzioni 34/44
Toggle 1. Duplicare il progetto precedente e denominare la copia come: Lab4c_toggle ; 2. Inserire nella funzione main le istruzioni necessarie per cambiare lo stato del LED ogni volta che viene premuto il pulsante P0.4 R Che problema si osserva? 3V3 P2.0 1k 10k S 35/44
Toggle Problema rimbalzo toggle 0 T key pressed F toggle=1 F toggle ~toggle T Spegni LED Accendi LED Pausa 36/44
Progetto set-reset 37/44
Set-reset Duplicare il progetto precedente e denominare la copia come: Lab4d_set_reset ; P0.4 R 3V3 P2.0 1k 10k S 38/44
Set-reset Soluzione più robusta per limitare I problemi di rimbalzo: if (( ( (LPC_GPIO2->FIOPIN) & (1 << 0) ) == 0 ) && (set == 0) ) { // se viene PREMUTO il pulsante status =!status; // cambia il valore di status NOTA: if (status) LPC_GPIO0->FIOSET = 1 << 4; else LPC_GPIO0->FIOCLR = 1 << 4; set = 1; // segnalamento set delayms(25); // breve pausa } Le variabili set e status vanno inizializzate a '0' prima di entrare nel ciclo infinito in cui è riportato questo codice if (( ( (LPC_GPIO2->FIOPIN) & (1 << 0) )!= 0 ) && (set == 1) ) { // se viene RILASCIATO il pulsante set = 0; //segnalamento reset delayms(25); // breve pausa } 39/44
Esercizi 40/44
Esercizi 1. Progetto set-reset Disegnare il diagramma di flusso dell'algoritmo il cui codice è quello riportato nella precedente slide. 41/44
Esercizi 2. Cronometro Si deve progettare un dimostrativo di cronometro che soddisfi le seguenti specifiche: Impostare TIMER 1 con risoluzione di 1 ms; avviare TIMER 1 quando viene premuto un pulsante una prima volta; arrestare TIMER 1 quando viene premuto lo stesso pulsante una seconda volta; salvare il valore di conteggio del timer in una variabile e resettare lo stesso in modo che il sistema riparta dal punto 2 e possa eseguire un nuovo conteggio premendo nuovamente il pulsante. 42/44
Esercizi 3. Provariflessi Si deve progettare un dimostrativo di provariflessi che soddisfi le seguenti specifiche: Impostare TIMER 1 con risoluzione di 1 ms; EVENTO 1: se viene premuto un pulsante bisogna accendere un LED e avviare TIMER 1; EVENTO 2: TIMER 1 deve essere arrestato quando viene premuto un altro pulsante; salvare il valore di conteggio del timer in una variabile e resettare il timer stesso in modo che il sistema possa ripartire, con la funzionalità descritta, dall'evento 1. NOTA: Nella fase di debug bisogna inserire un breakpoint in posizione opportuna in modo da poter osservare il valore della variabile in cui viene caricato il tempo trascorso tra gli eventi 1 e 2. L'arresto, tuttavia, dovrà avvenire solo se interviene l'evento 2. 43/44
Grazie per l'attenzione domande? stefano.salvatori@uniroma3.it All text and image content in this document is licensed under the Creative Commons Attribution-Share Alike 3.0 License (unless otherwise specified). 44/44