Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: EASE_Example HelloWorld_EASE_Proximity_Sensor HelloWorld_EASE_Motor_Example Example_EtherCAT_System_Using_EASE ... more
Diff: EsmacatShield.h
- 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
+