AB&T / Mbed 2 deprecated TestEasyCAT_DC_sync

Dependencies:   mbed EasyCAT_lib

Committer:
EasyCAT
Date:
Tue Sep 12 17:21:57 2017 +0000
Revision:
0:8645807d740c
Child:
1:82fcd22dd909
first release

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EasyCAT 0:8645807d740c 1 //********************************************************************************************
EasyCAT 0:8645807d740c 2 // *
EasyCAT 0:8645807d740c 3 // AB&T Tecnologie Informatiche - Ivrea Italy *
EasyCAT 0:8645807d740c 4 // http://www.bausano.net *
EasyCAT 0:8645807d740c 5 // https://www.ethercat.org/en/products/791FFAA126AD43859920EA64384AD4FD.htm *
EasyCAT 0:8645807d740c 6 // *
EasyCAT 0:8645807d740c 7 //********************************************************************************************
EasyCAT 0:8645807d740c 8 // *
EasyCAT 0:8645807d740c 9 // This software is distributed as an example, in the hope that it could be useful, *
EasyCAT 0:8645807d740c 10 // WITHOUT ANY WARRANTY, even the implied warranty of FITNESS FOR A PARTICULAR PURPOSE *
EasyCAT 0:8645807d740c 11 // *
EasyCAT 0:8645807d740c 12 //********************************************************************************************
EasyCAT 0:8645807d740c 13
EasyCAT 0:8645807d740c 14
EasyCAT 0:8645807d740c 15 //- EasyCAT shield basic example using DC synchronization for mbed boards -170912
EasyCAT 0:8645807d740c 16 //
EasyCAT 0:8645807d740c 17 //- Derived from the example project TestEasyCAT_DC_sync.ino for the AB&T EasyCAT Arduino shield
EasyCAT 0:8645807d740c 18 //
EasyCAT 0:8645807d740c 19 //- In this example the INT signal coming from the LAN9252 generates an interrupt
EasyCAT 0:8645807d740c 20 //- to synchronize the EasyCAT and the Master activities
EasyCAT 0:8645807d740c 21
EasyCAT 0:8645807d740c 22
EasyCAT 0:8645807d740c 23 //- Tested with the STM32 NUCLEO-F767ZI board ------------------------------------------------
EasyCAT 0:8645807d740c 24
EasyCAT 0:8645807d740c 25
EasyCAT 0:8645807d740c 26 #include "mbed.h"
EasyCAT 0:8645807d740c 27 #include "EasyCAT.h" // EasyCAT library to interface the LAN9252
EasyCAT 0:8645807d740c 28
EasyCAT 0:8645807d740c 29
EasyCAT 0:8645807d740c 30 void Application (void);
EasyCAT 0:8645807d740c 31
EasyCAT 0:8645807d740c 32
EasyCAT 0:8645807d740c 33 EasyCAT EASYCAT(DC_SYNC); // EasyCAT istantiation
EasyCAT 0:8645807d740c 34 // In order to use the DC Synchronization we have to set
EasyCAT 0:8645807d740c 35 // the "DC_SYNC" parameter in the constructor
EasyCAT 0:8645807d740c 36
EasyCAT 0:8645807d740c 37 // The constructor allow us to choose the pin used for the EasyCAT SPI chip select
EasyCAT 0:8645807d740c 38 // Without any parameter pin D9 will be used
EasyCAT 0:8645807d740c 39
EasyCAT 0:8645807d740c 40 // for EasyCAT board REV_A we can choose between:
EasyCAT 0:8645807d740c 41 // D8, D9, D10
EasyCAT 0:8645807d740c 42 //
EasyCAT 0:8645807d740c 43 // for EasyCAT board REV_B we can choose between:
EasyCAT 0:8645807d740c 44 // D8, D9, D10, A5, D6, D7
EasyCAT 0:8645807d740c 45
EasyCAT 0:8645807d740c 46 // example:
EasyCAT 0:8645807d740c 47 //EasyCAT EASYCAT(D8, DC_SYNC); // pin D8 will be used as SPI chip select
EasyCAT 0:8645807d740c 48
EasyCAT 0:8645807d740c 49
EasyCAT 0:8645807d740c 50 // The chip select chosen by the firmware must match the setting on the board
EasyCAT 0:8645807d740c 51
EasyCAT 0:8645807d740c 52 // On board REV_A the chip select is set soldering
EasyCAT 0:8645807d740c 53 // a 0 ohm resistor in the appropriate position
EasyCAT 0:8645807d740c 54
EasyCAT 0:8645807d740c 55 // On board REV_B the chip select is set
EasyCAT 0:8645807d740c 56 // througt a bank of jumpers
EasyCAT 0:8645807d740c 57
EasyCAT 0:8645807d740c 58
EasyCAT 0:8645807d740c 59
EasyCAT 0:8645807d740c 60 //---- pins declaration ------------------------------------------------------------------------------
EasyCAT 0:8645807d740c 61
EasyCAT 0:8645807d740c 62
EasyCAT 0:8645807d740c 63
EasyCAT 0:8645807d740c 64 AnalogIn Ana0(A0); // analog input 0
EasyCAT 0:8645807d740c 65 AnalogIn Ana1(A1); // analog input 1
EasyCAT 0:8645807d740c 66
EasyCAT 0:8645807d740c 67
EasyCAT 0:8645807d740c 68 DigitalOut Out_0(A2); // four bits output
EasyCAT 0:8645807d740c 69 DigitalOut Out_1(A3); //
EasyCAT 0:8645807d740c 70 DigitalOut Out_2(A4); //
EasyCAT 0:8645807d740c 71 DigitalOut Out_3(A5); //
EasyCAT 0:8645807d740c 72
EasyCAT 0:8645807d740c 73 DigitalIn In_0(D3); // four bits input
EasyCAT 0:8645807d740c 74 DigitalIn In_1(D5); //
EasyCAT 0:8645807d740c 75 DigitalIn In_2(D6); //
EasyCAT 0:8645807d740c 76 DigitalIn In_3(D7); //
EasyCAT 0:8645807d740c 77
EasyCAT 0:8645807d740c 78 DigitalOut Led(LED1); //
EasyCAT 0:8645807d740c 79
EasyCAT 0:8645807d740c 80
EasyCAT 0:8645807d740c 81 InterruptIn event(D2); // This pin receive the SM interrupt
EasyCAT 0:8645807d740c 82 // generated by the LAN9252
EasyCAT 0:8645807d740c 83
EasyCAT 0:8645807d740c 84
EasyCAT 0:8645807d740c 85 void Campionatura(void);
EasyCAT 0:8645807d740c 86
EasyCAT 0:8645807d740c 87 //---- global variables ---------------------------------------------------------------------------
EasyCAT 0:8645807d740c 88
EasyCAT 0:8645807d740c 89
EasyCAT 0:8645807d740c 90 UWORD ContaUp; // used for sawthoot test generation
EasyCAT 0:8645807d740c 91 UWORD ContaDown; //
EasyCAT 0:8645807d740c 92
EasyCAT 0:8645807d740c 93 unsigned long Millis = 0;
EasyCAT 0:8645807d740c 94 unsigned long PreviousSaw = 0;
EasyCAT 0:8645807d740c 95 unsigned long PreviousCycle = 0;
EasyCAT 0:8645807d740c 96 unsigned long PreviousMillis = 0;
EasyCAT 0:8645807d740c 97
EasyCAT 0:8645807d740c 98
EasyCAT 0:8645807d740c 99
EasyCAT 0:8645807d740c 100 //---- declarations for Arduino "millis()" emulation -----------------------
EasyCAT 0:8645807d740c 101
EasyCAT 0:8645807d740c 102 static Ticker uS_Tick;
EasyCAT 0:8645807d740c 103 static volatile uint32_t MillisVal = 0;
EasyCAT 0:8645807d740c 104
EasyCAT 0:8645807d740c 105 void InitMillis(void);
EasyCAT 0:8645807d740c 106 void mS_Tick(void);
EasyCAT 0:8645807d740c 107
EasyCAT 0:8645807d740c 108 inline static uint32_t millis (void)
EasyCAT 0:8645807d740c 109 {
EasyCAT 0:8645807d740c 110 return MillisVal;
EasyCAT 0:8645807d740c 111 };
EasyCAT 0:8645807d740c 112
EasyCAT 0:8645807d740c 113
EasyCAT 0:8645807d740c 114
EasyCAT 0:8645807d740c 115 //---------------------------------------------------------------------------------------------
EasyCAT 0:8645807d740c 116
EasyCAT 0:8645807d740c 117 int main(void)
EasyCAT 0:8645807d740c 118 {
EasyCAT 0:8645807d740c 119
EasyCAT 0:8645807d740c 120 printf ("\nEasyCAT - Generic EtherCAT slave\n"); // print the banner
EasyCAT 0:8645807d740c 121
EasyCAT 0:8645807d740c 122 InitMillis(); // init Arduino "millis()" emulation
EasyCAT 0:8645807d740c 123
EasyCAT 0:8645807d740c 124 ContaDown.Word = 0x0000;
EasyCAT 0:8645807d740c 125 ContaUp.Word = 0x0000;
EasyCAT 0:8645807d740c 126 //---- initialize the EasyCAT board -----
EasyCAT 0:8645807d740c 127
EasyCAT 0:8645807d740c 128 if (EASYCAT.Init() == true) // initialization
EasyCAT 0:8645807d740c 129 { // succesfully completed
EasyCAT 0:8645807d740c 130 printf ("initialized\n"); //
EasyCAT 0:8645807d740c 131 }
EasyCAT 0:8645807d740c 132
EasyCAT 0:8645807d740c 133 else // initialization failed
EasyCAT 0:8645807d740c 134 { // the EasyCAT board was not recognized
EasyCAT 0:8645807d740c 135 printf ("initialization failed\n"); //
EasyCAT 0:8645807d740c 136 // The most common reason is that the SPI
EasyCAT 0:8645807d740c 137 // chip select choosen on the board doesn't
EasyCAT 0:8645807d740c 138 // match the one choosen by the firmware
EasyCAT 0:8645807d740c 139
EasyCAT 0:8645807d740c 140 while (1) // stay in loop for ever
EasyCAT 0:8645807d740c 141 { // with the led blinking
EasyCAT 0:8645807d740c 142 Led = 1; //
EasyCAT 0:8645807d740c 143 wait_ms(125); //
EasyCAT 0:8645807d740c 144 Led = 0; //
EasyCAT 0:8645807d740c 145 wait_ms(125); //
EasyCAT 0:8645807d740c 146 } //
EasyCAT 0:8645807d740c 147 }
EasyCAT 0:8645807d740c 148
EasyCAT 0:8645807d740c 149
EasyCAT 0:8645807d740c 150 event.fall(&Campionatura);
EasyCAT 0:8645807d740c 151
EasyCAT 0:8645807d740c 152 while (1)
EasyCAT 0:8645807d740c 153 {
EasyCAT 0:8645807d740c 154 // everything happens in interrupt
EasyCAT 0:8645807d740c 155 }
EasyCAT 0:8645807d740c 156 }
EasyCAT 0:8645807d740c 157
EasyCAT 0:8645807d740c 158
EasyCAT 0:8645807d740c 159 //---- interrupt service --------------------------------------------------------------------------------
EasyCAT 0:8645807d740c 160
EasyCAT 0:8645807d740c 161 // The EasyCAT task and the User
EasyCAT 0:8645807d740c 162 // Application run in interrupt
EasyCAT 0:8645807d740c 163 //
EasyCAT 0:8645807d740c 164 // Take care that the EtherCAT task + User Application
EasyCAT 0:8645807d740c 165 // time is less that the master cycle time
EasyCAT 0:8645807d740c 166
EasyCAT 0:8645807d740c 167 void Campionatura() //
EasyCAT 0:8645807d740c 168 { //
EasyCAT 0:8645807d740c 169 EASYCAT.MainTask(); // EtherCAT task
EasyCAT 0:8645807d740c 170 //
EasyCAT 0:8645807d740c 171 Application(); // User application
EasyCAT 0:8645807d740c 172 } //
EasyCAT 0:8645807d740c 173
EasyCAT 0:8645807d740c 174
EasyCAT 0:8645807d740c 175
EasyCAT 0:8645807d740c 176
EasyCAT 0:8645807d740c 177
EasyCAT 0:8645807d740c 178
EasyCAT 0:8645807d740c 179 //---- user application ------------------------------------------------------------------------------
EasyCAT 0:8645807d740c 180
EasyCAT 0:8645807d740c 181 void Application (void)
EasyCAT 0:8645807d740c 182
EasyCAT 0:8645807d740c 183 {
EasyCAT 0:8645807d740c 184 float Analog;
EasyCAT 0:8645807d740c 185 // --- analog inputs management ---
EasyCAT 0:8645807d740c 186 //
EasyCAT 0:8645807d740c 187 Analog = Ana0.read(); // read analog input 0
EasyCAT 0:8645807d740c 188 Analog = Analog * 255; // normalize it on 8 bits
EasyCAT 0:8645807d740c 189 EASYCAT.BufferIn.Byte[0] = (uint8_t)Analog; // and put the result into
EasyCAT 0:8645807d740c 190 // input Byte 0
EasyCAT 0:8645807d740c 191
EasyCAT 0:8645807d740c 192 Analog = Ana1.read(); // read analog input 1
EasyCAT 0:8645807d740c 193 Analog = Analog * 255; // normalize it on 8 bits
EasyCAT 0:8645807d740c 194 EASYCAT.BufferIn.Byte[1] = (uint8_t)Analog; // and put the result into
EasyCAT 0:8645807d740c 195 // input Byte 1
EasyCAT 0:8645807d740c 196
EasyCAT 0:8645807d740c 197
EasyCAT 0:8645807d740c 198 // --- four output bits management ----
EasyCAT 0:8645807d740c 199 //
EasyCAT 0:8645807d740c 200 if (EASYCAT.BufferOut.Byte[0] & 0b00000001) // the four output bits are mapped to the
EasyCAT 0:8645807d740c 201 Out_0 = 1; // lower nibble of output Byte 0
EasyCAT 0:8645807d740c 202 else //
EasyCAT 0:8645807d740c 203 Out_0 = 0; //
EasyCAT 0:8645807d740c 204 //
EasyCAT 0:8645807d740c 205 if (EASYCAT.BufferOut.Byte[0] & (1<<0)) //
EasyCAT 0:8645807d740c 206 Out_0 = 1; //
EasyCAT 0:8645807d740c 207 else //
EasyCAT 0:8645807d740c 208 Out_0 = 0; //
EasyCAT 0:8645807d740c 209 //
EasyCAT 0:8645807d740c 210 if (EASYCAT.BufferOut.Byte[0] & (1<<1)) //
EasyCAT 0:8645807d740c 211 Out_1 = 1; //
EasyCAT 0:8645807d740c 212 else //
EasyCAT 0:8645807d740c 213 Out_1 = 0; //
EasyCAT 0:8645807d740c 214 //
EasyCAT 0:8645807d740c 215 if (EASYCAT.BufferOut.Byte[0] & (1<<2)) //
EasyCAT 0:8645807d740c 216 Out_2 = 1; //
EasyCAT 0:8645807d740c 217 else //
EasyCAT 0:8645807d740c 218 Out_2 = 0; //
EasyCAT 0:8645807d740c 219 //
EasyCAT 0:8645807d740c 220 if (EASYCAT.BufferOut.Byte[0] & (1<<3)) //
EasyCAT 0:8645807d740c 221 Out_3 = 1; //
EasyCAT 0:8645807d740c 222 else //
EasyCAT 0:8645807d740c 223 Out_3 = 0; //
EasyCAT 0:8645807d740c 224
EasyCAT 0:8645807d740c 225 //--- four input bits management ---
EasyCAT 0:8645807d740c 226 //
EasyCAT 0:8645807d740c 227 EASYCAT.BufferIn.Byte[6] = 0x00; // the four input pins are mapped to the
EasyCAT 0:8645807d740c 228 if (!In_0) // lower nibble of input Byte 6
EasyCAT 0:8645807d740c 229 EASYCAT.BufferIn.Byte[6] |= 0b00000001; //
EasyCAT 0:8645807d740c 230 if (!In_1) //
EasyCAT 0:8645807d740c 231 EASYCAT.BufferIn.Byte[6] |= 0b00000010; //
EasyCAT 0:8645807d740c 232 if (!In_2) //
EasyCAT 0:8645807d740c 233 EASYCAT.BufferIn.Byte[6] |= 0b00000100; //
EasyCAT 0:8645807d740c 234 if (!In_3) //
EasyCAT 0:8645807d740c 235 EASYCAT.BufferIn.Byte[6] |= 0b00001000; //
EasyCAT 0:8645807d740c 236
EasyCAT 0:8645807d740c 237
EasyCAT 0:8645807d740c 238 // --- test sawtooth generation ---
EasyCAT 0:8645807d740c 239 //
EasyCAT 0:8645807d740c 240 Millis = millis(); // each 100 mS
EasyCAT 0:8645807d740c 241
EasyCAT 0:8645807d740c 242 if (Millis - PreviousSaw >= 100) //
EasyCAT 0:8645807d740c 243 { //
EasyCAT 0:8645807d740c 244 PreviousSaw = Millis; //
EasyCAT 0:8645807d740c 245 //
EasyCAT 0:8645807d740c 246 ContaUp.Word++; // we increment the variable ContaUp
EasyCAT 0:8645807d740c 247 ContaDown.Word--; // and decrement ContaDown
EasyCAT 0:8645807d740c 248 } //
EasyCAT 0:8645807d740c 249
EasyCAT 0:8645807d740c 250 // we use these variables to create sawtooth,
EasyCAT 0:8645807d740c 251 // with different slopes and periods, for
EasyCAT 0:8645807d740c 252 // test pourpose, in input Bytes 2,3,4,5,30,31
EasyCAT 0:8645807d740c 253
EasyCAT 0:8645807d740c 254 EASYCAT.BufferIn.Byte[2] = ContaUp.Byte[0]; // slow rising slope
EasyCAT 0:8645807d740c 255 EASYCAT.BufferIn.Byte[3] = ContaUp.Byte[1]; // extremly slow rising slope
EasyCAT 0:8645807d740c 256
EasyCAT 0:8645807d740c 257 EASYCAT.BufferIn.Byte[4] = ContaDown.Byte[0]; // slow falling slope
EasyCAT 0:8645807d740c 258 EASYCAT.BufferIn.Byte[5] = ContaDown.Byte[1]; // extremly slow falling slope
EasyCAT 0:8645807d740c 259
EasyCAT 0:8645807d740c 260
EasyCAT 0:8645807d740c 261 EASYCAT.BufferIn.Byte[30] = ContaUp.Byte[0] << 2; // medium speed rising slope
EasyCAT 0:8645807d740c 262 EASYCAT.BufferIn.Byte[31] = ContaDown.Byte[0] << 2; // medium speed falling slope
EasyCAT 0:8645807d740c 263 }
EasyCAT 0:8645807d740c 264
EasyCAT 0:8645807d740c 265
EasyCAT 0:8645807d740c 266 //--- functions for Arduino "millis()" emulation -------------------------------------
EasyCAT 0:8645807d740c 267
EasyCAT 0:8645807d740c 268
EasyCAT 0:8645807d740c 269 void InitMillis(void)
EasyCAT 0:8645807d740c 270 {
EasyCAT 0:8645807d740c 271 uS_Tick.attach (&mS_Tick, 0.001);
EasyCAT 0:8645807d740c 272 }
EasyCAT 0:8645807d740c 273
EasyCAT 0:8645807d740c 274 void mS_Tick(void)
EasyCAT 0:8645807d740c 275 {
EasyCAT 0:8645807d740c 276 MillisVal++;
EasyCAT 0:8645807d740c 277 }
EasyCAT 0:8645807d740c 278