BAUMER GXMMW Absolute Multiturn encoder example code Steps per turn ≤8192 / 13 bit Number of turns ≤65536 / 16 bit Reading BAUMER GXMMW encoder data bypasing CANopen interface Reading 29bit (multiturn) position from Absolute encoder via SSI Displaying encoder positon on i2c OLED 32x128 display
Dependencies: Adafruit_GFX mbed
main.cpp
- Committer:
- qubit
- Date:
- 2016-12-22
- Revision:
- 1:415c7e8097bd
- Parent:
- 0:86e09ad03619
File content as of revision 1:415c7e8097bd:
//BAUMER GXMMW Absolute Multiturn encoder example code //Steps per turn ≤8192 / 13 bit //Number of turns ≤65536 / 16 bit //Reading BAUMER GXMMW encoder data bypasing CANopen interface //Reading 29bit (multiturn) position from Absolute encoder via SSI //Displaying encoder positon on i2c OLED 32x128 display #include "mbed.h" #include "Adafruit_SSD1306.h" DigitalOut myled(LED1); SPI spi(p5, p6, p7); //I'm using only pin p6 & p7 for encoder->mbed connection I2C myI2C(p9,p10); //OLED screen Adafruit_SSD1306_I2c oled(myI2C,p13,0x78,32,128); int main(){ spi.format(10,2); spi.frequency(500000); Serial pc(USBTX, USBRX); uint32_t data[3] = {0, 0, 0}; uint32_t encoder_value = 0; while(1) { //clocking out 30bit of data from encoder data[0] = spi.write(0xFF); data[1] = spi.write(0xFF); data[2] = spi.write(0xFF); data[0] <<= 20; data[1] <<= 10; encoder_value = data[2] | data[1] | data[0]; encoder_value &= 0x1FFFFFFF; // masking first bit (30bit->29bit) //displaying encoder data on serial monitor //pc.printf("%d\n",encoder_value); oled.printf("%09u\r",encoder_value); oled.display(); wait_us(50); } }