Inizio della pagina -
Logo DISCO
|
Visita la Versione ad elevata leggibilità
|
Vai al Contenuto della pagina
|
Vai alla Fine dei contenuti
|
Vai al Menu Principale
|
Vai alla Barra di navigazione (sei in)
|
Vai al Menu di navigazione (albero)
|
Vai alla Lista dei comandi
|
Vai alla Lista degli approfondimenti
|
Vai al Menu inferiore
|
Logo Ateneo
   
Per gli Studenti
Tecnologie Hardware per sistemi dedicati

Crediti: 4

Docente: Mario Malcangi

Conoscenze: Tecnologie di base: microcontrollori, digital signal processors, architetture programmabili, peroferiche e memorie. Sistemi di sviluppo e tecniche di programmazione per microcontrollori.

Abilità: utilizzo di un sistema di sviluppo per microcontrollori e sviluppo di semplici programmi in Assembler e C.


Programma:

a.       Lezioni frontali (24 ore)

  • Microcontrollori : Architettura e Modello di programmazione (Assembler)
  • Digital Signal Processor: Architettura e Modello di programmazione (Assembler)
  • Architetture programmabili: FPGA e Processori riconfigurabili
  • Periferiche: Digitali (porte seriali e I/O parallelo, timer, PLL, PWM) e Analogiche (A/D, D/A)
  • Tenologie di memoria: RAM e Flash
  • Ambiente di sviluppo: Emulazione e Simulazione
  • Programmazione per microcontrollori: ANSI C, Compilatori ottimizzanti, System C
  • Applicazioni: Controllo digitale e Acquisizione dati e controllo

b.   Esercitazioni (12 ore): utilizzo di un microcontrollore embedded e del relativo ambiente di sviluppo .

 

Dispensa del corso:

M. Malcangi, Tecnologie hardware per i sistemi dedicati, Edizione Maggioli, 2008.

Altro materiale didattico:

Davies, John H., MSP430 Microcontroller Basics, Elsevier, 2008.

Modalità d'esame:

L’esame consta di una  test scritto (domande a carattere toerico e pratico) e discussione orale.
La prova potrà essere sostituita dallo sviluppo di un progetto, anche in collaborazione con l’insegnamento di Tecnologie software per sistemi dedicati.

Durante il corso è stato utilizzato il microcontrollore MSP430 come piattaforma di studio delle problematiche di progettazione hardware.
Quello che segue è un esempio di programmazione per un'applicazione dedicata di misura e controllo della temperatura.

Si faccia riferimento ai seguenti documenti tecnici (data sheet e manuali):

Texas Instruments, http://focus.ti.com/lit/ug/slau144e/slau144e.pdf

Texas Instruments, MSP430 Assembly Language Tools User’s Guide, Literature Number: SLAU131, October 2004



;*******************************************************************************
;   MSP430F2013 - Acquisizione dati e controllo
;
;   Specifiche applicative:
;  
;   Il sensore viene campionato ogni 240 ms;
;   La misura della tensione viene registrata in memoria
;   con modalità circolare (buffer circolare);
;   Se la misura aumenta di un delta, viene acceso il LED (P1.0)
;  
;
;
;         MSP430F2013
;             -------------------
;         /|\|                  XIN|-
;          | |                       |
;          --|RST          XOUT|-
;            |                       |
;            |A6+ --|             |
;            |      Tsens         |
;            |A6- --|        P1.0|-->LED
;            |                       |
;             -------------------
;
;*******************************************************************************

ADCDeltaOn  EQU      1      ; Delta di temperatura in crescita
CBuffStart  EQU      0200h  ; Indirizzo base del buffer circolare



;   CPU Registers Used

#define   LastADCVal  R4

                            ; R4 tiene conto dell'ultima misura di temperatura
                            ; eseguita dal ADC-SD16

#define   CbuffHead   R5    ; R5 usato come puntatore di testa del
                                        ; buffer circolare

#include  "msp430x20x3.h"   ; Contiene tutte le definizioni del MSP4302013
                                          ; Vedi data sheet del MSP4302013 (SLAS491D)

;-------------------------------------------------------------------------------
            ORG     0F800h                  ; Indirizzo ISR Reset
;-------------------------------------------------------------------------------

RESET       mov.w   #0280h,SP               ; Inizializza lo stackpointer

SetupCLK    bis.b   #DIVS_3,&BCSCTL2        ; Programma il clock: SMCLK/8
           
SetupWDT    mov.w   #WDT_MDLY_32,&WDTCTL    ; Il WDT viene utilizzato come timer semplice
            bis.b   #WDTIE,&IE1             ; e lo si abilita in interruzione
           
SetupP1     bis.b   #001h,&P1DIR            ; Bit 0 della porta P1.0 abilitato in output
                                            ; Questo bit è collegato fisicamente al LED

SetupSD16   mov.w   #SD16REFON+SD16SSEL_1,&SD16CTL  ; ADC16 utilizza 1.2V ref interno e SMCLK
            mov.b   #SD16INCH_6,&SD16INCTL0         ; Connette il sensore di temperatura
                                                    ; all'ingresso dell'ADC16 (A6+,A6-)                                       
            mov.w   #SD16SNGL+SD16IE,&SD16CCTL0     ; Modalità conversione semplice e interruzione

SetupCbuff  mov.w   #CBuffStart,R5          ; Usa R5 come puntatore al buffer circolare                                                        ;               

Mainloop    bis.w   #CPUOFF+GIE,SR          ; CPU off (sleep), abilita le interruzioni
            nop                             ; Questa NOP serve solo per la fase di debug
                                            ;
;-------------------------------------------------------------------------------
SD16_ISR    ; Routine di servizio interruzione da ADC16
;-------------------------------------------------------------------------------
            add.w   #ADCDeltaOn,LastADCVal  ; Somma il delta alla misura di temperatura precedente
            bic.b   #01h,&P1OUT             ; Spegne il LED
            cmp.w   LastADCVal,&SD16MEM0    ; Confronta la temperatura precedente incrementata del delta
                                            ; con la temperatura attuale;
                                            ; nota: la lettura del dato ADC azzera la rihiesta
                                            ; di interruzione fatta dall'ADC
                                            ;
            jlo     SD16_ISR_1              ;
            bis.b   #01h,&P1OUT             ; Accende il LED se c'è stato un aumento di temperatura
SD16_ISR_1  mov.w   &SD16MEM0,LastADCVal    ; Salva la misura di temperatura attuale come precedente
            mov.w   R4,0(R5)                ; Salva la misura nel buffer circolare
            incd.w  R5                      ; Incrementa il puntatore
            bic.w   #0fdc0h,R5              ; Esegue il controllo wrap-around (0200h-023fh)
            reti                            ;       
                                            ;
;-------------------------------------------------------------------------------
WDT_ISR    ; Routine di servizione del WDC usato come temporizzatore del ADC-SD16
;-------------------------------------------------------------------------------
            bis.w   #SD16SC,&SD16CCTL0      ; Start di conversione per ADC-SD16
            reti                            ;       
                                            ;
;-------------------------------------------------------------------------------
;           Vettori di interruzione
;-------------------------------------------------------------------------------
            ORG     0FFFEh                  ; RESET
            DW      RESET                   ;
            ORG     0FFF4h                  ; WDT
            DW      WDT_ISR                 ;
            ORG     0FFEAh                  ; ADC-SD16
            DW      SD16_ISR                ;
            END

Approfondimenti

Google Translate
Translate to English Translate to French Translate to German Translate to Spanish Translate to Chinese Translate to Portuguese Translate to Arabic
Translate to Albanian Translate to Bulgarian Translate to Croatian Translate to Czech Translate to Danish Translate to Dutch Translate to Finnish Translate to Greek Translate to Hindi
Translate to Hungarian Translate to Irish Translate to Japanese Translate to Korean Translate to Norwegian Translate to Polish Translate to Romanian Translate to Russian Translate to Serbian
Translate to Slovenian Translate to Swedish Translate to Thai Translate to Turkish

(C) Copyright 2016 - Dipartimento Informatica Sistemistica e Comunicazione - Viale Sarca, 336
20126 Milano - Edificio U14
redazioneweb@disco.unimib.it - ultimo aggiornamento di questa pagina 25/03/2011