Forum: Mikrocontroller und Digitale Elektronik vti sca1000-d01 spi problem


von Dani H. (sinthoras)


Angehängte Dateien:

Lesenswert?

Hallo Zusammen,

bisher hat mir die Suchfunktion gut geholfen, aber für folgendes Problem 
finde ich einfach keine Lösung:

Ich möchte zur Neigungsmessung einen VTI Sensor (sca1000-d01) per SPI
mit einem AtMega32 verbinden. Ich sende dem Sensor ein Byte Daten (z.B. 
0x08)und er sollte dann den Messwert (ebenfalls ein byte) zurückgeben, 
dieser wird dann an ein ebenfalls per SPI angeschlossenes Display 
gesendet.
Allerdings kommen vom Sensor keine Werte zurück.

Datenblatt des Sensors im Anhang.

Hoffe irgendjemand kann mir weiterhelfen, schon mal Danke im Voraus :)


char empfang2;

void SPI_MasterInit(void){
  /* set MOSI and SCK and SS to output, MISO to input */
  DDRB = (1<<PB5)| (1<<PB7)|(1<<PB4); //pb4 ist ss für sensor
  DDRB &= ~(1<<PB6);

  //enable spi, master, set clock rate to fck/32
  SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPI2X);

        DDRD |= (1<<PD6); //ss für das display
  PORTD |=(1<<PD6);
}

void SPI_MasterTransmit(char cData, uint8_t slave){

  //start transmission
  if(slave == 0){
    PORTB &=~(1<<PB4);
  } else {
    PORTD &=~(1<<PD6);
  }
  _delay_us(80);
  SPDR = cData;

  //wait for transmission complete
  while(!(SPSR & (1<<SPIF)));

  empfang2 = SPDR;

  _delay_us(80);
  PORTB |=(1<<PB4);
  PORTD |=(1<<PD6);
}

void main(void){

  SPI_MasterInit();

  while(1){

    SPI_MasterTransmit(0x08, 0); //signal an den sensor
    _delay_ms(800);
    SPI_MasterTransmit(empfang2, 1); //sensorwert an das
                                                    display senden
    _delay_ms(8000);
        }

von Juergen G. (jup)


Lesenswert?

So wie das im Datenblatt aussieht musst Du immer 2 * 8 Bit "clocken".
Das erste mal um den Befehl zu senden und das zweite mal um die Antwort 
zu bekommen. Beim zweiten Byte sendest Du alles Nullen und bekommst Die 
Antwort.

Ju

von Dani H. (sinthoras)


Lesenswert?

Hallo Jürgen,

erstmal danke für Deine schnelle Info und sorry für meine späte Antwort 
(Prüfungszeit an der Uni, da bin ich immer etwas gestresst :)

Ich bekomme jetzt eine Antwort, aber die ist immer 255??? Kann es sein, 
dass der Sensor den Befehl nicht richtig erkennt?

Grüße
Dani

von Juergen G. (jup)


Lesenswert?

Ja kann sein.

if an invalid command is received, no data is shifted into the chip and 
the MISO remains in high impedance state until the falling edge of CSB. 
This reinitializes the serial communication.


probier mal ein anderes Komando.

und beachte:

Communication can be carried out by software or hardware based SPI. 
Please note that in the case of hardware based SPI, the received 
acceleration data is 11 bits.

von Dani H. (sinthoras)


Angehängte Dateien:

Lesenswert?

konnte übers wochenende mal bei nem befreundeten kfzler aufm oszi die 
signale messen, schauen bis auf den miso eigentlich ganz gut aus find 
ich.

die sache mit den 11 bit der vti sensoren, dazu gabs hier schon mal nen 
fred, wurde so gelöst, dass nach dem eigentlichen kommando ein 
"dummy-befehl" gesendet wurde, der dann die fehlenden 5 bit ausgelesen 
hat

grüße
dani

von Juergen G. (jup)


Lesenswert?

Wenn MISO nicht kommt, so wie auf den Osci Bildern zu sehen, dann hat 
der Chip den Befehl nicht verstanden oder er funktioniert aus irgend 
einem anderen Grund nicht (Spannungsversorgung, CS Signal, irgendein Pin 
nicht richtig beschaltet).

Das Osci Bild sieht aus als ob Du ein Komando sendest, da wird der Chip 
nicht antworten. Du musst das Komando senden und danach 16 Bit leer 
senden und jeweils nach 8 gesendeten Bit das  SPDR auslesen und die 
beiden Bytes dann zusammenhaengen.

von Dani H. (sinthoras)


Lesenswert?

da bin ich aber wirklich auf der Leitung gestanden, jetzt funktioniert 
alles... vielen vielen Dank für deine unerschöpfliche Geduld :)

Nochmal für alle die über selbiges Problem stolpern:

1)   csb low
2)   Befehl in SPDR schreiben
3)   Dummybyte in SPDR schreiben
4)   Antwort teil1 aus SPDR auslesen
5)   zweites Dummybyte senden
6)   Antwort teil2 aus SPDR auslesen
7)   csb high

von Juergen G. (jup)


Lesenswert?

Na also,
wie es immer so ist, kaum macht mans richtig funktionierts auch.

Ju

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.