Estratto del documento

Laboratorio di misure - Lezione 1

Firewall e microcontrollori

Firewall: parliamo di un qualcosa che gira su una macchina a molto basso livello, non si basa su un SO, e a contatto diretto con la macchina. La differenza è che generalmente il SO ci avvisa quando scriviamo cose pericolose, tipo accessi in memoria non giusti ecc.. qui invece andiamo a configurare i registri di questi microcontrollori in maniera tale da avere pieno controllo sulla macchina, quindi potrebbe addirittura distruggersi (metafora).

Lavoreremo sulla parte più interna del microcontrollore (MC), esempio la macchina del caffè non sono necessari giga di RAM, memoria ecc.. ma ho 2 problemi:

  • Consumi Poco
  • Miniaturizzazione, cioè quanto mi costa realizzare un computer così piccolo.

Un microcontrollore è un sistema in cui c’è un chip e all’interno di questo chip ci sono una serie di cose che ti permettono di funzionare senza dover aggiungere delle cose esterne. Il numero di componenti esterni per programmi semplici sono molto poche, quindi consumi e frequenze sono molto limitate sull’ordine dei 4-8 MHz.

Molto spesso nell’ambito dell’automatica mi costa molto più un microcontrollore a 8-16 bit piuttosto che 32, perché? Sembra un paradosso ma non lo è, perché noi se dovessimo mandare una navicella nello spazio non mettiamo un processore appena uscito ma ne mettiamo uno che conosciamo bene, con tutte le patch, sappiamo quanto dura ecc.. perché sennò potrebbero esserci degli errori che non riuscirei a gestire in remoto. Conta molto la sicurezza, quindi conoscere un oggetto e i suoi problemi sono qualità fondamentali.

Il firewallista (colui che realizza i firewall) ha sempre problemi sulle prestazioni, perché sono oggetti pensati per determinate funzioni di certo non gli posso mettere Android sopra. Però c’è anche un altro discorso da fare: il firewallista non usa librerie fatte da altri ma se le fa lui. Quindi noi saremo obbligati a programmare in assembly? La risposta è dipende, nel caso nostro no, perché programmiamo in C. Ma gli anni passati si programmava in assembly perché se noi dobbiamo realizzare un firewall che sia nello stesso tempo efficiente ed efficace, se siamo bravi programmatori assembler potremmo fare meglio del compilatore. Però c’è un problema, la programmazione in assembly richiede molto tempo per poter fare qualcosa, quindi qui usiamo C.

Lo scopo di questo corso è insegnarci la filosofia di come programmare un qualunque microcontrollore.

Libri di testo e scheda di valutazione

Scheda di valutazione: qualcosa che ci permette di valutare tante possibilità di questo microcontrollore, quasi tutte. Il microcontrollore è quella parte nera, bisogna inserirla da qualche parte -> scheda di valutazione.

Noi useremo solo dei manuali che in realtà prendono il nome di datasheet, ma per non confonderci non li chiameremo così.

  • Manuale della scheda = Manuale che contiene la scheda di valutazione
  • Datasheet = Manuale dello specifico controllore che usiamo
  • Reference Manual = Manuale della famiglia di controllori che noi usiamo, qui ci spiega tutte le funzionalità dei microcontrollori di quella famiglia in maniera dettagliata, lasciando poi al datasheet del microcontrollore, le caratteristiche del particolare microcontrollore.

Non è detto che tutti i microcontrollori abbiano tutte le funzionalità della propria famiglia. In realtà esiste anche un manuale delle librerie, perché la casa costruttrice ha prodotto numerosi pacchetti per rendere efficace i loro prodotti. Noi useremo solo piccoli pacchetti di librerie, quelle che servono per poter far partire il nostro microcontrollore. Anche in questo caso se dovessimo mandare un razzo nello spazio non potremmo fidarci di queste librerie.

F3DISCOVERY è la scheda. Microcontrollore a 32 bit -> i registri di memoria sono a 32 bit, questa scheda di valutazione permette di utilizzare come sistema di programmazione una presa USB collegata a questo ST-LINK V2, è un’interfaccia di programmazione (parte superiore della scheda di valutazione, dove vedi le prese USB).

Essendo un CORTEX M4 useremo IAR. Cosa monta questa scheda di valutazione?

  • Sensori esterni = sono rispettivamente accelerometro, magnetometro e giroscopio, sono presenti sulla scheda ma non sono interni al microcontrollore quindi sono esterni e comunicheranno con il microcontrollore tramite interfacce digitali e bus, ad esempio Ethernet, USB ecc.
  • Tasto USER = pensato per poter essere utilizzato dall’utente nella sua applicazione.
  • Tasto RESET = gestisce il reset del microcontrollore.

Oggetto argentato (vicino al microcontrollore) con scritto 8000 sopra è un quarzo a 8 MHz. Quarzo = componente fondamentale per i circuiti oscillanti, questi per poter funzionare hanno bisogno di un clock. Il segnale di clock è un segnale periodico quindi per poterlo utilizzare devo usare un circuito oscillante, ma il periodo è oscillante, a volte può essere 19 altre 19,5, quindi non sappiamo come vengono sequenziate le istruzioni, pertanto deve essere più stabile -> si usa il quarzo, ovviamente dipende sempre dal costo.

STREEP = strisce metalliche laterali tipo PC1, PC3, PB0 ecc.. sia a dx che sx, sono dei pettini metallici, ognuno dei quali è un piccolo pezzetto di metallo, che servono per essere collegati con i "piedini" del microcontrollore (ovvero quella parte argentata intorno al microcontrollore) che servono per capire se qualcuno ha schiacciato un pulsante, per far partire un motore ecc.. 0 = 0 Volt, 1 = Volt (dipende da quanto è stato impostato).

Sulle Streep laterali ci sono delle lettere A, B, C -> il costruttore ha deciso di radunare le varie linee ingresso/uscita, che sono periferiche general purpose i/o, quindi i/o che possiamo usare come vogliamo, in PORT in cui GENERALMENTE ciascun port ha 16 linee 0-15, in realtà non tutti i port hanno 16 linee, ma altri di meno, la nomenclatura va da A ad F.

LED = oggetti in basso centralmente, ne sono 8, un LED, ovvero DIODO LED, normalmente è un cortocircuito, nel momento in cui applico una tensione al di sopra della soglia (circa 0,7 V) viene emessa anche una luce, il cui colore dipende da come l’ho costruito, bisogna sempre mettere una resistenza in serie (infatti c’è anche sulla scheda subito dopo il LED), perciò riuscendo a controllare il valore posso accendere un LED.

Documentazione e programmazione

Quando voglio sapere tutte le caratteristiche del mio microcontrollore vado sul Datasheet, da adesso in poi tutti i componenti interni al microcontrollore verranno chiamate periferiche.

Schema a blocchi di principio del microcontrollore: (Datasheet) tutti questi oggetti sono collegati con delle frecce ad AHB2, APB ecc.. in cui c'è una frequenza massima indicata, questi sono dei bus per comunicare con la CPU, la frequenza massima del sistema è 72 MHz, non tutti i bus vanno a quella frequenza massima, perché non ne hanno la necessità, per avere questa separazione viene usato un Albero del Clock, che è difficilissimo da realizzare, in cui uno dei primi problemi è dato dallo sfasamento.

Le nostre CPU non vanno sempre alla frequenza massima, ma vanno anche ad una frequenza minore, questi oggetti sono pensati anche per oggetti in cui c'è una batteria, quindi se una periferica non deve consumare non ha senso metterla alla frequenza massima.

La prima operazione da fare è sempre l’attivazione della periferica, sennò i registri non funzionano, perché sono sempre dei circuiti digitali quindi senza clock non arriva -> il programma non funziona.

Tabella 4.12 (Manuale della scheda) Le varie linee del microcontrollore a cosa sono state collegate: questa tabella è fondamentale perché sono scelte arbitrarie, quindi potrei collegare come voglio. Tutti i manuali sono necessari, perché un manuale non sa dell’esistenza dell’altro.

PA0 Tasto User. Le informazioni interne invece non possiamo prenderle da qua ma dobbiamo vedere all’interno del manuale del microcontrollore!

Reference manual e utilizzo delle periferiche

Ogni capitolo introduce la periferica del microcontrollore, ne spiega le modalità operative e spiega quali registri da usare per ottenere quelle configurazioni.

Capitolo 2: Figure 1 ci dà una matrice che gestisce le comunicazioni delle varie periferiche con CPU, memoria ecc.. in particolare esiste una mappa che ad ogni periferica mi indica:

  • BUS = il bus al quale è collegata, quindi quale clock attivare
  • (Boundary Address) = Dopo c’è uno spazio di indirizzamento in memoria, le periferiche sono memory-mapped, quindi in C possiamo usarle come variabili.

Noi opereremo Bit a Bit, quindi con le varie operazioni: And, Or e Not.

Lezione 2

La volta scorsa abbiamo parlato della documentazione che utilizziamo durante il nostro corso (Manuali). Durante il corso programmeremo in C e sull’ambiente di programmazione IAR for ARM (Utilizziamo questa versione perché l’architettura presente nel microcontrollore che utilizzeremo è un CORE di tipo ARM, un CORTEX M4). Quest’ambiente è un “Cross Compiler” ovvero ci permette di passare da linguaggio C a linguaggio macchina (File che può essere eseguito).

Primo programma

Vediamo come realizzare il nostro primo programma:

  • Dopo aver aperto IAR per creare un nuovo progetto si deve seguire il percorso “Project->Create New Project->C->main”.
  • Facendo tasto destro sul nome del progetto -> Opzioni devo andare a modificare delle opzioni:
    • In “General Options” devo selezionare Device e inserire il nome del microcontrollore che vogliamo utilizzare, nel nostro caso “ST->STM32F3->STM32F303-> STM32F303VC”.
    • Nel tab “Library Configuration” andremo a mettere in Library il campo “Full”, facendo così possiamo utilizzare delle librerie che non vengono di norma incluse nel file e nel progetto, questo perché nell’ambito dei microcontrollori lo spazio è importante e avere cose che non servono è sempre uno svantaggio.
  • In “C/C++ Compiler” troviamo il tab PreProcessor, nel campo “Additional include …” dobbiamo andare a mettere i link alle cartelle che contengono i file .h che vogliamo includere.
  • In “Debugger” (che è uno strumento Software o Hardware che ci consente di andare a verificare la correttezza del programma, ovvero se le istruzioni scritte ci fanno fare ciò che volevamo fare) nel campo Driver metteremo “ST-LINK” (Anche lui come qualunque altro tipo di debugging ha i suoi limiti).
  • In “Debugger” nel tab “Download” bisogna verificare che sia messa la spunta sul campo “Use Flash Loader” (Vedere che cos’è).
  • In “ST-LINK” devo andare a configurare quest’interfaccia di comunicazione. Nel campo “Interface” dobbiamo andare a mettere la spunta su SWD (Poiché noi utilizziamo il collegamento tramite USB e come sappiamo su USB i dati viaggiano in maniera seriale).

Fatto tutto questo non ci resta che scrivere il nostro progetto. Che cosa scriviamo?

L’altra volta abbiamo capito che per poter utilizzare il microcontrollore dobbiamo configurare i registri delle varie periferiche del nostro microcontrollore (che come dicemmo sono Memory Mapped, ovvero che io posso accedere a questi registri come se fossero delle semplici locazioni di memoria, accedendo semplicemente conoscendo l’indirizzo e trattandoli come delle variabili).

Configurazione dei registri

Dove trovo lo spazio di indirizzamento del mio microcontrollore? (Possibile domanda d’esame)

La trovo nel Reference Manual (Manuale della famiglia) e in particolare nel capitolo 2 (System and Memory overview) dove c’è una tabella che ci fa vedere tutto lo spazio di indirizzamento. Le informazioni di questa tabella sono essenziali poiché associa ad ogni periferica il suo indirizzo e il bus a cui fa riferimento.

Perché è importante sapere il bus che fa riferimento a una periferica? (Possibile domanda d’esame)

Per utilizzare le periferiche come abbiamo visto bisogna in primis abilitare il clock, ma per abilitare il clock devo conoscere a che bus è collegata la periferica che voglio utilizzare, perché altrimenti non so quale clock abilitare. All’interno del registro di abilitazione del clock di quel bus vado ad abilitare il clock (Bisogna farlo sempre).

Primo programma: Accensione del LED blu

Per accendere un LED devo imporre una differenza di potenziale ai capi del mio LED che superi la tensione di soglia (Circa 0.7V). Questa è una scheda che funziona solo con tensioni positive, non negative. Come faccio ad imporre questa tensione?

Devo usare le linee del microcontrollore, ma quale? Per capirlo faccio riferimento al manuale della scheda (Poiché solo colui che ha costruito la scheda sa come ha collegato le varie componenti). Il manuale della scheda è il STM32F3Discovery. Nella sezione 3 (Features) del manuale ci sono i vari pin a cui sono collegati i LED [Nel caso del LED blu PE8].

Torniamo quindi nel Reference Manual e nel Capitolo 8 dove troviamo le funzioni principali, le possibili configurazioni e le informazioni di GPIO (General purpose I/O). Nel sottocapitolo 8.4 ci sono i registri.

  • In 8.4.1 ci sono i registri che ci consentono di indicare qual è la modalità di utilizzo della linea, il registro MODER, che presenta bit per ogni linea e riesce a gestire tutte le 16 linee (Ricordiamo che ogni porta ha 16 linee). Nel caso del nostro programma vogliamo impostare la linea 8 in uscita digitale (01). Questo registro è mappato in memoria rispetto all’indirizzo base di questa periferica con un offset pari a 00 (Se fosse diverso da 0 andrebbe aggiunto all’indirizzo base). Di default sono quasi tutti a 0 tranne i bit della porta A e della porta B (Meglio non cambiarli).
  • In 8.4.5 ci sono i registri Input Data Register (IDR). Ci sono 16 bit utilizzabili, ciascuno collegato a una determinata porta. Come si legge sono solo ‘r’ non ‘rw’, quindi possiamo solo leggere, non scrivere.
  • In 8.4.6 ci sono i registri Output Data Register (ODR). Anche qui 16 bit collegati a ciascuna porta. Alla fine del capitolo c’è una tabella che sintetizza tutti i registri (Per ora abbiamo citato solo quelli più usati ma ce ne sono altri nello stesso capitolo).

Adesso che stiamo per scrivere il programma ricordiamoci che la prima cosa da fare è attivare il clock. Andiamo nel capitolo 7, in particolare vediamo i suoi registri (7.4) e vediamo che esiste un registro AHBENR, ovvero registro per l’abilitazione del clock per tutte le periferiche collegate sul bus AHB. Il Bit 21 è proprio il bit che mi fa abilitare il clock alla GPIOE.

Per individuare l’indirizzo di questo registro ci segnamo l’offset (0x14) e l’indirizzo della periferica RCC (dal manuale RefMan capitolo 2) (0x4002 1000). Dunque l’indirizzo del registro che mi consente di abilitare il clock alla GPIOE è la loro somma, quindi 0x4002 1014. Allo stesso modo definisci l’indirizzo del MODER e quello del GPIOE_ODR. (Si fa questa cosa ogni volta che si vuole individuare l’indirizzo di un registro).

Creo un puntatore ad un Unsigned Int e quando lo utilizzo è importante fare il cast (unsigned int*). Se non lo si fa è come assegnare un int ad un unsigned int. Per mettere 1 nel bit 21 (Nel caso dell RCC_AHBENR) faccio uno shift di 21 (1<<21). Per mettere 1 nel bit 16 del GPIOE_MODER potrei usare lo shift come prima, ma posso anche assegnare questo bit tramite una parola codice in esadecimale. Al numero che corrisponde a moder 8 e 9 metto 1 che in esadecimale è 0001. Mettendo così 01 a moder 8. Bisogna pensare che ogni cifra di questa parola codice corrisponde a 4 cifre in esadecimale e quindi partendo dal registro 31 mi faccio il conto. Per mettere 1 nel bit 8 del registro GPIOE_ODR faccio la stessa cosa fatta prima.

Infine è importante non dimenticare il while(1) finale. È un ciclo infinito e lo uso per creare un loop infinito. Perché? Quando non ho un sistema operativo non esco dal task ma dall’esecuzione di tutta l’attività della CPU, non so bene dove va a finire, quindi se non ho pensato a cosa potrebbe succedere è meglio bloccare nel programma. Potrebbe sennò finire in uno stato indefinito che può portare guai. Per mandare in esecuzione il programma bisogna premere il tasto verde in alto.

Esercizio per la prossima volta:

  • Accendere LED blu e rosso
  • Accendere blu, rosso e poi spegnere blu
  • Andare su PA0 e leggere valore di questo quando tasto user premuto e quando no.

Lezione 3

// Distribuzioni schede ai gruppi

L’ultima volta abbiamo acceso un LED, poi vi ho assegnato di accendere un altro LED.

// Programma per accendere un solo LED.

// Accensione 2 LED.

*Ragazzo fa vedere la sua soluzione* (un po’ di errori).

// Soluzione del prof

Abilito come prima cosa il clock della periferica, altrimenti non funziona nulla. Successivamente, la cosa su cui fare attenzione è che faccio due operazioni sul puntatore p (ultime due righe prima del while). Sto andando ad assegnare per la linea PE8 la modalità d’uscita, per la seconda istruzione invece la sto andando ad assegnare a PE9. Infatti vado a controllare nel Ref.Man, nel capitolo 8.4 GPIO REGISTER e vedo che il bit da abilitare è il 18 (porlo uguale a 1). Le due operazioni però sono diverse: una è di assegnazione, l’altra è di OR uguale, devo farlo altrimenti il mio programma non fungerà correttamente.

Anteprima
Vedrai una selezione di 14 pagine su 61
Appunti Laboratorio di Misure Pag. 1 Appunti Laboratorio di Misure Pag. 2
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 6
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 11
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 16
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 21
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 26
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 31
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 36
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 41
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 46
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 51
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 56
Anteprima di 14 pagg. su 61.
Scarica il documento per vederlo tutto.
Appunti Laboratorio di Misure Pag. 61
1 su 61
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/07 Misure elettriche e elettroniche

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher fabiown di informazioni apprese con la frequenza delle lezioni di Laboratorio di Misure e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Tocchi Alessandro.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community