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:
Tue Sep 12 17:32:00 2017 +0000
Revision:
0:739b2b5ca0f6
Child:
1:c342bace09db
first release

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