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
EsmacatShield.h@2:77c2a6061e77, 2020-02-06 (annotated)
- Committer:
- pratima_hb
- Date:
- Thu Feb 06 17:35:14 2020 +0000
- Revision:
- 2:77c2a6061e77
- Parent:
- 1:b66c3e4ce9f5
Updated the data types(to int16_t) of the read and write function to be able to send and receive negative numbers
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
pratima_hb | 0:4a9e3331b131 | 1 | /** |
pratima_hb | 1:b66c3e4ce9f5 | 2 | Copyright (c) 2020 https://www.esmacat.com/ |
pratima_hb | 1:b66c3e4ce9f5 | 3 | |
pratima_hb | 1:b66c3e4ce9f5 | 4 | Licensed under the Apache License, Version 2.0 (the "License"); |
pratima_hb | 1:b66c3e4ce9f5 | 5 | you may not use this file except in compliance with the License. |
pratima_hb | 1:b66c3e4ce9f5 | 6 | You may obtain a copy of the License at |
pratima_hb | 1:b66c3e4ce9f5 | 7 | |
pratima_hb | 1:b66c3e4ce9f5 | 8 | http://www.apache.org/licenses/LICENSE-2.0 |
pratima_hb | 1:b66c3e4ce9f5 | 9 | |
pratima_hb | 1:b66c3e4ce9f5 | 10 | Unless required by applicable law or agreed to in writing, software |
pratima_hb | 1:b66c3e4ce9f5 | 11 | distributed under the License is distributed on an "AS IS" BASIS, |
pratima_hb | 1:b66c3e4ce9f5 | 12 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
pratima_hb | 1:b66c3e4ce9f5 | 13 | See the License for the specific language governing permissions and |
pratima_hb | 1:b66c3e4ce9f5 | 14 | limitations under the License. |
pratima_hb | 1:b66c3e4ce9f5 | 15 | |
pratima_hb | 0:4a9e3331b131 | 16 | EsmacatShield.h - Library for using EtherCAT Arduino Shield by Esmacat(EASE). |
pratima_hb | 0:4a9e3331b131 | 17 | Created by Esmacat, 01/22/2020 |
pratima_hb | 0:4a9e3331b131 | 18 | |
pratima_hb | 0:4a9e3331b131 | 19 | ******************************************************************************* |
pratima_hb | 0:4a9e3331b131 | 20 | * @file EsmacatShield.h |
pratima_hb | 0:4a9e3331b131 | 21 | ******************************************************************************* |
pratima_hb | 0:4a9e3331b131 | 22 | */ |
pratima_hb | 0:4a9e3331b131 | 23 | |
pratima_hb | 0:4a9e3331b131 | 24 | |
pratima_hb | 0:4a9e3331b131 | 25 | #ifndef EsmacatShield_h |
pratima_hb | 0:4a9e3331b131 | 26 | #define EsmacatShield_h |
pratima_hb | 0:4a9e3331b131 | 27 | |
pratima_hb | 0:4a9e3331b131 | 28 | #include "mbed.h" |
pratima_hb | 0:4a9e3331b131 | 29 | |
pratima_hb | 0:4a9e3331b131 | 30 | #define EASE_READ_REG 0B00000000 |
pratima_hb | 0:4a9e3331b131 | 31 | #define EASE_WRITE_REG 0B10000000 |
pratima_hb | 0:4a9e3331b131 | 32 | #define EASE_SINGLE_SHOT 0B10111111 |
pratima_hb | 0:4a9e3331b131 | 33 | #define EASE_LED_ON 0B00000100 |
pratima_hb | 0:4a9e3331b131 | 34 | #define EASE_LED_OFF 0B11111011 |
pratima_hb | 0:4a9e3331b131 | 35 | |
pratima_hb | 0:4a9e3331b131 | 36 | |
pratima_hb | 0:4a9e3331b131 | 37 | /** |
pratima_hb | 0:4a9e3331b131 | 38 | * @brief This is a driver code for EASE with form factor of Arduino |
pratima_hb | 0:4a9e3331b131 | 39 | * UNO shields. This shield communicates with the base board via SPI. |
pratima_hb | 0:4a9e3331b131 | 40 | * |
pratima_hb | 0:4a9e3331b131 | 41 | * @version 1.0 |
pratima_hb | 0:4a9e3331b131 | 42 | * |
pratima_hb | 0:4a9e3331b131 | 43 | * @details EASE stacks onto Arduino-like boards (a.k.a Base board). |
pratima_hb | 0:4a9e3331b131 | 44 | * The Base board can read and write registers on EASE via SPI. |
pratima_hb | 0:4a9e3331b131 | 45 | * The same registers can also be written and read by an EtherCAT master via a |
pratima_hb | 0:4a9e3331b131 | 46 | * standard EtherCAT protocol. Multiple EASE boards can be connected with |
pratima_hb | 0:4a9e3331b131 | 47 | * Ethernet cables with a daisy-chain topology and powered via Ethernet cables |
pratima_hb | 0:4a9e3331b131 | 48 | * with Power-over-EtherCAT (POE) technology. EASE, thus bridges the data |
pratima_hb | 0:4a9e3331b131 | 49 | * packets between an EtherCAT master and multiple Base boards. |
pratima_hb | 0:4a9e3331b131 | 50 | * |
pratima_hb | 0:4a9e3331b131 | 51 | * @code |
pratima_hb | 0:4a9e3331b131 | 52 | *#include "mbed.h" |
pratima_hb | 0:4a9e3331b131 | 53 | *#include <EsmacatShield.h> //Include Esmacat Arduino Library |
pratima_hb | 0:4a9e3331b131 | 54 | * |
pratima_hb | 0:4a9e3331b131 | 55 | *int counter; |
pratima_hb | 0:4a9e3331b131 | 56 | *int v[8]; //EASE 8 registers |
pratima_hb | 0:4a9e3331b131 | 57 | *Serial pc(USBTX, USBRX); |
pratima_hb | 0:4a9e3331b131 | 58 | * |
pratima_hb | 0:4a9e3331b131 | 59 | *DigitalOut selectPin(D10); // D10 is used to drive chip enable low |
pratima_hb | 0:4a9e3331b131 | 60 | *SPI spi(D11, D12, D13); // mosi, miso, sclk |
pratima_hb | 0:4a9e3331b131 | 61 | * |
pratima_hb | 0:4a9e3331b131 | 62 | * |
pratima_hb | 0:4a9e3331b131 | 63 | *int main() |
pratima_hb | 0:4a9e3331b131 | 64 | *{ |
pratima_hb | 0:4a9e3331b131 | 65 | * |
pratima_hb | 0:4a9e3331b131 | 66 | * EsmacatShield slave(spi, selectPin); //Define Chip Selector Pin |
pratima_hb | 0:4a9e3331b131 | 67 | * |
pratima_hb | 0:4a9e3331b131 | 68 | * slave.setup_spi(); //Setup SPI for EASE, 8 bit Data, Mode 1, 3MHz freq |
pratima_hb | 0:4a9e3331b131 | 69 | * |
pratima_hb | 0:4a9e3331b131 | 70 | * while(1) |
pratima_hb | 0:4a9e3331b131 | 71 | * { |
pratima_hb | 0:4a9e3331b131 | 72 | * slave.get_ecat_registers(v); //read all registers |
pratima_hb | 0:4a9e3331b131 | 73 | * slave.write_reg_value(0,counter++, true); //Write register data (register,value, led_on) |
pratima_hb | 0:4a9e3331b131 | 74 | * wait_us(1000000); //sleep for 1000 ms |
pratima_hb | 0:4a9e3331b131 | 75 | * slave.write_reg_value(0,counter++, false); //Write register data (register,value, led_on) |
pratima_hb | 0:4a9e3331b131 | 76 | * wait_us(1000000); //sleep for 1000 ms |
pratima_hb | 0:4a9e3331b131 | 77 | * pc.printf("Next Iteration \n"); |
pratima_hb | 0:4a9e3331b131 | 78 | * for (int i=0;i<8;i++) //print the registers read on pc |
pratima_hb | 0:4a9e3331b131 | 79 | * { |
pratima_hb | 0:4a9e3331b131 | 80 | * pc.printf("%d",i); |
pratima_hb | 0:4a9e3331b131 | 81 | * pc.printf("\t"); |
pratima_hb | 0:4a9e3331b131 | 82 | * pc.printf("%d",v[i]); |
pratima_hb | 0:4a9e3331b131 | 83 | * pc.printf("\n"); |
pratima_hb | 0:4a9e3331b131 | 84 | * } |
pratima_hb | 0:4a9e3331b131 | 85 | * } |
pratima_hb | 0:4a9e3331b131 | 86 | * |
pratima_hb | 0:4a9e3331b131 | 87 | *} |
pratima_hb | 0:4a9e3331b131 | 88 | * @endcode |
pratima_hb | 0:4a9e3331b131 | 89 | */ |
pratima_hb | 0:4a9e3331b131 | 90 | |
pratima_hb | 0:4a9e3331b131 | 91 | |
pratima_hb | 0:4a9e3331b131 | 92 | class EsmacatShield |
pratima_hb | 0:4a9e3331b131 | 93 | { |
pratima_hb | 0:4a9e3331b131 | 94 | public: |
pratima_hb | 0:4a9e3331b131 | 95 | /**********************************************************//** |
pratima_hb | 0:4a9e3331b131 | 96 | * @brief Constructor for EsmacatShield Class. |
pratima_hb | 0:4a9e3331b131 | 97 | * |
pratima_hb | 0:4a9e3331b131 | 98 | * @details Requires an existing SPI object as well as a DigitalOut object. |
pratima_hb | 0:4a9e3331b131 | 99 | * The DigitalOut object is used for a chip enable signal |
pratima_hb | 0:4a9e3331b131 | 100 | * |
pratima_hb | 0:4a9e3331b131 | 101 | * On Entry: |
pratima_hb | 0:4a9e3331b131 | 102 | * @param[in] spi - pointer to existing SPI object |
pratima_hb | 0:4a9e3331b131 | 103 | * @param[in] pin - pointer to a DigitalOut pin object |
pratima_hb | 0:4a9e3331b131 | 104 | * |
pratima_hb | 0:4a9e3331b131 | 105 | * On Exit: |
pratima_hb | 0:4a9e3331b131 | 106 | * |
pratima_hb | 0:4a9e3331b131 | 107 | * @return None |
pratima_hb | 0:4a9e3331b131 | 108 | **************************************************************/ |
pratima_hb | 0:4a9e3331b131 | 109 | EsmacatShield(SPI &spi, DigitalOut &pin); |
pratima_hb | 0:4a9e3331b131 | 110 | /**********************************************************//** |
pratima_hb | 0:4a9e3331b131 | 111 | * @brief Set up spi communication. |
pratima_hb | 0:4a9e3331b131 | 112 | * |
pratima_hb | 0:4a9e3331b131 | 113 | * @details Sets up SPI communication by using the member. |
pratima_hb | 0:4a9e3331b131 | 114 | * functions format and frequency. 8 bit data, Mode 1, |
pratima_hb | 0:4a9e3331b131 | 115 | * frequency of communication set to 3000000Hz |
pratima_hb | 0:4a9e3331b131 | 116 | * |
pratima_hb | 0:4a9e3331b131 | 117 | * On Entry: |
pratima_hb | 0:4a9e3331b131 | 118 | * |
pratima_hb | 0:4a9e3331b131 | 119 | * On Exit: |
pratima_hb | 0:4a9e3331b131 | 120 | * |
pratima_hb | 0:4a9e3331b131 | 121 | * @return None |
pratima_hb | 0:4a9e3331b131 | 122 | **************************************************************/ |
pratima_hb | 0:4a9e3331b131 | 123 | void setup_spi(); |
pratima_hb | 0:4a9e3331b131 | 124 | /**********************************************************//** |
pratima_hb | 0:4a9e3331b131 | 125 | * @brief Write given Register with the given value. |
pratima_hb | 0:4a9e3331b131 | 126 | * |
pratima_hb | 0:4a9e3331b131 | 127 | * @details Using this function 8 different 16 bit integers can be |
pratima_hb | 0:4a9e3331b131 | 128 | * written into EASE. |
pratima_hb | 0:4a9e3331b131 | 129 | * |
pratima_hb | 0:4a9e3331b131 | 130 | * On Entry: |
pratima_hb | 0:4a9e3331b131 | 131 | * @param[in] write_addr - The Register number to be written into. |
pratima_hb | 0:4a9e3331b131 | 132 | * Can take values from 0 to 7 |
pratima_hb | 0:4a9e3331b131 | 133 | * @param[in] value - The value to be written into the register |
pratima_hb | 0:4a9e3331b131 | 134 | * @param[in] led_on - True to turn LED ON |
pratima_hb | 0:4a9e3331b131 | 135 | * - False to turn LED OFF |
pratima_hb | 0:4a9e3331b131 | 136 | * |
pratima_hb | 0:4a9e3331b131 | 137 | * On Exit: |
pratima_hb | 0:4a9e3331b131 | 138 | * |
pratima_hb | 0:4a9e3331b131 | 139 | * @return None |
pratima_hb | 0:4a9e3331b131 | 140 | **************************************************************/ |
pratima_hb | 2:77c2a6061e77 | 141 | void write_reg_value(int write_addr,int16_t value, bool led_on=1); |
pratima_hb | 0:4a9e3331b131 | 142 | |
pratima_hb | 0:4a9e3331b131 | 143 | /**********************************************************//** |
pratima_hb | 0:4a9e3331b131 | 144 | * @brief Read EASE Register. |
pratima_hb | 0:4a9e3331b131 | 145 | * |
pratima_hb | 0:4a9e3331b131 | 146 | * @details Using this function 8 different 16 bit integers on EASE can be |
pratima_hb | 0:4a9e3331b131 | 147 | * read. |
pratima_hb | 0:4a9e3331b131 | 148 | * |
pratima_hb | 0:4a9e3331b131 | 149 | * On Entry: |
pratima_hb | 0:4a9e3331b131 | 150 | * @param[in] Pointer to integer - Eight consecutive memory locations |
pratima_hb | 0:4a9e3331b131 | 151 | from this pointer will be stored with the integer values read |
pratima_hb | 0:4a9e3331b131 | 152 | * from EASE. |
pratima_hb | 0:4a9e3331b131 | 153 | * |
pratima_hb | 0:4a9e3331b131 | 154 | * On Exit: |
pratima_hb | 0:4a9e3331b131 | 155 | * @param[out] pointer to the integer where the data is stored. |
pratima_hb | 0:4a9e3331b131 | 156 | |
pratima_hb | 0:4a9e3331b131 | 157 | * |
pratima_hb | 0:4a9e3331b131 | 158 | * @return None |
pratima_hb | 0:4a9e3331b131 | 159 | **************************************************************/ |
pratima_hb | 2:77c2a6061e77 | 160 | int16_t* get_ecat_registers(int16_t regs[8]); |
pratima_hb | 0:4a9e3331b131 | 161 | |
pratima_hb | 0:4a9e3331b131 | 162 | /************************************************************ |
pratima_hb | 0:4a9e3331b131 | 163 | * @brief Default destructor for EsmacatShield Class. |
pratima_hb | 0:4a9e3331b131 | 164 | * |
pratima_hb | 0:4a9e3331b131 | 165 | * @details Destroys SPI object if owner |
pratima_hb | 0:4a9e3331b131 | 166 | * |
pratima_hb | 0:4a9e3331b131 | 167 | * On Entry: |
pratima_hb | 0:4a9e3331b131 | 168 | * |
pratima_hb | 0:4a9e3331b131 | 169 | * On Exit: |
pratima_hb | 0:4a9e3331b131 | 170 | * |
pratima_hb | 0:4a9e3331b131 | 171 | * @return None |
pratima_hb | 0:4a9e3331b131 | 172 | **************************************************************/ |
pratima_hb | 0:4a9e3331b131 | 173 | |
pratima_hb | 0:4a9e3331b131 | 174 | ~EsmacatShield(); |
pratima_hb | 0:4a9e3331b131 | 175 | private: |
pratima_hb | 0:4a9e3331b131 | 176 | |
pratima_hb | 0:4a9e3331b131 | 177 | SPI &ecat_spi; |
pratima_hb | 0:4a9e3331b131 | 178 | DigitalOut &ecat_cs; |
pratima_hb | 2:77c2a6061e77 | 179 | int16_t read_reg_value(int16_t read_addr); |
pratima_hb | 0:4a9e3331b131 | 180 | }; |
pratima_hb | 0:4a9e3331b131 | 181 | |
pratima_hb | 0:4a9e3331b131 | 182 | |
pratima_hb | 0:4a9e3331b131 | 183 | #endif |
pratima_hb | 0:4a9e3331b131 | 184 |