EsmacatShield - Library for EtherCAT Arduino Shield by Esmacat (EASE)

Dependents:   EASE_Example HelloWorld_EASE_Proximity_Sensor HelloWorld_EASE_Motor_Example Example_EtherCAT_System_Using_EASE ... more

Information about Esmacat and EASE is provided in the link below. https://os.mbed.com/users/pratima_hb/code/EASE_Example/wiki/Homepage

Revision:
0:4a9e3331b131
Child:
1:b66c3e4ce9f5
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/EsmacatShield.h	Wed Jan 29 19:27:19 2020 +0000
@@ -0,0 +1,170 @@
+/**
+  EsmacatShield.h - Library for using EtherCAT Arduino Shield by Esmacat(EASE).
+  Created by Esmacat, 01/22/2020
+  
+*******************************************************************************
+* @file EsmacatShield.h
+*******************************************************************************
+*/
+
+
+#ifndef EsmacatShield_h
+#define EsmacatShield_h
+
+#include "mbed.h"
+
+#define EASE_READ_REG        0B00000000
+#define EASE_WRITE_REG       0B10000000
+#define EASE_SINGLE_SHOT     0B10111111
+#define EASE_LED_ON          0B00000100
+#define EASE_LED_OFF         0B11111011
+
+
+/**
+* @brief This is a driver code for EASE with form factor of Arduino 
+*        UNO shields. This shield communicates with the base board via SPI.
+*
+* @version 1.0
+*
+* @details EASE stacks onto Arduino-like boards (a.k.a Base board). 
+*  The Base board can read and write registers on EASE via SPI.
+*  The same registers can also be written and read by an EtherCAT master via a 
+*  standard EtherCAT protocol. Multiple EASE boards can be connected with 
+*  Ethernet cables with a daisy-chain topology and powered via Ethernet cables 
+*  with Power-over-EtherCAT (POE) technology. EASE, thus bridges the data 
+*  packets between an EtherCAT master and multiple Base boards.
+*        
+* @code
+*#include "mbed.h"
+*#include <EsmacatShield.h>      //Include Esmacat Arduino Library
+*
+*int counter;
+*int v[8];                       //EASE 8 registers
+*Serial pc(USBTX, USBRX);
+*
+*DigitalOut selectPin(D10); // D10 is used to drive chip enable low
+*SPI spi(D11, D12, D13); // mosi, miso, sclk
+*
+*
+*int main() 
+*{
+*
+*    EsmacatShield slave(spi, selectPin);        //Define Chip Selector Pin
+*    
+*    slave.setup_spi();      //Setup SPI for EASE, 8 bit Data, Mode 1, 3MHz freq
+*    
+*    while(1)
+*    {
+*      slave.get_ecat_registers(v);  //read all registers
+*      slave.write_reg_value(0,counter++, true);   //Write register data (register,value, led_on)
+*      wait_us(1000000);                      //sleep for 1000 ms
+*      slave.write_reg_value(0,counter++, false);   //Write register data (register,value, led_on)
+*      wait_us(1000000);                        //sleep for 1000 ms
+*      pc.printf("Next Iteration \n");
+*      for (int i=0;i<8;i++)     //print the registers read on pc
+*      {
+*        pc.printf("%d",i);
+*        pc.printf("\t");
+*        pc.printf("%d",v[i]);
+*        pc.printf("\n");
+*      }  
+*    }
+*
+*}
+* @endcode
+*/
+
+
+class EsmacatShield
+{
+public:
+    /**********************************************************//**
+    * @brief Constructor for EsmacatShield Class.  
+    * 
+    * @details Requires an existing SPI object as well as a DigitalOut object. 
+    * The DigitalOut object is used for a chip enable signal
+    *
+    * On Entry:
+    *     @param[in] spi - pointer to existing SPI object
+    *     @param[in] pin - pointer to a DigitalOut pin object
+    *
+    * On Exit:
+    *
+    * @return None
+    **************************************************************/
+  EsmacatShield(SPI &spi, DigitalOut &pin);
+    /**********************************************************//**
+    * @brief Set up spi communication.  
+    * 
+    * @details Sets up SPI communication by using the member. 
+    * functions format and frequency. 8 bit data, Mode 1,
+    * frequency of communication set to 3000000Hz
+    *
+    * On Entry:
+    *     
+    * On Exit:
+    *
+    * @return None
+    **************************************************************/
+  void setup_spi();
+     /**********************************************************//**
+    * @brief Write given Register with the given value.  
+    * 
+    * @details Using this function 8 different 16 bit integers can be 
+    *          written into EASE.
+    *
+    * On Entry:
+    *     @param[in] write_addr - The Register number to be written into. 
+    *                Can take values from 0 to 7
+    *     @param[in] value - The value to be written into the register
+    *     @param[in] led_on - True to turn LED ON
+    *                       - False to turn LED OFF
+    *
+    * On Exit:
+    *
+    * @return None
+    **************************************************************/ 
+  void write_reg_value(int write_addr,int value, bool led_on=1);
+  
+     /**********************************************************//**
+    * @brief Read EASE Register.  
+    * 
+    * @details Using this function 8 different 16 bit integers on EASE can be
+    *          read.
+    *
+    * On Entry:
+    *     @param[in] Pointer to integer - Eight consecutive memory locations
+                     from this pointer will be stored with the integer values read
+    *                from EASE.
+    *
+    * On Exit:
+    *     @param[out] pointer to the integer where the data is stored.
+    
+    *
+    * @return None
+    **************************************************************/
+  int* get_ecat_registers(int regs[8]); 
+
+    /************************************************************
+    * @brief Default destructor for EsmacatShield Class.  
+    *
+    * @details Destroys SPI object if owner 
+    *
+    * On Entry:
+    *
+    * On Exit:
+    *
+    * @return None
+    **************************************************************/
+ 
+  ~EsmacatShield();
+private:
+  
+  SPI &ecat_spi;
+  DigitalOut &ecat_cs;
+  int read_reg_value(int read_addr);
+};
+
+
+#endif
+