-         

Ergebnis 1 bis 10 von 10

Thema: Kompasssensor CMPS03 an I2C

  1. #1
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    76

    Kompasssensor CMPS03 an I2C

    Anzeige

    Hab mir einen Kompasssensor für meinen mega2560 bestellt und ihn angeschlossen...auch richtig. Aber beim Programmbeispiel (angepasst an den 2560) liefert er mir keine Ausgabe ausser dem Print in dem Beispiel "RN-Control CMPS03 Kompass Testprogramm
    CMPS03 Kompass Firmware Version:". Verzweifel langsam dran... 4 kabel und en paar zeilen code....aber keine Antwort *schnief*

    ich poste mal den Code:

    Code:
    Declare Function Rn_cmps_himmelsrichtung() As Word
    Declare Function Rn_cmps_firmware() As Byte
    
    
    ' ---------- Das RN-Control übliche --------------
    $prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
    
    $regfile = "m2560def.dat"
    $hwstack = 82                                               
    $framesize = 68                                             
    $swstack = 68                                               
    
    $crystal = 16000000                                         'Quarzfrequenz
    
    $baud = 9600
    
    Config Scl = Portd.0                                        'Ports fuer I2C-Bus
    Config Sda = Portd.1
    
    Config Pine.5 = Input
    USB Alias Pine.5                                            'Ist 1 wenn USB angeschlossen
    
    Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Open "com4:" For Binary As #4                               'USB Buchse
    
    ' ------------------------------------------------
    
    Dim Himmelsrichtung As Word
    Dim Grad As Single
    Dim V As Byte
    
       Wait 3                           'Warte 3 Sekunde
       I2cinit
       Print #4 , "RN-Control CMPS03 Kompass Testprogramm "
       Print #4 , "CMPS03 Kompass Firmware Version:" ; Rn_cmps_firmware()
    
    
       V = 1
       Do
         Himmelsrichtung = Rn_cmps_himmelsrichtung()
         Print #4 , "Himmelsrichtung in 0,1 Grad Schritten: " ; Himmelsrichtung
         Grad = Himmelsrichtung / 10
         Print #4 , "Himmelsrichtung genau in Grad: " ; Grad
    
         V = V + 3
         Wait 1
       Loop
    
    End
    
    
    
    Function Rn_cmps_himmelsrichtung() As Word
    Local Lob As Byte
    Local Hib As Byte
    Local Cmps_slaveid As Byte
    Local Cmps_slaveid_read As Byte
    
       Cmps_slaveid = &HC0
       Cmps_slaveid_read = Cmps_slaveid + 1                     'Register auswählen
       I2cstart
       I2cwbyte Cmps_slaveid
       I2cwbyte 2
       I2cstop
    
       I2cstart
       I2cwbyte Cmps_slaveid_read
       I2crbyte Hib , Ack
       I2crbyte Lob , Nack
       I2cstop
    
       Rn_cmps_himmelsrichtung = Makeint(lob , Hib)
    End Function
    
    
    Function Rn_cmps_firmware() As Byte
    Local Firmware As Byte
    Local Cmps_slaveid As Byte
    Local Cmps_slaveid_read As Byte
    
       Cmps_slaveid = &HC0
       Cmps_slaveid_read = Cmps_slaveid + 1
    
       I2cstart
       I2cwbyte Cmps_slaveid
       I2cwbyte 0                                               'Leseregister festlegen
       I2cstop
    
       I2cstart
       I2cwbyte Cmps_slaveid_read
       I2crbyte Firmware , Nack
       I2cstop
    
       Rn_cmps_firmware = Firmware
    End Function
     ---
    Jemand en Tipp? Kann ich das Ding andersweitig auf seine Funktion testen? Habt ihr das einfach angeschlossen und es ging?

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Hallo Diron,

    probier die Functions 'mal so:
    Code:
    Function Rn_cmps_himmelsrichtung() As Word 
    Local Lob As Byte 
    Local Hib As Byte 
    Local Cmps_slaveid As Byte 
    Local Cmps_slaveid_read As Byte 
    
    Cmps_slaveid = &HC0 
    Cmps_slaveid_read = Cmps_slaveid + 1 'Register auswählen 
    I2cstart 
    I2cwbyte Cmps_slaveid , Ack
    I2cwbyte 2 
    Waitms 10 
    
    I2cstart 
    I2cwbyte Cmps_slaveid_read , Ack
    I2crbyte Hib , Ack 
    I2crbyte Lob , Nack 
    I2cstop 
    
    Rn_cmps_himmelsrichtung = Makeint(lob , Hib) 
    End Function 
    
    
    Function Rn_cmps_firmware() As Byte 
    Local Firmware As Byte 
    Local Cmps_slaveid As Byte 
    Local Cmps_slaveid_read As Byte 
    
    Cmps_slaveid = &HC0 
    Cmps_slaveid_read = Cmps_slaveid + 1 
    
    I2cstart 
    I2cwbyte Cmps_slaveid , Ack
    I2cwbyte 0 'Leseregister festlegen 
    Waitms 10 
    
    I2cstart 
    I2cwbyte Cmps_slaveid_read , Ack
    I2crbyte Firmware , Nack 
    I2cstop 
    
    Rn_cmps_firmware = Firmware 
    End Function
    Gruß Dirk

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    76
    Da meckert mein Bascom bei "I2cwbyte Cmps_slaveid , Ack" mit "Invalid datatype", sowie am Ende mit "End Sub or End Function expected"

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.791
    Da meckert mein Bascom ...
    Es müßte gehen, wenn du nicht Variablen für die CMPS03-Adressen nimmst, sondern Konstanten, also so:
    I2cwbyte &HC0 , Ack

    Gruß Dirk

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    76
    Das hat leider nichts gebracht. Hab ich was anner verkabelung falsch gemacht? Ich verbinde doch nur SCL mit SCL und SDA mit SDA. Keine Widerstände oder sowas. Einfach direkt dran...
    Strom dran... fertig!
    *grmbl*

    Kann das Kompassmodul kaputt sein? Hab schon den Support gefragt, der meinte das wäre sehr unwahrscheinlich. Haben wohl noch kein kaputtes Modul gehabt.
    Kann ich das irgendwie testen ob das ding noch zuckt oder schon tot ist?

  6. #6
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    26
    Beiträge
    601
    Hi,

    du musst da umbeding 10k Widerstände von SDA nach Vcc und von
    SCl nach Vcc legen, sonst funktioniert da garnichts. War auch bei mir der
    Fehler, 2 Widerstände dran, funktioniert. Ich weiß nur nicht ob das Modul
    da schon welche intern hat?

    http://www.robotikhardware.de/downlo...s03kompass.pdf
    Seite 3 da steht das über die PullUps
    Grüße Furtion

  7. #7
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    76
    Ja, das ist doch mal ne Aussage. Neben der fehlenden Dokumentation über vorhandenen oder nicht vorhandenen Pullup-Widerstände auf dem Mega2560 Board wäre die Erwähnung von notwendigen Abschlußwiderständen für den I2C-BUS im RN-Wissen Artikel durchaus sinnvoll.

    Nochmal ne Frage dazu... auf beiden Seiten die Widerstände? Oder reicht es einseitig SDL und SDA mit 10k an VCC anzubinden? Was passiert wenn ich weitere I2C Geräte dranhänge?

  8. #8
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    13.05.2005
    Alter
    26
    Beiträge
    601
    Hi,

    du musst SDA ----10k------VCC(der Pluspol)
    und SCL -----10k-----VCC

    genau so musst du es aufbauen. Und das nur einmal(glaube ich).
    Grüße Furtion

  9. #9
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    22.05.2005
    Ort
    12°29´ O, 48°38´ N
    Alter
    48
    Beiträge
    2.731
    Hallo,

    Abschlusswiderstände gibts/brauchts beim I2C-Bus nicht, nur diese Pullups, davon je einen irgendwo in der Leitung, wo ist egal.
    Da es ein Bus ist, kann man weitere Teilnehmer einfach dazu anklemmen.

    Die Seite im Wiki ist doch recht gut gelungen, genauso muss es verkabelt werden wie in dem Bild.

    PS:
    Gemeinsame Masse (Gnd) nicht vergessen !

  10. #10
    Benutzer Stammmitglied
    Registriert seit
    22.12.2007
    Ort
    Wuppertal
    Beiträge
    76
    jetzt bekomme ich nur 0 als Rückmeldung:

    Firmware: 0
    Himmelsrichtung in 0,1 Grad Schritten: 0
    Himmelsrichtung genau in Grad: 0.0

    Jemand en Tipp?

Berechtigungen

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