SCA61T per SPI 11 Bit auslesen?
Mittwoch, 23. Mai 2012
 
 

PIC Mikrocontroller Forum  |  PIC Mikrocontroller  |  CCS Compiler  |  Schnittstellen (CCS)  |  SCA61T per SPI 11 Bit auslesen? « vorheriges nächstes »
Seiten: [1] Nach unten Drucken
Autor Thema: SCA61T per SPI 11 Bit auslesen?  (Gelesen 2121 mal)
 
TDK29
Gast
« am: Juni 14, 2010, 18:54:35 »

Hi,
ich versuche schon einige Tage bei einem Lagesensor (SCA61T-FA1H1G) die 11 Bits für die Lage auszulesen.
Folgender Ansatz:
Code:
OUTPUT_LOW(PIN_A5);
SPI_WRITE(0x10);
// read 11 bit of data from SPI, starting with MSB

value = (int32)SPI_READ(0x10); // Read the first 8 bytes
value2 = ((int32)SPI_READ(0x10)); // Read the last 3 bytes
OUTPUT_HIGH(PIN_A5);
value2 >>= 1; // shift the second 3 bytes one bit to the right
value <<= 3; // shift the first 8 bytes 3 bits to the left
value += value2; // summ value and value2
Leider wird, auch wenn value2 einzeln ausgegeben wird, nichts richtiges angezeigt - die Bits "floaten".
Jemand eine Idee wie man die restlichen 3 Bits auslesen könnte?

Danke

mfg
TDK
Gespeichert
Master Snowman
Sr. Member
****
Offline Offline

Beiträge: 289



Profil anzeigen WWW
« Antworten #1 am: Juni 15, 2010, 07:57:37 »

hallo TDK
wenn ich das richtig sehe, sendet der sensor einfach 11 brauchbare bits. das hindert dich aber nicht 16 taktflanken zu senden, resp. 16 bits einzulesen. wenn ich deinen text lesse und deinen code, so bringst du 'bits' und 'bytes' durcheinander: 8 bits sind 1 byte. vielleicht basiert darauf der fehler?
ps: bist du sicher, dass deine berechnung (shifts und addition) OK ist, ich habe ein dumpfes gefühl, dass da auch was mit der SPI-konfiguration nicht i.O. ist (ist aber nur eine vermutung). sinn machen würde doch sowas wie:
Code:
value1 = (int32)SPI_READ(0x10); // reads upper 8 bits
value2 = (int32)SPI_READ(0x10); // reads lower 3 bits
value1 <<= 3; // shifts upper 8 bits by 3,   0000'0000'xxxx'xxxx -> 0000'0xxx'xxxx'x000 (x = received bits)
value2 >>= 5; // shifts lower 3 bits by 5,   0000'0000'xxxy'yyyy -> 0000'0000'0000'0xxx (y = received non sense bits)
value = value1 | value2; // packs the 11 bits together
brauchst du wirklich int32? int16 täte es auch schon ;-)
Gespeichert
TDK29
Gast
« Antworten #2 am: Juni 15, 2010, 08:33:08 »

Hi,
Stimmt beim verschieben dürfte was schief gelaufen sein.
Aber auch  bevor ich die zwei Addiere bekomm ich bei Value2 nichts richtiges heraus. Value1 hingegen funktioniert wunderbar (einzeln ausgelesen)
Die SPI-Konfiguration sieht wie folgt aus.
Code:

...
#define SPI_MODE_0_0 0x4000
...
setup_spi(SPI_MASTER| SPI_MODE_0_0 | SPI_CLK_DIV_64);

mfg
TDK
Gespeichert
Seiten: [1] Nach oben Drucken 
« vorheriges nächstes »
Gehe zu:  

Powered by MySQL Powered by PHP Made for Mozilla (Firefox) Made for Internet Explorer
Seite erstellt in 0.035 Sekunden mit 20 Zugriffen.
 
Top! Top!