ESERCITAZIONE 14 - RTOS NCP L1_L23_L7
Implementazione del protocollo di comunicazione utilizzando l'RTOS
OBIETTIVO
- Implementare i layer di comunicazione L1,L2,L3 e L7
PROCEDIMENTO / SPECIFICHE INIZIALI
- Ogni scheda possiede un macaddress. E' possibile assegnare dinamicamente al reset l'indirizzo utilizzando i pulsanti della scheda
- Documentare il progetto, definendo in modo preciso le specifiche,
- Nelle premesse teoriche uart e tiva
Implementazione del protocollo di comunicazione utilizzando l'RTOS
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 12 - RTOS LedDog
Lampeggio di led con i Thread dell'CMSIS-RTOS
Creazione di protocollo di comunicazione per l'invio di comandi tra due schede collegate tramite Spi
Creazione di protocollo di comunicazione per l'invio di comandi tra due schede collegate tramite Uart
Misure di segnali utilizzando i timer del microcontrollore
OBIETTIVO
- Gestione dei Timer interni al microcontrollore
PROCEDIMENTO / SPECIFICHE INIZIALI
Task per il controllo degli eventi pressione e click gestiti con un algoritmo non bloccante
OBIETTIVO
- Gestione di task concorrenti
PROCEDIMENTO / SPECIFICHE INIZIALI
Creazione della libreria Systick
GRIGLIA DI VALUTAZIONE:
- 1pt - Utilizzo corretto dei nomi dei progetti, suddivisione in sezioni dei vari file
- 2pt - Intestazione moduli, intestazione routine, modello main corretto
- 2pt - Indentazione codice, magic numbers, ...
Implementazione del protocollo di comunicazione utilizzando l'RTOS
OBIETTIVO
- Implementare i layer di comunicazione L1,L2,L3 e L7
PROCEDIMENTO / SPECIFICHE INIZIALI
- Ogni scheda possiede un macaddress. E' possibile assegnare dinamicamente al reset l'indirizzo utilizzando i pulsanti della scheda
- Documentare il progetto, definendo in modo preciso le specifiche,
- Nelle premesse teoriche uart e tiva
GRIGLIA DI VALUTAZIONE:
- 02pt - Obiettivo
- 20pt - Collaudo
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 13 - RTOS Network Comunication Protocol- 02pt - Obiettivo
- 38pt - Descrizione del progetto
- 40pt - Codice
-------------------------------------------------------------------------------------------------------------
Implementazione del protocollo di comunicazione utilizzando l'RTOS
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 12 - RTOS LedDog
Lampeggio di led con i Thread dell'CMSIS-RTOS
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 11 - Network Comunication Protocol L0 SpiCreazione di protocollo di comunicazione per l'invio di comandi tra due schede collegate tramite Spi
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 10 - Network Comunication Protocol L0 UartCreazione di protocollo di comunicazione per l'invio di comandi tra due schede collegate tramite Uart
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 09 - TimerCaptureMisure di segnali utilizzando i timer del microcontrollore
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 08 - LedPwm (11.01.18)
Controllo di led tramite il modulo PWM del microcontrollore
- Gestione dei Timer interni al microcontrollore
PROCEDIMENTO / SPECIFICHE INIZIALI
- Creare la libreria timer.c con le seguenti routine:
void TimerConfigure(uint32_t timer, uint32_t configs);
void TimerConfigurePwm(uint32_t timer, uint32_t reload, uint32_t match);
void TimerConfigure(uint32_t timer, uint32_t configs);
void TimerConfigurePwm(uint32_t timer, uint32_t reload, uint32_t match);
- Creare il modulo LedPwm.c con le seguenti routine:
//------------------------------------------------------------------------------------------
// Imposta il segnale pwm
// Usando un timer a 16bit e il clock a 16Mhz
// Valore max periodo = Reload_max * Tclock = 2^16*62,5ns = 4096us
// Usando un timer a 32bit e il clock a 16Mhz
// Valore max periodo = Reload_max * Tclock = 2^32*62,5ns = 268435ms
//
// INPUT:
// periodo [ms] = durata del periodo. valore minimo=1, max=???
// duty = durata dell'impulso. valore minimo=0, max=100
//
// Autore: Bilardo Filippo
// 12.01.18 1.0 Versione iniziale
//
void LedPwmLampeggio(int periodo, int duty);
//------------------------------------------------------------------------------------------
// il parametro luminosità permette di impostare la luminosità del led dal valore
// 0 (spento) al valore 100 (massima luminosità)
//
// Il periodo del segnale è fisso a 10us
//
// Autore: Bilardo Filippo
// 12.01.18 1.0 Versione iniziale
//
void LedPwmLuminosita(int luminosita);
//------------------------------------------------------------------------------------------
// Test delle funzioni LedPwmLuminosita e LedPwmLampeggio
//
// Autore: Bilardo Filippo
// 12.01.18 1.0 Versione iniziale
//
void LedPwmTest(int nrtest);
//------------------------------------------------------------------------------------------
// Imposta il segnale pwm
// Usando un timer a 16bit e il clock a 16Mhz
// Valore max periodo = Reload_max * Tclock = 2^16*62,5ns = 4096us
// Usando un timer a 32bit e il clock a 16Mhz
// Valore max periodo = Reload_max * Tclock = 2^32*62,5ns = 268435ms
//
// INPUT:
// periodo [ms] = durata del periodo. valore minimo=1, max=???
// duty = durata dell'impulso. valore minimo=0, max=100
//
// Autore: Bilardo Filippo
// 12.01.18 1.0 Versione iniziale
//
void LedPwmLampeggio(int periodo, int duty);
//------------------------------------------------------------------------------------------
// il parametro luminosità permette di impostare la luminosità del led dal valore
// 0 (spento) al valore 100 (massima luminosità)
//
// Il periodo del segnale è fisso a 10us
//
// Autore: Bilardo Filippo
// 12.01.18 1.0 Versione iniziale
//
void LedPwmLuminosita(int luminosita);
//------------------------------------------------------------------------------------------
// Test delle funzioni LedPwmLuminosita e LedPwmLampeggio
//
// Autore: Bilardo Filippo
// 12.01.18 1.0 Versione iniziale
//
void LedPwmTest(int nrtest);
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 07 - PulsTestTaskTask per il controllo degli eventi pressione e click gestiti con un algoritmo non bloccante
OBIETTIVO
- Gestione di task concorrenti
PROCEDIMENTO / SPECIFICHE INIZIALI
- Il sistema può essere rappresentato come automa a stati finiti, dove sono presenti i seguenti stati:
typedef enum {PL_CHIUSO, PL_APERTURA, PL_APERTO, PL_CHIUSURA} PlStato;
typedef enum {PL_CHIUSO, PL_APERTURA, PL_APERTO, PL_CHIUSURA} PlStato;
- per realizzare il nostro sistema si posso implementare le seguenti routine:
void PlInit(void); // inizializazzione hw e variabili
void PlControlTask(void); // gestione della macchina a stati
void plServoTask(void); // task che gestisce la temporizzazione del segnale servo
void plServoSetAngle(int8_t angle); // modifica la durata dell'impulso
void plSemaforo(int8 stato); // Azioni in corrispondenza dello stato
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 06 - LedDogTask
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 05 - Libreria Systick (5I)Creazione della libreria Systick
GRIGLIA DI VALUTAZIONE:
- 1pt - Utilizzo corretto dei nomi dei progetti, suddivisione in sezioni dei vari file
- 2pt - Intestazione moduli, intestazione routine, modello main corretto
- 2pt - Indentazione codice, magic numbers, ...
- 3pt - Corretta implementazione delle funzioni: SysTickInit, DelayUs(int delay), DelayMs(int delay)
- 2pt - Corretta implementazione delle funzioni: SysTickTest(char test), SysTickGet()
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 04 - Libreria Pulsanti Creazione della libreria pulsanti
GRIGLIA DI VALUTAZIONE:
- 0,5pt - Utilizzo corretto dei nomi dei progetti
- 1pt - Intestazione moduli
- 1pt - Intestazione routine
- 0,5pt - utilizzo corretto delle sezioni presenti nei vari file
- 0,5pt - Indentazione codice
- 0,5pt - utilizzare il modello definito in classe per il main
- 3pt - Corretta implementazione delle funzioni: PulsInit, Puls1Press, Puls1Click,
- 3pt - Corretta implementazione delle funzioni: Puls2Press, Puls2Click, PulsTest
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 03 - Libreria Led versione 1.1Aggiunta di nuove funzioni alla libreria led
PROCEDIMENTO / SPECIFICHE INIZIALI
- consegnare per email i progetti assegnati utilizzando la seguente convenzione: <classe>_<cognome>_ES<num>_<descr_lavoro>_v<num_versione> es. 5A_Bianchi_ES03_LibreriaLed_v11
- aggiungere la routine void LedColor(char colore);
- aggiungere la routine void LedBlink(char colore, char lampeggi, int delayms);
- aggiungere la routine void LedTest(char testnum);
- definire un tipo enum per i colori
- Usare il seguente modello per il modulo main
////------------------------------------------------------------------------------------------ //=== INCLUDES ============================================================================= //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //=== MAIN PROGRAM ========================================================================= //------------------------------------------------------------------------------------------ int main(void) { // Inizializzazioni LedInit(); // Autodiagnostica // Main loop for(;;) { } }
GRIGLIA DI VALUTAZIONE:
- 1pt - consegna lavori precedenti
- 0,5pt - Utilizzo corretto dei nomi dei progetti
- 1pt - Intestazione moduli
- 1pt - Intestazione routine
- 0,5pt - utilizzo corretto delle sezioni presenti nei vari file
- 0,5pt - Indentazione codice
- 0,5pt - utilizzare il modello definito in classe per il main
- 1pt - libreria utils
- 1pt - libreria led
- 3pt - Corretta implementazione delle funzioni: LedColor, LedBlink e LedTest;
-------------------------------------------------------------------------------------------------------------
Creazione di una libreria per l'utilizzo e il test dei led presenti sulla scheda TivaC
OBIETTIVI DISCIPLINARI
- Utilizzo di convenzioni nella scrittura del codice
- Scrittura di codice modulare: creazione della libreria led
CONVENZIONI
- Indentare correttamente il codice: tab in keil oppure due spazi; parentesi graffe allineate
- Salvare i progetti nel disco locale: D:\Lavori\2017-18\classe\cognome\ES03-LibreriaLed
- Le variabili e le funzioni con visibilità globale (su altri moduli) Iniziano con la maiuscola
- Completato l'esercizio e avuta l'approvazione del docente, comprimiamo il progetto in un unico file, aggiungendo al file .7z il numero di versione, es. "ES03-LibreriaLed_v10.7z"
- Nei nostri moduli, dopo l'intestazione, saranno presenti le seguenti sezioni:
//------------------------------------------------------------------------------------------ //=== INCLUDES ============================================================================= //------------------------------------------------------------------------------------------ #include "tm4c123gh6pm.h" //------------------------------------------------------------------------------------------ //=== COSTANTI ============================================================================= //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //=== PROTOTIPI DELLE FUNZIONI ============================================================= //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //=== MAIN PROGRAM ========================================================================= //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //=== ROUTINE PUBBLICHE ==================================================================== //------------------------------------------------------------------------------------------ //------------------------------------------------------------------------------------------ //=== ROUTINE LOCALI ======================================================================= //------------------------------------------------------------------------------------------- all'interno dei file.h inserire la seguente intestazione per ogni funzione definita:
//------------------------------------------------------------------------------------------ // <inserire una breve descrizione della routine> // INPUT: <elenco dei parametri in ingresso alla funzione> // OUTPUT: <valori restituiti> // // Autore: <autore> // 04.03.16 1.0 Versione iniziale // <data> <Revision History> <Descrivere per ogni revisione o cambio di versione le modifiche apportate> //-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 02 - LedBlink
Scrivere un programma che faccia lampeggiare i tre led presenti nella scheda ad intervalli di circa un secondoOBIETTIVI DISCIPLINARI
- Familiarizzazione con l'ide Keil uVision5
- Calcolare il tempo di esecuzione delle istruzioni e creazione di una routine di ritardo
- Modularità del codice utilizzando le funzioni
CONVENZIONI
- Evitare l'utilizzo dei magic number
- Per i nomi delle varibili e funzioni usare la notazione CamelCase
- I nomi delle costanti vanno scritti con tutti i caratteri maiuscoli e separati dal carattere underscore (_)
- Inserire la seguente intestazione all'inizio di ogni modulo (es. main.c, led.h, utils.h,...) :
PROCEDIMENTO / SPECIFICHE INIZIALI
- creare la routine LedRedInit, LedRedOn e LedRedOff e Delay_1s
- recuperare dal file tm4c1231h6pm.h le define relativae ai registri della porta F e del registro SYSCTL_RCGCGPIO_R per l'abilitazione del clock (SYSCTL_RCGCGPIO_R5).
- definire il tipo uint32_t (typedef unsigned int uint32_t;) oppure includere la libreria <stdint.h>
- definire una costante per ogni pin da utilizzare (#define LED_BLUE_PIN 0x04)
- configurare i registri associati ai pin da utilizzare, lavorando sui singoli bit. Es.:
Creare un progetto in Keil e scrivere un programma che accenda il led blu della scheda Launchpad
CONVENZIONI
- Evitare l'utilizzo dei magic number
- Per i nomi delle varibili e funzioni usare la notazione CamelCase
- I nomi delle costanti vanno scritti con tutti i caratteri maiuscoli e separati dal carattere underscore (_)
- Inserire la seguente intestazione all'inizio di ogni modulo (es. main.c, led.h, utils.h,...) :
//========================================================================================== // // Project: <nome del progetto> // Date: <data> // Author: <autore> // //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // // <inserire una breve descrizione del progetto> // <specifiche del progetto> // <specifiche del collaudo> // // Ver Date Comment //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // 1.0.0 14.11.15 Versione iniziale // <Descrivere per ogni revisione o cambio di versione le modifiche apportate> // //==========================================================================================
PROCEDIMENTO / SPECIFICHE INIZIALI
- creare la routine LedRedInit, LedRedOn e LedRedOff e Delay_1s
- recuperare dal file tm4c1231h6pm.h le define relativae ai registri della porta F e del registro SYSCTL_RCGCGPIO_R per l'abilitazione del clock (SYSCTL_RCGCGPIO_R5).
- definire il tipo uint32_t (typedef unsigned int uint32_t;) oppure includere la libreria <stdint.h>
- definire una costante per ogni pin da utilizzare (#define LED_BLUE_PIN 0x04)
- configurare i registri associati ai pin da utilizzare, lavorando sui singoli bit. Es.:
-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 01 - LedBluOnCreare un progetto in Keil e scrivere un programma che accenda il led blu della scheda Launchpad
- Creazione di un progetto Keil
- Configurazione dei pin come output digitale
- Maschere di set e reset
Creazione del progetto:
- Scaricare e installare Keil uVision, scaricare e installare TivaC MDK5 Software Packs
- Installare i drivers Stellaris ICDI Drivers per l'In-Circuit Debug Interface
- Creare un nuovo progetto Keil, scegliendo come device TM4C123GH6PM
- Selezionare il file di startup.s
- modificare le opzioni del target (menu flash--> configure...), impostando nel debug usare Stellaris ICDI, nella scheda target disabilitare il Floating Point Hardware
- Identificazione dei pin collegati ai led (datasheet launchpad)
- Leggere il cap 10 del datasheet del microcontrollore riportando nella relazione le informazioni principali
- Recuperare dal datasheet gli indirizzi dei registri necessari in modo da creare delle costanti per ogni registro necessario. Esempio:
#define GPIO_PORTF_DATA_R (*((volatile unsigned long *)0x400253FC))
- rispettare le convenzioni di scrittura del codice
Configurazione dei pin:
Input digitale: GPIODEN set, GPIOAMSEL clear, GPIOAFSEL clear
Input analogico: clear, set, clear
Alternate Function: clear, clear, set; GPIOCTL scelta della funzione
Output digitale: GPIODIR set, RCGCGPIO clock set
Mascherare i singoli bit:
data una maschera es.:
#define LED_RED_PIN 0x20 //in binario 0b0010 0000
per settare un bit facciamo l'operazione bit a bir di OR
GPIO_PORTF_DIR_R |= 0x04; // make pin out
per resettare un bit facciamo l'operazione bit a bir di AND sulla maschera negata
GPIO_PORTF_AFSEL_R &= ~0x04; // disable alt functionality
RIFERIMENTI
- Slide del corso
- [PDF] Tiva™ C Series TM4C123G LaunchPad Evaluation Board - User Guide
- [PDF] Tiva™ C Series TM4C123GH6PM Microcontroller Data Sheet (Rev. E)
- Convenzioni per la scrittura di codice C nei sitemi embedded
- https://github.com/filippo-bilardo
GPIO_PORTF_AFSEL_R &= ~0x04; // disable alt functionality
RIFERIMENTI
- Slide del corso
- [PDF] Tiva™ C Series TM4C123G LaunchPad Evaluation Board - User Guide
- [PDF] Tiva™ C Series TM4C123GH6PM Microcontroller Data Sheet (Rev. E)
- Convenzioni per la scrittura di codice C nei sitemi embedded
- https://github.com/filippo-bilardo
Bella spiegazione,complimenti per il blog.<3<3<3<3<3<3
RispondiEliminaGrande Prof. lei è il migliore :) <3
RispondiElimina