Forum: Mikrocontroller und Digitale Elektronik Frage zu SCA61T-FA1H1G mit PIC18F4620


von Philipp H. (tdk29)


Lesenswert?

Hi,
ich versuche heute schon den ganzen Nachmittag eine Übertragung vom 
SCA61T auf den USB-Port zu bekommen.
Folgender Code bis jetzt:
1
#include <18F4620.h>
2
#fuses HS
3
#use delay(clock=16000000)
4
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)
5
6
7
int16 x;
8
void main()
9
{
10
   setup_spi(SPI_MASTER| SPI_L_TO_H| SPI_CLK_DIV_4);
11
  while(1)
12
  {
13
    x = SPI_Read();
14
    printf("Zahl %u\r\n", x);
15
    delay_ms(500);  }
16
}

Leider bekomme ich nur 255 bei Putty empfangen.
Das Problem muss irgendwo zwischen Empfangen vom Lagesensor und Senden 
vom PIC auf die Serielle Schnittstelle liegen.
Ich denke das Problem liegt daran die 11 Bits aus dem Lagesensor 
auszulesen.
Hat jemand eine Idee woran dies liegen könnte?
Danke
mfg
TDK

von holger (Gast)


Lesenswert?

>Hat jemand eine Idee woran dies liegen könnte?

Ja, das liegt daran das CS nicht benutzt wird.
Wie man das macht sieht man sehr schön im Timing Diagramm.

von Philipp H. (tdk29)


Lesenswert?

Danke erstal. Trotzdem bekomme ich nur 8 Bit Empfangen.
(von 00 bis FF / 0 - 255).
1
#include <18F4620.h>
2
#fuses HS
3
#use delay(clock=16000000)
4
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, parity=N, bits=8)
5
6
#define SPI_MODE_0_0 0x4000
7
8
int16 x;
9
void main()
10
{
11
  output_high(PIN_A5);
12
  delay_ms(50);
13
   setup_spi(SPI_MASTER| SPI_MODE_0_0| SPI_CLK_DIV_64);
14
  while(1)
15
  {
16
    output_low(PIN_A5);
17
    spi_write(0x10);
18
    x = SPI_Read(0x10);
19
    output_high(PIN_A5);
20
    printf("Zahl %ld\r\n", x);
21
    delay_ms(50);
22
23
  
24
  }
25
}
Danke schon mal
mfg
TDK

von holger (Gast)


Lesenswert?

>Danke erstal. Trotzdem bekomme ich nur 8 Bit Empfangen.
>(von 00 bis FF / 0 - 255).

Das wird wohl daran liegen das du nur 8 Bit abholst.

>int16 x;
>printf("Zahl %ld\r\n", x);

int16 und %ld passt nicht so gut zusammen.

von Philipp H. (tdk29)


Lesenswert?

So,
jetzt bin ich echt verwirrt...
SPI arbeitet doch als Schieberegister?
Gut
das heißt ich schicke in den 8(?) Bit Buffer in meinen Code dann einfach
1
 spi_write(0x10)
 und bekomme dann aus dem Register 0x10 durch
1
 spi_read(0x10)
 die Daten aus dem Registern 0x10?
Oder dient "spi_write" als Speicheradressauswahl? aber warum schreib ich 
dann bei "spi_read" auch 0x10 hinzu?...
Sprich - müsste ich um die nächsten 3 bits auszulesen dann noch 3 Bits 
rüberschicken oder müsste ich dann die Adresse 0x18 angeben?...
mfg
Philipp

von Martin Leonhardt (Gast)


Lesenswert?

Hi

Mit spi_write(0x10) gibst du denn Command an den SCA61 weiter. In dem 
Fall RDAX was für "Read X-channel acceleration through SPI" steht.

Danach musst du 2 mal 8 Bit auslesen und diese zusammenfügen. Die ersten 
11 MSB sind dann die du benötigst.

Gruß Martin

P.S. welche Header Datei verwendet ihr?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.