BASCOM SPI Gyro auslesen

Gast #3862667
Lesenswert?

Hallo,
ich habe ein neues Gyro bekommen:
Hier das Datenblatt:
http://www.siliconsensing.com/media/30649/DocNo-CRG20-00-0100-110-Rev-9PDF.pdf
SPI Interface Seite 10-11.

In Bascom habe ich mit SPI noch nichts gemacht, deshalb ein paar Fragen.

Ich benutze zum Flashen die ISP Schnittstelle.
Das bedeutet, das Hardware SPI ist besetzt.
Ist es da schlauer für den Sensor gleich Software SPI zu verwenden?

Also mein AVR wäre dann der Master, mein Gyro Slave,
ansonsten ist an dem Bus nix mehr.
Wie geht das bei SPI mit der Adressierung?

Also laut Datenblatt muss ich erst mal 6 Bytes senden.
Erstes ist Control Byte:
bit 7-4: Reserved: 0 setzten
bit 3: 0 = Deactivate CBIT_A test
bit 2-0: 011 = Rate / Temperature sensor data
Also Control Byte: &B00000011
Die nächsten 4 Bytes sind Null, dann Checksum

Die 6 Bytes per Spiout ausgeben?

Folgt nach dem SPIOUT dirrekt Spiin?

Ist das soweit richtig?
Gast #3862679
Lesenswert?

Chris schrieb:
> Das bedeutet, das Hardware SPI ist besetzt.

Zumindest dein Sensor hat für die Nutzung des SPI mit mehr als zwei 
Teilnehmern ein SPI-Selekt Signal.

> Folgt nach dem SPIOUT dirrekt Spiin?

Die Daten fließen bei SPI immer gleichzeitig auf Input und Output. Ob 
das leere oder notwendige Daten sind, entscheidet die Applikation.
Gast #3862732
Lesenswert?

> Folgt nach dem SPIOUT dirrekt Spiin?

>Die Daten fließen bei SPI immer gleichzeitig auf Input und Output. Ob
>das leere oder notwendige Daten sind, entscheidet die Applikation.

Ich hatte mich auf den Quellcode bezogen.
Gast #3865291
Lesenswert?

Hab jetzt mal ein kleines Programm geschriben.
Kann da mal jemand drüber schauen?
Haut das so hin wie ich mir das vorstelle?
1
$regfile = "m644adef.dat"
2
$crystal = 16000000
3
$hwstack = 50
4
$swstack = 50
5
$framesize = 50
6

7
Dim Temp_out As Integer
8
Dim Gyro_zout As Integer
9
Dim Y As Byte
10

11
Config Spi = Soft , Din = Pina.0 , Dout = Porta.1 , Ss = Porta.2 , Clock = Porta.3
12
Dim Out_byte(6) As Byte
13
Dim In_byte(6) As Byte
14
Out_byte(1) = &B00000011
15
Out_byte(2) = 0
16
Out_byte(3) = 0
17
Out_byte(4) = 0
18
Out_byte(5) = 0
19
Out_byte(6) = &B00000011
20

21
Spiinit
22

23

24
Gyro_data:
25
Spiout Out_byte(1) , 6
26
Spiin In_byte(1) , 6
27

28
Temp_out = Makeint(in_byte(3) , In_byte(2))
29
Gyro_zout = Makeint(in_byte(5) , In_byte(4))
30

31
Return

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren