- LiTime Speicher und Akkus         
Ergebnis 1 bis 5 von 5

Thema: Kopassmodul cmps03 über I²C mit BASCOM

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    26.02.2007
    Beiträge
    9

    Kopassmodul cmps03 über I²C mit BASCOM

    Anzeige

    Praxistest und DIY Projekte
    Guten Tag!

    Verstehe nicht warum bei mir am Anfang jedes neuen Projektes nie etwas
    auf Anhieb klappen kann. Versuche momentan den Winkel eines
    cmps03-Kompassmoduls über I²C einzulesen. Das Ganze soll ja mit Bascom
    SEHR EINFACH funktionieren ... angeblich! Irgend etwas mache ich falsch.
    Alles klapp wunderbar bis ich die Funktion für den Winkel aufrufe. Mir
    kommt vor wie wenn das Programm in der Funktion stecken bleibt! Kann das
    sein ???

    Hier mal mein Code:


    Code:
    Declare Function Rn_cmps_himmelsrichtung() As Word
    
    ' ---------------RN-Mega128Funk übliche ------------------
    
    $regfile = "m128def.dat" ' Bei Mega 128 "
    $framesize = 32
    $swstack = 32
    $hwstack = 32
    $crystal = 16000000
    'Quarzfrequenz
    $baud = 19200                                               'Baudrate
    für Funkmodul
    $baud1 = 9600                                               'Baudrate
    für MAX
    
    Config Scl = Portd.0                                        'Ports fuer
    IIC-Bus
    Config Sda = Portd.1
    
    Config Ping.0 = Output                                      'Spannung an
    LCD aktivieren
    Lcdpower Alias Portg.0
    
    Config Pine.2 = Output
    Rdy_hostempfangsbereit Alias Porte.2                        'Auf Low
    setzen wenn Empfangsbereit für Datenvom Funkmodul
    
    Config Pine.5 = Input
    Bsy_funkmodulsendebereit Alias Porte.5                      'Ist Low
    wenn Funkmodul frei zum senden
    Open "com2:" For Binary As #2                               'Ausgabe
    über zweite serielle Schnittstelle (MAX)
    
    Sound Portg.2 , 400 , 450                                   'BEEP bei
    RN-Mega128Funk
    Sound Portg.2 , 400 , 250                                   'BEEP bei
    RN-Mega128Funk
    Sound Portg.2 , 400 , 450                                   'BEEP bei
    RN-Mega128Funk
    
    ' ---------------------------------------------------
    
    Config Pinf.6 = Output
    Lcd_rw Alias Portf.6
    Lcd_rw = 0
    Lcdpower = 1
    Waitms 500
    Config Lcd = 20 * 2
    Config Lcdpin = Pin , Db4 = Portf.3 , Db5 = Portf.2 , Db6 = Portf.1 ,
    Db7 = Portf.0 , E = Portf.5 , Rs = Portf.7
    Config Lcdbus = 4
    Initlcd
    Cls
    
    Cursor Off
    
    Dim Himmelsrichtung As Word
    
    I2cinit
    
    Do
    
       Himmelsrichtung = Rn_cmps_himmelsrichtung()
    
       Cls
       Lcd Himmelsrichtung
    
       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




    Im Anhang ebenfalls zu finden!
    Wichtig ist eigentlich nur die Mainloop und die Funktion. Ich bitte euch
    vielmals mir zu helfen ... DANKE !!!

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    CMPS03 lesen

    Hallo Matthias96,

    ich habe folgende Leseroutine für den CMPS03:
    Code:
    'CMPS03-Leseroutine:
    Function Cmps03(byval Register As Byte) As Word
      Local Hdata As Byte , Ldata As Byte
      Disable Interrupts
      I2cstart
      I2cwbyte &HC0 , Ack
      I2cwbyte Register
      Waitms 10
      I2cstart
      I2cwbyte &HC1 , Ack
      If Register = 2 Then
        I2crbyte Hdata , Ack                          '16-Bit lesen
      Else
        Hdata = 0
      End If
      I2crbyte Ldata , Nack
      Cmps03 = Hdata * 256
      Cmps03 = Cmps03 + Ldata
      I2cstop
      Waitms 10
      Enable Interrupts
    End Function
    Vielleicht klappt's damit?

    Gruß Dirk

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    26.02.2007
    Beiträge
    9
    Hi!

    Großen Dank erstmal!

    Bin jetzt soweit, dass wenn ich SCL, SCA und +5V anschieße den Wert 65535 bekomme. Egal ob mit deinem Programm oder mit meinem.
    Schließe ich nun GND (Masse) dazu werden die Signaltöne durch den am Board angebrachten Lautsprächer leiser. Die Signaltöne gebe ich alle 1 Sekunden aus um mich zu vergewissern das das Programm noch läuft. Mir kommt vor als würde das Modul auf einmal so viel Energie brauchen und nimmt es dem Board weg. Ebenfalls ist die Spannung für LCD weg.

    Ich habe echt keinen Plan was ich falsch mache!

    BITTE UM HILFE ... DANKE!!!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803

    Problem 1 CMPS03

    Hallo Matthias96,

    Mir kommt vor als würde das Modul auf einmal so viel Energie brauchen und nimmt es dem Board weg. Ebenfalls ist die Spannung für LCD weg.
    Oh...oh...,

    das sieht böse nach Hardware-Problem aus!

    Check noch 'mal die Stromversorgung des CMPS03!

    Gruß Dirk

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    26.02.2007
    Beiträge
    9
    Grüße!

    Ich weis echt nicht was ich falsch mache! Ich nehme die Stromversorgung (5V) vom Wannenstecker für I²C. Ist doch in Ordnung oder ?

Berechtigungen

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

LiTime Speicher und Akkus