Glaskugel: Welche Hardware? Anschluß des CMPS03?
Gruß Dirk
Habe den Kompasssensor Cmps03 wie im RN-Wissensbereich angeschlossen und verwende das dort angegebene Beispielprogramm. Der Bascom-Terminal gibt mir aber nur einen konstanten Wert von 65535 aus egal wie ich den Sensor bewege.
Wenn ich den Sensor von PortC abziehe und das Programm starte wird ebenfalls ein Wert von 65535 ausgegeben.
Wie bekomme ich heraus, ob der Sensor noch funktioniert oder wo sonst das Problem liegt?
MfG
Glaskugel: Welche Hardware? Anschluß des CMPS03?
Gruß Dirk
Hi,
sorry habe mich etwas ungenau ausgedrückt.
Ich verwende ein RN-Contrlerboard mit Mega32. Habe die PINs des Sensors: +5V, GND, SCL und SDA mit den zutreffenden PINs des Wannenstecker von PortC (I2C) verbunden.
Das Programm habe ich aus dem RN-Artikelbereich:
Danke & GrüßeCode:Declare Function Rn_cmps_himmelsrichtung() As Word Declare Function Rn_cmps_firmware() As Byte ' ---------- Das RN-Control übliche -------------- $regfile = "m32def.dat" $framesize = 42 $swstack = 32 $hwstack = 32 $crystal = 16000000 'Quarzfrequenz $baud = 9600 Config Scl = Portc.0 'Ports fuer IIC-Bus Config Sda = Portc.1 ' ------------------------------------------------ Dim Himmelsrichtung As Word Dim Grad As Single Dim V As Byte Wait 3 'Warte 3 Sekunde I2cinit Print "RN-Control CMPS03 Kompass Testprogramm " Print "CMPS03 Kompass Firmware Version:" ; Rn_cmps_firmware() V = 1 Do Himmelsrichtung = Rn_cmps_himmelsrichtung() Print "Himmelsrichtung in 0,1 Grad Schritten: " ; Himmelsrichtung Grad = Himmelsrichtung / 10 Print "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
Hendrik
Vieleicht falsch kallibriert?
Meine Uhr (mit Kompass, Höhenmesser, Temperatursensor und Tiefenmesser, ...) hat am Anfang auch falsche Werte ausgegeben.
Eine Kalibrierung mit 180 Grad drehung hat dann Erfolg gebracht.
Dadurch wird z.B. eine Magnetisierung der Uhr selbst, ... herrausgerechnet. Es könnte sein, daß dein Sensor also nicht kalibriert wurde oder durch ein Störfeld abgelenkt wird.
Hallo Hendrix85,
wenn er am Anfang die Software-Version zeigt, ist schon mal die Hardware-Seite und die I2C-Quatscherei ok.
Wenn nicht, must du erst da suchen
Kalibirieren würde ich zunächst nicht, weil die Werkskalibrierung meistens erstmal ok ist.
Gruß Dirk
Hallo Dirk,
Was meinst du mit: „wenn er am Anfang die Software-Version zeigt“ ?
Wie gesagt, wenn ich den Sensor abziehe bringt er mir den selben Wert. Ich befürchte, dass der Sensor kaputt ist.
Hat denn schon mal jemand das obige Programm genutzt?
Naja, am Anfang deines Progs gibt er doch seine Software-bzw. Firmware-Version aus. Du hast da den Befehl reingeschrieben:Was meinst du mit: „wenn er am Anfang die Software-Version zeigt“ ?
Print "CMPS03 Kompass Firmware Version:" ; Rn_cmps_firmware()
Da müßte dann die Version als Zahl auf dem Terminal erscheinen. Mach 'mal probeweise dahinter ein längeres Wait oder End.
Wenn es bis dahin funktioniert, dann redet der CMPS03 mit dir über I2C, d.h. er ist ansprechbar.
Wenn das auch schon nicht klappt, dann hast du noch gar keine Verbindung zum CMPS03 und must die Hardware/Anschlüsse überprüfen!
Gruß Dirk
Also Rn_cmps_firmware() gibt mir immer 255 aus, auch wenn der Sensor garnicht angeschlossen ist.
Hier mal die kommplette Ausgabe am Terminal:
"RN-Control CMPS03 Kompass Testprogramm
CMPS03 Kompass Firmware Version:255
Himmelsrichtung in 0,1 Grad Schritten: 65535
Himmelsrichtung genau in Grad: 6553.5
..."
und jetzt noch mal die genaue Verdrahtung vom Sensor zum Board:
Sensor: Board(PortC):
Pin1(+5V) -> Pin10(+5V)
Pin2(SCL) -> Pin1(SCL)
Pin3(SDA) -> Pin2(SDA)
Pin9(GND) -> Pin9(GND)
Grüße Hendrik
An Stecker PortC ist die Belegung ok.
1. Du bist aber sicher, dass du nicht am I2C-Stecker angeschlossen hast, da wäre die Belegung nämlich anders?
2. JTAG ausgeschaltet?
3. Frage: Gibt es Pullup-Widerstände an SCL/SDA auf dem RN-Control? Wenn nein, jeweils 4k7 an +5V.
Gruß Dirk
Hallo Dirk
1. Du hast natürlich recht. Meine Angaben zur Verdrahtung beziehen sich auf den I2C-Stecker. Am PortC sind PC0 = SCL und PC1 = SDA. Das habe ich aber soweit richtig gemacht. Habe SCL und SDA auch schon direkt am PortC angeschlossen, was aber keine Änderung gebracht hat.
2. JTAG? Da musste ich mich erstmal schlau machen und habe herausgefunden, dass das eine Schnittstelle für den Test von logischen Schaltungen ist ... Ich konnte aber nirgendwo finde, wie man diese aktiviert/deaktiviert. Läuft bestimmt über die Fuse-Bits?
3. Auf dem RN-Control sollten Pullup-Wiederstände sein. Zumindest wird im Datenblatt auf der Robotikhardware-CD angegeben, dass mit der Verwendung eines RN-Control keine zusätzlichen Pullup's benötigt werden.
Vielen Dank
Grüße Hendrik
Lesezeichen