DUE SPI - magnetic encoder AS5048


hello,

i followed qubit's example wiring ams as5048 magnetic encoder, discussed in thread:

http://forum.arduino.cc/index.php?topic=155238.0

with modifications suggested markt, resulting code works very, on arduino mega 2560. getting strange results on due. think may because data structures on due different, bit coding not expertise. feel there may issues spi on due i'm not quite sure how handle.

here's mega code:

code: [select]

#include "spi.h"
unsigned int result = 0;
unsigned int result1 = 0;
unsigned int result2 = 0;

void setup() {
serial.begin(115200);
  
spi.begin();
spi.setbitorder(msbfirst);
spi.setdatamode (spi_mode1);
}


void loop() {
digitalwrite(ss, low);
//reading 8 bit frame (the first half of 16-bit spi transfer)
result1 = spi.transfer(0b00000000);
// getting last 8 bits (the last half of 16-bit spi transfer)
result2 = spi.transfer(0b00000000);
// release spi    
digitalwrite(ss, high);

// removing (masking) first 2 bit
result1 &= 0b00111111;
//shifting 8 bit left. create emty space last 8 bit transfer
result1 = result1 << 8;
// merging
result = result1 | result2;
serial.print("result: ");
serial.print(result, bin);
serial.print(" = ");
serial.println(result, dec);
serial.println();

delaymicroseconds(800);
}


now trying port code arduino due. have read docs including:

http://www.arduino.cc/en/reference/dueextendedspi


my due code:

code: [select]

// spi
#include "spi.h"
unsigned int result = 0;
unsigned int result1 = 0;
unsigned int result2 = 0;

void setup() {
serial.begin(115200);

spi.begin(10);
spi.setclockdivider(10, 21); //  4mhz spi bus transfer speed
spi.setbitorder(msbfirst);
spi.setdatamode(spi_mode1);
}

void loop() {

result1 = spi.transfer(10, 0b00000000, spi_continue);
result2 = spi.transfer(10, 0b00000000);

// removing (masking) first 2 bit
result1 &= 0b00111111;

//shifting 8 bit left. create emty space last 8 bit transfer
result1 = result1 << 8;

// merging
result = result1 | result2;
serial.print("result: ");
serial.print(result, bin);
serial.print(" = ");
serial.println(result, dec);
serial.println();

delaymicroseconds(800);
}


the values receive (result) in correct range (0->16384). instead of increasing 0 16384 on course of 1 rotation (as on mega), values jump erratically. seeming "roll over" unexpectedly several times during each rotation.

any appreciated.

could size of int being 32bit in due , 16 bit in uno?


Arduino Forum > Using Arduino > Sensors > DUE SPI - magnetic encoder AS5048


arduino

Comments