PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Auslesen eines Sensor



BlackBroom
21.04.2007, 22:34
Hallo
Ich habe das RN-Mega 128 Funkboard von Robotikhardware. Daran habe ich ein Beschleunigungsensor angeschlossen.

http://www.lipoly.de/index.php?main_page=product_info&cPath=814_821&products_id=5612&zenid=ec278f43819d0d7f169695dd5a56ac11

Ich den SCL / SDA Anschluss des Sensors an die des Controller und an den VDD Anschluss des Sensors habe ich 2,5 V dran und an den GND -.
Mein Code ist folgender:



Declare Function Rn_beschleunigung() As Word

' ---------------RN-Mega128Funk übliche ------------------
$regfile = "m128def.dat" ' Bei Mega 128 "
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 19200
$baud1 = 9600
Config Scl = Portd.0
Config Sda = Portd.1
Config Ping.0 = Output
Lcdpower Alias Portg.0
Config Pine.2 = Output
Rdy_hostempfangsbereit Alias Porte.2
Config Pine.5 = Input
Bsy_funkmodulsendebereit Alias Porte.5
Open "com2:" For Binary As #2
Sound Portg.2 , 400 , 450
Sound Portg.2 , 400 , 250
Sound Portg.2 , 400 , 450
' ---------------------------------------------------
Dim Beschleunigung As Word
Dim V As Byte
Wait 3
I2cinit
Print "RN-Mega128Funk Testprogramm "
V = 1
Do

Beschleunigung = Rn_beschleunigung()
Print "Wert x: " ; Beschleunigung

V = V + 3
Wait 1
Loop
End

Function Rn_beschleunigung() As Word
Local Lob As Byte
Local Hib As Byte
Local be_slaveid As Byte
Local be_slaveid_read As Byte
be_slaveid = &H1D

'Register auswählen
I2cstart
I2cwbyte be_slaveid
I2cwbyte 2
I2cstop
I2cstart
I2cwbyte be_slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Rn_beschleunigung = Makeint(lob , Hib)
End Function


Der gibt aber als Wert immer nur 0 aus. Woran liegt das?
Vielen Dank für die Hilfe im Vorraus![/url]

Vitis
22.04.2007, 02:44
also du hast zwar die "be_slaveid" mit nem Wert belegt, die
"be_slaveid_read" aber nicht. Im Übrigen würd ich die Werte
nicht als local Variable in die Subroutine einbauen, sondern
als const also als Konstante definieren, das schont Programmspeicher,
Ram und Rechenpower.

BlackBroom
22.04.2007, 07:16
Hallo
Was muss aber bei be_slaved = &H1D hin? Das ist doch die Adresse des Sensors oder? In der Anleitung steht "The Slave ADdress (SAD) associated to the LIS3LV02DQ is 0011101b" Wie müsste den dann die Adresse lauten?

Und was muss den bei I2cwbyte 2 hin?

In der Anleitung stehen auch verschiedene Register Address. Was ich da auslesen wollte ist OUTX_L, Binary:0101000 Hex:28.

Vielen Dank für die Hilfe im Vorraus!

Vitis
22.04.2007, 18:04
The slave address is completed with a Read/Write bit. If the bit was ‘1’ (Read), a repeated
START (SR) condition will have to be issued after the two sub-address bytes; if the bit is ‘0’
(Write) the Master will transmit to the slave with direction unchanged.

Zähl mal die Bits von 0011101b ... richtig, 7 Bits. Wo ist das achte Bit?
Richtig, das ist das read / write - Bit ;)
Also 00111010
und 00111011

ist aber auch n selten dämliches Datenblatt

magic33
22.04.2007, 18:17
das haben die i2c datenblätter so ansich
schau dir mal das von PCF8574 an
adressierung kapittel 7 is der hammer

und dann sind die chips auch noch mit anderen buchstaben bedruckt als im datenblatt angegeben der oberhammer

BlackBroom
22.04.2007, 21:03
Hallo
Aber was muss bei I2cwbyte 2 hin?
Benötigt man eigentlich einen Pullup Widerstand ?
Wenn ja wie groß muss der sein und wohin muss der?

Tido
22.04.2007, 21:37
Hallo,

soviel ich weiß, sind Pullups erforderlich (ich habe mit 10K gute Erfahrungen gemacht). Auch musste ich feststellen, dass (bei meinem sehr langen Bus) nur durch den Einsatz der 330-Ohm-Widerstände (je einen in der SCL- und SDA-Leitung vom Bus zum IC) ein wirklich störungsfreier Betrieb möglich war.

BlackBroom
23.04.2007, 07:23
Hallo,
Ok mein I2C Bus wird nicht so lang, dann sollte ja ein 10k Widerstand reichen. Aber wo muss dieser Pullup Widerstand genau hin?
Ich habe ja ein Kabel von + Anschluss des Controllerboards zu dem VDD Anschluss des Sensors, dann eins vom - Anschluss des Controllerboards zum GND Anschluss des Sensors und ein Kabel von SDA bzw SCL Anschluss des Sensores zu dem des Controllerboard.

BlackBroom
28.04.2007, 09:56
Hallo,
So habe Pullup Widerstände dran.
Aber ich kriege die Programmierung nicht hin. Entweder kommt als Wert 0 raus oder 65535. Woran liegt das?
Bräuchte dabei drigend Hilfe.
Code verwende ich folgenden.




Declare Function Rn_beschleunigung() As Word

' ---------------RN-Mega128Funk übliche ------------------
$regfile = "m128def.dat" ' Bei Mega 128 "
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 19200
$baud1 = 9600
Config Scl = Portd.0
Config Sda = Portd.1
Config Ping.0 = Output
Lcdpower Alias Portg.0
Config Pine.2 = Output
Rdy_hostempfangsbereit Alias Porte.2
Config Pine.5 = Input
Bsy_funkmodulsendebereit Alias Porte.5
Open "com2:" For Binary As #2
Sound Portg.2 , 400 , 450
Sound Portg.2 , 400 , 250
Sound Portg.2 , 400 , 450
' ---------------------------------------------------
Dim Beschleunigung As Word
Dim V As Byte
Wait 3
I2cinit
Print "RN-Mega128Funk Testprogramm "
V = 1
Do

Beschleunigung = Rn_beschleunigung()
Print "Wert x: " ; Beschleunigung

V = V + 3
Wait 1
Loop
End

Function Rn_beschleunigung() As Word
Local Lob As Byte
Local Hib As Byte
Local be_slaveid As Byte
Local be_slaveid_read As Byte
be_slaveid = &B00111011
be_slaveid_read = be_slaveid+1

'Register auswählen
I2cstart
I2cwbyte be_slaveid
I2cwbyte 2
I2cstop
I2cstart
I2cwbyte be_slaveid_read
I2crbyte Hib , Ack
I2crbyte Lob , Nack
I2cstop
Rn_beschleunigung = Makeint(lob , Hib)
End Function