![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
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
Diff: main.cpp
- Revision:
- 0:86e09ad03619
diff -r 000000000000 -r 86e09ad03619 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Dec 22 08:01:53 2016 +0000 @@ -0,0 +1,50 @@ +//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); + } +} \ No newline at end of file