EasyCAT shield loopback test - EtherCAT slave example

Dependencies:   mbed EasyCAT_lib

The EasyCAT Shield and /static/img/mbed.gif boards

/media/uploads/EasyCAT/easycat_onnucleo.jpg

  • The EasyCAT Shield is an Arduino shield, designed and manufactured in Italy by AB&T Tecnologie Informatiche, that allow us to build a custom EtherCAT® slave in an easy way.
  • The TestEasyCAT_LoopBack is a test program that transmits back to the EtherCAT master the data that the EtherCAT slave receives.

Import programTestEasyCAT_LoopBack

EasyCAT shield loopback test - EtherCAT slave example

Import libraryEasyCAT_lib

EasyCAT shield library - It allows you to make an EtherCAT slave

Committer:
EasyCAT
Date:
Wed Jan 09 09:42:33 2019 +0000
Revision:
1:c342bace09db
Parent:
0:739b2b5ca0f6
revision 2 - moved  "DigitalOut Led(LED1)"

Who changed what in which revision?

UserRevisionLine numberNew contents of line
EasyCAT 0:739b2b5ca0f6 1 //********************************************************************************************
EasyCAT 0:739b2b5ca0f6 2 // *
EasyCAT 0:739b2b5ca0f6 3 // AB&T Tecnologie Informatiche - Ivrea Italy *
EasyCAT 0:739b2b5ca0f6 4 // http://www.bausano.net *
EasyCAT 0:739b2b5ca0f6 5 // https://www.ethercat.org/en/products/791FFAA126AD43859920EA64384AD4FD.htm *
EasyCAT 0:739b2b5ca0f6 6 // *
EasyCAT 0:739b2b5ca0f6 7 //********************************************************************************************
EasyCAT 0:739b2b5ca0f6 8 // *
EasyCAT 0:739b2b5ca0f6 9 // This software is distributed as an example, in the hope that it could be useful, *
EasyCAT 0:739b2b5ca0f6 10 // WITHOUT ANY WARRANTY, even the implied warranty of FITNESS FOR A PARTICULAR PURPOSE *
EasyCAT 0:739b2b5ca0f6 11 // *
EasyCAT 0:739b2b5ca0f6 12 //********************************************************************************************
EasyCAT 0:739b2b5ca0f6 13
EasyCAT 0:739b2b5ca0f6 14
EasyCAT 1:c342bace09db 15 // revision 2 - moved "DigitalOut Led(LED1)"
EasyCAT 1:c342bace09db 16
EasyCAT 1:c342bace09db 17
EasyCAT 1:c342bace09db 18
EasyCAT 0:739b2b5ca0f6 19 //---- AB&T EasyCAT shield loopback test 170912 ---------------------------------------------
EasyCAT 0:739b2b5ca0f6 20 //
EasyCAT 0:739b2b5ca0f6 21 // Derived from the example Arduino project TestEasyCAT_LoopBack.ino
EasyCAT 0:739b2b5ca0f6 22 // for the AB&T EasyCAT Arduino shield
EasyCAT 0:739b2b5ca0f6 23 //
EasyCAT 0:739b2b5ca0f6 24 // In this example the output bytes received by the EasyCAT are transmitted back to
EasyCAT 0:739b2b5ca0f6 25 // the master, for test pourpose
EasyCAT 0:739b2b5ca0f6 26 //
EasyCAT 0:739b2b5ca0f6 27 // The EasyCAT must be set in STANDARD MODE (default setting)
EasyCAT 0:739b2b5ca0f6 28
EasyCAT 0:739b2b5ca0f6 29 //----- Tested with the STM32 NUCLEO-F767ZI board --------------------------------------------
EasyCAT 0:739b2b5ca0f6 30
EasyCAT 0:739b2b5ca0f6 31
EasyCAT 0:739b2b5ca0f6 32 #include "mbed.h"
EasyCAT 0:739b2b5ca0f6 33 #include "EasyCAT.h" // EasyCAT library to interface the LAN9252
EasyCAT 0:739b2b5ca0f6 34
EasyCAT 0:739b2b5ca0f6 35
EasyCAT 0:739b2b5ca0f6 36 void Application (void);
EasyCAT 0:739b2b5ca0f6 37
EasyCAT 0:739b2b5ca0f6 38
EasyCAT 0:739b2b5ca0f6 39
EasyCAT 0:739b2b5ca0f6 40 EasyCAT EASYCAT; // EasyCAT instantiation
EasyCAT 0:739b2b5ca0f6 41
EasyCAT 0:739b2b5ca0f6 42
EasyCAT 0:739b2b5ca0f6 43 //--- sanity check to see if the EasyCAT is set in STANDARD MODE --------------------------------------
EasyCAT 0:739b2b5ca0f6 44
EasyCAT 0:739b2b5ca0f6 45 #ifdef CUST_BYTE_NUM_OUT
EasyCAT 0:739b2b5ca0f6 46 #error "The EasyCAT must be set in STANDARD MODE !!!"
EasyCAT 0:739b2b5ca0f6 47 #endif
EasyCAT 0:739b2b5ca0f6 48
EasyCAT 0:739b2b5ca0f6 49 #ifdef CUST_BYTE_NUM_IN
EasyCAT 0:739b2b5ca0f6 50 #error "The EasyCAT must be set in STANDARD MODE !!!"
EasyCAT 0:739b2b5ca0f6 51 #endif
EasyCAT 0:739b2b5ca0f6 52
EasyCAT 0:739b2b5ca0f6 53
EasyCAT 0:739b2b5ca0f6 54 //---- pins declaration ------------------------------------------------------------------------------
EasyCAT 0:739b2b5ca0f6 55
EasyCAT 1:c342bace09db 56
EasyCAT 0:739b2b5ca0f6 57
EasyCAT 0:739b2b5ca0f6 58
EasyCAT 0:739b2b5ca0f6 59 //---------------------------------------------------------------------------------------------
EasyCAT 0:739b2b5ca0f6 60
EasyCAT 0:739b2b5ca0f6 61 int main(void)
EasyCAT 0:739b2b5ca0f6 62 {
EasyCAT 0:739b2b5ca0f6 63
EasyCAT 0:739b2b5ca0f6 64 printf ("\nEasyCAT - Generic EtherCAT slave\n"); // print the banner
EasyCAT 0:739b2b5ca0f6 65
EasyCAT 0:739b2b5ca0f6 66 //---- initialize the EasyCAT board -----
EasyCAT 0:739b2b5ca0f6 67
EasyCAT 0:739b2b5ca0f6 68 if (EASYCAT.Init() == true) // initialization
EasyCAT 0:739b2b5ca0f6 69 { // succesfully completed
EasyCAT 0:739b2b5ca0f6 70 printf ("initialized\n"); //
EasyCAT 0:739b2b5ca0f6 71 }
EasyCAT 0:739b2b5ca0f6 72
EasyCAT 0:739b2b5ca0f6 73 else // initialization failed
EasyCAT 0:739b2b5ca0f6 74 { // the EasyCAT board was not recognized
EasyCAT 0:739b2b5ca0f6 75 printf ("initialization failed\n"); //
EasyCAT 0:739b2b5ca0f6 76 // The most common reason is that the SPI
EasyCAT 0:739b2b5ca0f6 77 // chip select choosen on the board doesn't
EasyCAT 0:739b2b5ca0f6 78 // match the one choosen by the firmware
EasyCAT 1:c342bace09db 79
EasyCAT 1:c342bace09db 80 DigitalOut Led(LED1); //
EasyCAT 0:739b2b5ca0f6 81
EasyCAT 0:739b2b5ca0f6 82 while (1) // stay in loop for ever
EasyCAT 0:739b2b5ca0f6 83 { // with the led blinking
EasyCAT 0:739b2b5ca0f6 84 Led = 1; //
EasyCAT 0:739b2b5ca0f6 85 wait_ms(125); //
EasyCAT 0:739b2b5ca0f6 86 Led = 0; //
EasyCAT 0:739b2b5ca0f6 87 wait_ms(125); //
EasyCAT 0:739b2b5ca0f6 88 } //
EasyCAT 0:739b2b5ca0f6 89 }
EasyCAT 0:739b2b5ca0f6 90
EasyCAT 0:739b2b5ca0f6 91
EasyCAT 0:739b2b5ca0f6 92 while (1) //---- main loop ---------------------------
EasyCAT 0:739b2b5ca0f6 93 {
EasyCAT 0:739b2b5ca0f6 94 // In the main loop we must call ciclically the
EasyCAT 0:739b2b5ca0f6 95 // EasyCAT task and our application
EasyCAT 0:739b2b5ca0f6 96 //
EasyCAT 0:739b2b5ca0f6 97 // This allows the bidirectional exachange of the data
EasyCAT 0:739b2b5ca0f6 98 // between the EtherCAT master and our application
EasyCAT 0:739b2b5ca0f6 99 //
EasyCAT 0:739b2b5ca0f6 100 // The EasyCAT cycle and the Master cycle are asynchronous
EasyCAT 0:739b2b5ca0f6 101
EasyCAT 0:739b2b5ca0f6 102 wait_ms(10); // This delay allows us to set the EasyCAT cycle time
EasyCAT 0:739b2b5ca0f6 103 // according to the needs of our application
EasyCAT 0:739b2b5ca0f6 104
EasyCAT 0:739b2b5ca0f6 105 EASYCAT.MainTask(); // execute the EasyCAT task
EasyCAT 0:739b2b5ca0f6 106
EasyCAT 0:739b2b5ca0f6 107 Application(); // execute the user application
EasyCAT 0:739b2b5ca0f6 108 }
EasyCAT 0:739b2b5ca0f6 109 }
EasyCAT 0:739b2b5ca0f6 110
EasyCAT 0:739b2b5ca0f6 111
EasyCAT 0:739b2b5ca0f6 112 //---- user application ------------------------------------------------------------------------------
EasyCAT 0:739b2b5ca0f6 113
EasyCAT 0:739b2b5ca0f6 114 void Application () // the received bytes for the outputs
EasyCAT 0:739b2b5ca0f6 115 // are transmitted back, simulating the inputs
EasyCAT 0:739b2b5ca0f6 116 {
EasyCAT 0:739b2b5ca0f6 117 uint8_t Index;
EasyCAT 0:739b2b5ca0f6 118
EasyCAT 0:739b2b5ca0f6 119 for (Index=0; Index < BYTE_NUM; Index++) // BYTE_NUM is a constant declared in the library file "EasyCAT.h"
EasyCAT 0:739b2b5ca0f6 120 // it defines the number of bytes for the input and for the output
EasyCAT 0:739b2b5ca0f6 121 // when the EasyCAT is configured in STANDARD MODE (default setting)
EasyCAT 0:739b2b5ca0f6 122
EasyCAT 0:739b2b5ca0f6 123 { // the data are crossed and complemented
EasyCAT 0:739b2b5ca0f6 124 EASYCAT.BufferIn.Byte[BYTE_NUM - 1 - Index] = EASYCAT.BufferOut.Byte[Index] ^ 0xFF;
EasyCAT 0:739b2b5ca0f6 125
EasyCAT 0:739b2b5ca0f6 126 // the data are trasmitted back as they are
EasyCAT 0:739b2b5ca0f6 127 //EASYCAT.BufferIn.Byte[Index] = EASYCAT.BufferOut.Byte[Index];
EasyCAT 0:739b2b5ca0f6 128 }
EasyCAT 0:739b2b5ca0f6 129 }
EasyCAT 0:739b2b5ca0f6 130
EasyCAT 0:739b2b5ca0f6 131
EasyCAT 0:739b2b5ca0f6 132
EasyCAT 0:739b2b5ca0f6 133
EasyCAT 0:739b2b5ca0f6 134
EasyCAT 0:739b2b5ca0f6 135
EasyCAT 0:739b2b5ca0f6 136
EasyCAT 0:739b2b5ca0f6 137
EasyCAT 0:739b2b5ca0f6 138
EasyCAT 0:739b2b5ca0f6 139