Ricardo Binas
/
SPI Encoder AMT203-V
SPI_Encoder_AMT203-V how to Note: Encoder was tested on the 3.3Vout
Wiring and Description shown
main.cpp@0:32af259f9f2a, 2019-02-17 (annotated)
- Committer:
- Rbinas
- Date:
- Sun Feb 17 00:30:29 2019 +0000
- Revision:
- 0:32af259f9f2a
SPI_Encoder_AMT203-V
Who changed what in which revision?
User | Revision | Line number | New 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 | } |