domenica 1 ottobre 2017

A.S. 2017/18 - Esercitazioni di laboratorio per la materia TECNOLOGIA E PROGETTAZIONE/3

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



GRIGLIA DI VALUTAZIONE:
- 02pt - Obiettivo
- 38pt - Descrizione del progetto
- 40pt - Codice 
- 20pt - Collaudo

-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 13 - RTOS Network Comunication Protocol
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 Spi
Creazione di protocollo di comunicazione per l'invio di comandi tra due schede collegate tramite Spi













-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 10 - Network Comunication Protocol L0 Uart
Creazione di protocollo di comunicazione per l'invio di comandi tra due schede collegate tramite Uart












-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 09 - TimerCapture
Misure di segnali utilizzando i timer del microcontrollore

-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 08 - LedPwm (11.01.18)
Controllo di led tramite il modulo PWM del microcontrollore

OBIETTIVO
- 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);

- 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);

-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 07 - PulsTestTask
Task 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;
- 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.1

Aggiunta 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;

-------------------------------------------------------------------------------------------------------------
ESERCITAZIONE 03 - Libreria Led
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 secondo

OBIETTIVI 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,...) :

//==========================================================================================
//
// 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 - LedBluOn
Creare un progetto in Keil e scrivere un programma che accenda il led blu della scheda Launchpad

OBIETTIVI DISCIPLINARI
- Creazione di un progetto Keil
- Configurazione dei pin come output digitale
- Maschere di set e reset

PROCEDIMENTO / SPECIFICHE INIZIALI
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

2 commenti:

  1. Bella spiegazione,complimenti per il blog.<3<3<3<3<3<3

    RispondiElimina
  2. Grande Prof. lei è il migliore :) <3

    RispondiElimina