Forum: Mikrocontroller und Digitale Elektronik BASCOM SPI Gyro auslesen


von Chris (Gast)


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?

von Mike (Gast)


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.

von Chris (Gast)


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.

von Chris (Gast)


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

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.