- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 9 von 9

Thema: Auslesen eines Sensor

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2004
    Beiträge
    131

    Auslesen eines Sensor

    Anzeige

    Praxistest und DIY Projekte
    Hallo
    Ich habe das RN-Mega 128 Funkboard von Robotikhardware. Daran habe ich ein Beschleunigungsensor angeschlossen.

    http://www.lipoly.de/index.php?main_...9695dd5a56ac11

    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:

    Code:
    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]

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    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.
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2004
    Beiträge
    131

    Antwort

    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!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Vitis
    Registriert seit
    06.01.2005
    Ort
    Südpfalz
    Alter
    50
    Beiträge
    2.253
    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
    Vor den Erfolg haben die Götter den Schweiß gesetzt

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    19.02.2007
    Beiträge
    210
    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

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2004
    Beiträge
    131

    Antwort

    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?

  7. #7
    Erfahrener Benutzer Roboter Experte Avatar von Tido
    Registriert seit
    14.11.2006
    Ort
    OWL
    Alter
    48
    Beiträge
    622
    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.
    MfG
    Tido

    ---------------------------------------------------
    Have you tried turning it off and on again???
    ---------------------------------------------------

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2004
    Beiträge
    131

    Antwort

    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.

  9. #9
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    17.02.2004
    Beiträge
    131

    Hilfe

    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.

    Code:
    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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen