The dsPic33 and FLEX board
Paolo Pagano
Corso di Sistemi in Tempo Reale Laurea in Ingegneria
dell‘Automazione a.a. 2008-2009
Course Outline (1/2)
• Second day (24
th)
• FSM implementation in C (slides by prof. Di Natale)
• A case study
• Real Hardware demonstration
Outline
• Introduction to the FLEX board
• A FSM instantiation on the FLEX
• Visit the web site:
http://feanor.sssup.it/~pagano/personalWEB/courses.htm
FLEX
idea:
cheap, small, easy-to-use evaluation boards
Typical applications:
• industrial sensing and control
• small robots
• wireless sensor networks
• demo boards for university labs
embedded boards
Flex
board layout
Main processing board add-on boards
add-on boards
1 - 2.54mm pattern 2 - 2.54mm alternate
pattern
(RJ45 / RS232 connectors) 3 - 1.27mm pattern
(SMD components) 4 - 5.08mm pattern
(clamps)
breadboard
add-on boards
1 - Serial port 2
(RS232 / RS422 / RS485 / TP-UART)
2 - Serial port 1
(RS232 / RS422 / RS485)
3 - CAN port 1 4 - CAN port 2 5 - I2C port 6 - SPI port
7 - 10Mbit Ethernet 8 - RJ45 Ethernet
multibus
Our test device
• It is an extended basic flex board;
• We connected the dsPic33 core to:
• Set of buttons (input);
• Set of leds (output);
• LCD display (status display).
• We have in mind to simulate an elevator controller:
• its implementation starts from FSM modeling;
• the model is validated by OTS tools (Uppaal);
• the code generation is done by hand.
How to program our device
• Our FLEX board should run a specific program (firmware);
• We need a compiler to translate from C to
machine code;
• We need a linker command file that allows the test
code to be targeted to the dsPIC33;
• We need a tool to transfer the firmware from the PC to the MCU flash memory.
MPLAB_C30
gld script
Microchip ICD2
COFF file structure
http://delorie.com/djgpp/doc/coff/Peripheral Mapping
• Expansion Board PIN I/O:
• Leds -> PortD (output)
• But’s -> PortG (input)
• LCD -> PortA (output)
MCU I/O
• A port is a set of analog/digital enabled pins.
• A port can be configured to catch analog or digital inputs. Digital signals can have a duration (like those generated by pushing buttons) or can be “levels” (latch mode).
• of course finite signals must be caught while high.
How to configure ports
• dsPic has 7 ports defined in the included header:
• #include "p33FJ256MC710.h"
• Configuring a port for OUTPUT
void initLeds (void) {
TRISDbits.TRISD0 = 0;
TRISDbits.TRISD1 = 0;
TRISDbits.TRISD2 = 0;
TRISDbits.TRISD3 = 0;
TRISDbits.TRISD4 = 0;
TRISDbits.TRISD5 = 0;
TRISDbits.TRISD6 = 0;
TRISDbits.TRISD7 = 0;
TRISDbits.TRISD8 = 0;
TRISDbits.TRISD9 = 0;
TRISDbits.TRISD10 = 0;
TRISDbits.TRISD11 = 0;
TRISDbits.TRISD12 = 0;
TRISDbits.TRISD13 = 0;
TRISDbits.TRISD14 = 0;
TRISDbits.TRISD15 = 0;
}:
• Configuring a port for INPUT:
void initButtons (void) {
TRISGbits.TRISG6 = 1;
TRISGbits.TRISG7 = 1;
TRISGbits.TRISG8 = 1;
TRISGbits.TRISG9 = 1;
} 16 pels
of the LCD
How to read/write ports
• Writing OUTPUT:
void setLed ( int led, int on_off ){
switch (led){
case 0:
LATDbits.LATD0 = on_off;
break;
case 1:
LATDbits.LATD1 = on_off;
break;
case 2:
LATDbits.LATD2 = on_off;
break;
• Reading INPUT:
int getButton ( int j ){
switch (j){
case 0:
return !PORTGbits.RG6;
case 1:
return !PORTGbits.RG7;
case 2:
return !PORTGbits.RG8;
case 3:
return !PORTGbits.RG9;
} }
the end
Questions ?
HOWTO initialize and transit
static enum State {
IDLE, S0, S1, S2, S3 };
static enum Signal {
ABSENT, GO_TO_S0, GO_TO_S1, GO_TO_S2, GO_TO_S3
};
void FSMInit(FSM *me){
me->state_ = IDLE;
}
void FSMTran_(FSM *me, unsigned int dest)
{
me->state_ = dest;
}
enum Signal FSMGetSignals(FSM *me){
if (b0)
return GO_TO_S0;
else if (b1)
return GO_TO_S1;
else if (b2)
return GO_TO_S2;
else if (b3)
return GO_TO_S3;
return ABSENT;
}