This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

Re: TM4C Microcontrollers Forum: SPI TM4C129

SS and clock signal

On 7 Jan 2016 10:25 a.m., "cb1_mobile" <bounce-1830783@mail.e2e.ti.com> wrote:

 

A Message from the TI E2E™ Community
Texas Instruments

 

cb1_mobile  replied to SPI TM4C129.

Amit Ashara
And let's not forget a "cold solder"

Hi Amit,

Dawns that (now) may I say, "Duly noted?"

While a "cold solder" may (sometimes) work - worse still is dreaded, "no solder."   (i.e. "Whoops" - we missed solder paste - @ that pin!)

 

 

You received this notification because you subscribed to the forum.  To unsubscribe from only this thread, go here.

Flag this post as spam/abuse.

  • Hello Ashish,

    Your post reply was an empty post. Did you forget to attach the waveforms?

    Regards
    Amit
  • i have tested the setup with arduino board and its working but with the TIVA c launchpad board i am only getting ss , MOSI and CLK as attached but no MISO.

    ///////////////////////////////////////////////////Arduino code/////////////////////////////////////////

    #include <SPI.h>
    /*
    ARDUINO UNO
    SS: 10
    MOSI: 11
    MISO:12
    SCK:13 */
    // Slave Select pins for encoder
    // Feel free to reallocate these pins to best suit your circuit

    const int slaveSelectEnc= 10;


    // These hold the current encoder count.
    signed long encodercount = 0;

    void setup() {
    Serial.begin(9600); // Serial com for data output
    SPI.beginTransaction(SPISettings(1000000, MSBFIRST, SPI_MODE0)); // SPI Configuration: CLK, Data Shift, SPI Mode
    initEncoders();
    Serial.println ("Encoders Initialized...");
    Serial.println ("Encoders Cleared...");
    }

    void loop() {
    delay(500);

    // Retrieve current encoder counters
    encodercount = readEncoder();


    Serial.print("Enc: ");
    Serial.println(encodercount);
    }

    void initEncoders() {

    // Set slave selects as outputs
    pinMode(slaveSelectEnc, OUTPUT);


    // Raise select pins
    // Communication begins when you drop the individual select signsl
    digitalWrite(slaveSelectEnc,HIGH);


    SPI.begin();

    // Initialize encoder
    // Negative index input
    // free-running count mode
    // x4 quatrature count mode (four counts per quadrature cycle)
    // NOTE: For more information on commands, see datasheet
    digitalWrite(slaveSelectEnc,LOW); // Begin SPI conversation
    SPI.transfer(0x88); // Write to MDR0
    SPI.transfer(0x00); // Configure x4 quadrature count mode (four counts per quadrature cycle)
    digitalWrite(slaveSelectEnc,HIGH); // Terminate SPI conversation

    /*MDR1 is not configured because its default value is 0x00 which is the desired value*/
    }

    int long readEncoder() {

    // Initialize temporary variables for SPI read
    unsigned int count_1, count_2, count_3, count_4;
    long count_value;

    // Read encoder

    digitalWrite(slaveSelectEnc,LOW); // Begin SPI conversation
    // SPI.transfer(0x20);

    SPI.transfer(0x60); // Request count
    count_1 = SPI.transfer(0x00); // Read highest order byte
    count_2 = SPI.transfer(0x00);

    count_3 = SPI.transfer(0x00);

    count_4 = SPI.transfer(0x00); // Read lowest order byte
    digitalWrite(slaveSelectEnc,HIGH); // Terminate SPI conversation

    count_value = (count_1 << 8) + count_2;
    count_value = (count_value << 8) + count_3;
    count_value = (count_value << 8) + count_4;

    return count_value;
    }

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Launchpad code,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

    #include <SPI.h>
    //#include <sysctl.h>
    // Slave Select pins for encoders 1 and 2
    // Feel free to reallocate these pins to best suit your circuit
    const int slaveSelectEnc= PD_2;


    // These hold the current encoder count.
    signed long encodercount = 0;

    void setup() {

    Serial.begin(9600); // Serial com for data output
    Serial.println("Encoders settings up.");

    Serial7.begin(115200); // Serial com for data output
    Serial7.println("Encoders settings up.");

    SPI.setModule(2);
    //SPI.beginTransaction(SPISettings(10000, MSBFIRST, SPI_MODE0));
    SPI.setBitOrder(MSBFIRST);
    SPI.setDataMode(SPI_MODE0);

    //unsigned int g_ui32SysClock;
    pinMode(PD_4,OUTPUT);
    digitalWrite(PD_4,LOW); // Mux pin
    pinMode(slaveSelectEnc, OUTPUT);
    digitalWrite(slaveSelectEnc,HIGH);

    SPI.begin();

    digitalWrite(slaveSelectEnc,LOW); // SS Pin

    SPI.transfer(0x88); // Write to MDR0
    SPI.transfer(0x00); // Configure x4 quadrature count mode (four counts per quadrature cycle)
    digitalWrite(slaveSelectEnc,HIGH); // Terminate SPI conversation

    //SysCtlClockFreqSet((SYSCTL_XTAL_25MHZ | SYSCTL_OSC_MAIN | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 12000000 );
    // clearEncoderCount();

    Serial.println("EEncodersncoders Cleared...");
    Serial7.println("EEncodersncoders Cleared...");

    }

    void loop() {
    delay(500);

    // Retrieve current encoder counters
    encodercount = readEncoder();
    //clearEncoderCount();


    Serial.print(" Enc: "); Serial.println(encodercount);
    Serial7.print(" Enc: "); Serial7.println(encodercount);

    //delay(500);

    }

    void clearEncoderCount() {

    // Set encoder1's data register to 0
    digitalWrite(slaveSelectEnc,HIGH);
    digitalWrite(slaveSelectEnc,LOW); // Begin SPI conversation
    // Write to DTR
    SPI.transfer(0x98);
    // Load data
    SPI.transfer(0x00); // Highest order byte
    SPI.transfer(0x00);
    SPI.transfer(0x00);
    SPI.transfer(0x00); // lowest order byte
    digitalWrite(slaveSelectEnc,HIGH); // Terminate SPI conversation

    delayMicroseconds(100); // provides some breathing room between SPI conversations

    // Set encoder1's current data register to center
    digitalWrite(slaveSelectEnc,LOW); // Begin SPI conversation
    SPI.transfer(0xE0);
    digitalWrite(slaveSelectEnc,HIGH); // Terminate SPI conversation

    }


    int long readEncoder() {

    // Initialize temporary variables for SPI read
    unsigned int count_1=0, count_2=0, count_3=0, count_4=0;
    long count_value;

    // Read encoder
    //digitalWrite(slaveSelectEnc,HIGH);
    digitalWrite(slaveSelectEnc,LOW); // Begin SPI conversation
    //delay(500);

    //SPI.transfer(0xE8);
    SPI.transfer(0x60); // Request count
    count_1 = SPI.transfer(0x00); // Read highest order byte
    count_2 = SPI.transfer(0x00);
    count_3 = SPI.transfer(0x00);
    count_4 = SPI.transfer(0x00); // Read lowest order byte


    //SPI.transfer(0x20);

    digitalWrite(slaveSelectEnc,HIGH);


    Serial.print("count_1 ");
    Serial.print(count_1 );
    Serial.print(" count_2 ");
    Serial.print(count_2);
    Serial.print(" count_3 ");
    Serial.print(count_3 );
    Serial.print(" count_4 ");
    Serial.print(count_4 );


    Serial7.print("count_1 ");
    Serial7.print(count_1 );
    Serial7.print(" count_2 ");
    Serial7.print(count_2);
    Serial7.print(" count_3 ");
    Serial7.print(count_3 );
    Serial7.print(" count_4 ");
    Serial7.print(count_4 );

    count_value = (count_1 << 8) + count_2;
    count_value = (count_value << 8) + count_3;
    count_value = (count_value << 8) + count_4;


    // count_value = (long) ( (count_1 << 24) | (count_2 << 16) | (count_3 << 8) | (count_4 ) ) ;

    return count_value;
    }

    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;