- LiFePO4 Speicher Test         
Ergebnis 1 bis 4 von 4

Thema: Rn-Control ATMEGA2560 mit Kompass CMPS03

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    25.05.2005
    Beiträge
    16

    Rn-Control ATMEGA2560 mit Kompass CMPS03

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute,

    ich versuche mit meinem ATMEGA2560 Bord den Kompass CMPS03 (der Kompass hier aus dem Shop, allerdings ohne Quarz, wenn ich das richtig sehe) über I2C anzusteuern.

    Allerdings funktioniert das nicht so ganz. Ich habe den Kompass an Port D 0 und 1 angeschlossen (laut Datenblatt sind das die I2C Ports). Zusätzlich habe ich noch +5V und GND Leitung vom Kompass mit den entsprechenden Pins auf dem Board verbunden.

    Wenn ich dann allerdings versuche den Kompass im Programm anzusprechen, hängt sich das Programm auf:

    Code:
    $prog , 255 , &B11011001 ,                                  'Quarz an / Teiler aus / Jtag aus
    
    $regfile = "m2560def.dat"
    $hwstack = 82                                               '80
    $framesize = 68                                             ' 64
    $swstack = 68                                               '44
    
    $crystal = 16000000                                         'Quarzfrequenz
    
    
    Config Com4 = 9600 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
    Open "com4:" For Binary As #4                               'USB Buchse
    
    Config Scl = Portd.0                                        'Ports fuer IIC-Bus
    Config Sda = Portd.1
    
    Config Pind.5 = Output
    Led Alias Portd.5
    
    Led = 0
    
    Declare Function Rn_cmps_himmelsrichtung() As Word
    
    Print #4 , "Test"
    
    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 "
    
    
       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
    Die LED (Portd.5) brennt und auch die Ausgabe "Test" ist auf dem Terminal noch zu lesen. Allerdings das "RN-Control CMPS03 Kompass Testprogramm " nicht mehr. Daher schätze ich mal das sich das Programm nach dem I2CInit aufhängt.

    Kann mir einer sagen warum das so ist oder was ich falsch gemacht habe???

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von Dirk
    Registriert seit
    30.04.2004
    Ort
    NRW
    Beiträge
    3.803
    Probier die CMPS03 Leseroutine 'mal so:
    Code:
       '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
    Gruß Dirk

    P.S.: Hat dein Board Pullup-Widerstände an SCL/SDA? Wenn nein, müßte man sie noch ergänzen.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    25.05.2005
    Beiträge
    16
    Also ich habe jetzt einfach mal das Programm dementsprechend geändert. Leider lässt es sich so nicht kompelieren. Der Compiler beschwert sich jedes Mal über den Datentyp Cmps_slaveid und Cmps_slaveid_read (sind beide als Byte definiert).

    Ich bin mir nicht ganz sicher ob mein Board Pullup Widerstände besitzt. Ich habe jetzt einfach mal auf Verdacht 10kOhm Widerstände eingebaut. Mein altes Programm hängt sich jetzt schonmal nicht mehr auf, aber ich kriege nur extrem hohe Werte ca. 65000 oder so.

    Sind die Pullup Widerstände eventuell zu hoch? Wie groß sollten diese im normalfall sein?

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    29.12.2005
    Ort
    Nähe Mainz
    Alter
    32
    Beiträge
    3.467
    4,7kOhm ist bei mehreren Geräten am I2C Bus das passende, mehr als 10kOhm sollten es aber nicht sein.
    Diese beiden Pull-Up Widerstände werden auf jeden Fall benötigt, da das Board keine hat.

    Sonst stimmt das Programm von dir aber, da ich dieses auch so verwende, ebenso am RN2560.

    jon
    Nice to be back after two years
    www.roboterfreak.de

Berechtigungen

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

MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad