SPI_Encoder_AMT203-V how to Note: Encoder was tested on the 3.3Vout

Dependencies:   mbed

/media/uploads/Rbinas/wiring_encoder.jpg Wiring and Description shown/media/uploads/Rbinas/encoder.jpg

Committer:
Rbinas
Date:
Sun Feb 17 00:30:29 2019 +0000
Revision:
0:32af259f9f2a
SPI_Encoder_AMT203-V

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rbinas 0:32af259f9f2a 1
Rbinas 0:32af259f9f2a 2 // program used to read SPI 12 bit Encoder AMT203-V in steps of 16
Rbinas 0:32af259f9f2a 3 #include "mbed.h"
Rbinas 0:32af259f9f2a 4
Rbinas 0:32af259f9f2a 5 Serial pc(USBTX, USBRX); // tx, rx
Rbinas 0:32af259f9f2a 6 SPI EncoderSpi(p5, p6, p7);//Mosi Miso Sclk
Rbinas 0:32af259f9f2a 7 DigitalOut cs(p8); //Chip select
Rbinas 0:32af259f9f2a 8
Rbinas 0:32af259f9f2a 9 uint16_t EncoderByteData = 0;
Rbinas 0:32af259f9f2a 10 uint16_t Encoderposition_last = 0;
Rbinas 0:32af259f9f2a 11 uint8_t temp[2];
Rbinas 0:32af259f9f2a 12 uint16_t Steps;
Rbinas 0:32af259f9f2a 13 void wait_ms(int us);
Rbinas 0:32af259f9f2a 14
Rbinas 0:32af259f9f2a 15
Rbinas 0:32af259f9f2a 16 uint8_t SPI_T (uint8_t SPITransmit)//Repetive SPI transmit sequence
Rbinas 0:32af259f9f2a 17 {
Rbinas 0:32af259f9f2a 18 uint8_t SPI_temp = 0; //vairable to hold recieved data
Rbinas 0:32af259f9f2a 19 cs=0; //select spi device
Rbinas 0:32af259f9f2a 20 SPI_temp = EncoderSpi.write(SPITransmit);//send and recieve
Rbinas 0:32af259f9f2a 21 cs=1;//deselect spi device
Rbinas 0:32af259f9f2a 22 return(SPI_temp); //return recieved byte
Rbinas 0:32af259f9f2a 23 }
Rbinas 0:32af259f9f2a 24
Rbinas 0:32af259f9f2a 25 void start()
Rbinas 0:32af259f9f2a 26 {
Rbinas 0:32af259f9f2a 27 uint8_t recieved = 0xA5;//just a temp vairable
Rbinas 0:32af259f9f2a 28 EncoderByteData = 0;//reset position vairable
Rbinas 0:32af259f9f2a 29 cs=0;
Rbinas 0:32af259f9f2a 30 SPI_T(0x10);//issue read command
Rbinas 0:32af259f9f2a 31 wait_ms(50);//give time to read. Timmig is critical
Rbinas 0:32af259f9f2a 32
Rbinas 0:32af259f9f2a 33 while (recieved != 0x10) //loop while encoder is not ready to send
Rbinas 0:32af259f9f2a 34 {
Rbinas 0:32af259f9f2a 35 recieved = SPI_T(0x00); //cleck again if encoder is still working
Rbinas 0:32af259f9f2a 36 wait_ms(1); //again,give time to read. Timmig is critical
Rbinas 0:32af259f9f2a 37 }
Rbinas 0:32af259f9f2a 38
Rbinas 0:32af259f9f2a 39 temp[0] = SPI_T(0x00); //Recieve MSB
Rbinas 0:32af259f9f2a 40 temp[1] = SPI_T(0x00); // recieve LSB
Rbinas 0:32af259f9f2a 41 cs=1;
Rbinas 0:32af259f9f2a 42
Rbinas 0:32af259f9f2a 43 temp[0] &=~ 0xF0;//mask out the first 4 bits
Rbinas 0:32af259f9f2a 44 EncoderByteData = temp[0] << 8; //shift MSB to correct EncoderByteData in EncoderByteData message
Rbinas 0:32af259f9f2a 45 EncoderByteData += temp[1]; // add LSB to EncoderByteData message to complete message
Rbinas 0:32af259f9f2a 46 wait_ms(1);//again,give time to read. Timmig is critical
Rbinas 0:32af259f9f2a 47 }
Rbinas 0:32af259f9f2a 48
Rbinas 0:32af259f9f2a 49 int main()
Rbinas 0:32af259f9f2a 50 {
Rbinas 0:32af259f9f2a 51 EncoderSpi.format(8,0);
Rbinas 0:32af259f9f2a 52 EncoderSpi.frequency(8000000);
Rbinas 0:32af259f9f2a 53
Rbinas 0:32af259f9f2a 54 while(true)
Rbinas 0:32af259f9f2a 55 {
Rbinas 0:32af259f9f2a 56
Rbinas 0:32af259f9f2a 57 if (EncoderByteData != Encoderposition_last) //if nothing has changed dont wast time sending position
Rbinas 0:32af259f9f2a 58 {
Rbinas 0:32af259f9f2a 59 Encoderposition_last = EncoderByteData ; //set last position to current position
Rbinas 0:32af259f9f2a 60 }
Rbinas 0:32af259f9f2a 61 else
Rbinas 0:32af259f9f2a 62 {
Rbinas 0:32af259f9f2a 63 start(); //if something has changed in position, catch it
Rbinas 0:32af259f9f2a 64 }
Rbinas 0:32af259f9f2a 65 Steps = EncoderByteData;
Rbinas 0:32af259f9f2a 66 //pc.printf("Data = %d \n", EncoderByteData ); //actual byte reading
Rbinas 0:32af259f9f2a 67 pc.printf("Data = %03d \n", Steps/16 );
Rbinas 0:32af259f9f2a 68 }
Rbinas 0:32af259f9f2a 69
Rbinas 0:32af259f9f2a 70 }