PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kompasssensor cmps03 funktioniert nicht!?



Hendrix85
04.01.2008, 19:11
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

Dirk
04.01.2008, 19:39
Glaskugel: Welche Hardware? Anschluß des CMPS03?

Gruß Dirk

Hendrix85
04.01.2008, 22:01
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:


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


Danke & Grüße
Hendrik

the_playstat
04.01.2008, 22:49
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.

Dirk
05.01.2008, 07:27
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

Hendrix85
05.01.2008, 10:19
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?

Dirk
05.01.2008, 10:51
Was meinst du mit: „wenn er am Anfang die Software-Version zeigt“ ?
Naja, am Anfang deines Progs gibt er doch seine Software-bzw. Firmware-Version aus. Du hast da den Befehl reingeschrieben:
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

Hendrix85
08.01.2008, 10:10
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

Dirk
08.01.2008, 18:18
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

Hendrix85
08.01.2008, 20:12
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

Dirk
08.01.2008, 20:34
Hallo Hendrix85,


Meine Angaben zur Verdrahtung beziehen sich auf den I2C-Stecker.
Dann wären sie falsch gewesen. Richtig waren deine Angaben nur für den PortC Stecker (hast du ja auch oben geschrieben!).


JTAG ... Läuft bestimmt über die Fuse-Bits?
Ja, genau. Siehe S. 22 Anleitung Fusebit J!

Gruß Dirk

purebasic
08.01.2008, 21:48
versuch mal über pwm ob er funktioniert, ist anschluss 3 gleich hinter dem i2c-anschluss. meiner gibt damit werte aus von 0-1180, die müssen dann auf 360 grad aufgeteilt werden :


$regfile = "m32def.dat"
$framesize = 32
$swstack = 32
$hwstack = 64
$crystal = 8000000
$baud = 19200

Config Timer1 = Timer , Prescale = 256

Dim W As Word
Dim E As Word

Enable Interrupts

Do

Waitms 200
Bitwait Pinc.2 , Reset
Bitwait Pinc.2 , Set
W = Timer1
Bitwait Pinc.2 , Reset
E = Timer1 - W
Print E

Loop

End

Hendrix85
09.01.2008, 09:44
Laut RnControl14-Anleitung sieht die Belegung folgendermaßen aus:
„...
Pin 1 PC0 / SCL wird vom I2C-Bus genutzt
Pin 2 PC1 / SDA wird vom I2C-Bus genutzt
...“
also sollte meine Verdrahtung doch eigentlich stimmen.


Ja , dann wird’s wohl an den Fuse-Bits liegen.
Die habe ich nämlich noch nicht so eingestellt wie es im der RnControl14-Anleitung beschrieben ist. Ich dachte das braucht man nur, wenn man ein ISP-Progammer verwendet. Aber da lag ich wohl falsch. Wie ich jetzt, nach genauerem lesen, feststellen musste, geht dies nur mit ISP-Progammierdongel. Ich habe bisher immer nur per RS232 programmiert.

Gibt es noch eine andere Möglichkeit, wie man die Fuse-Bits ohne ISP-Programierdongel einstellen kann?


Grüße Hendrik

purebasic
09.01.2008, 16:49
also, ich verstehe euch nicht.

seid ihr nicht flexibel oder habt ihr hasch geraucht.

in bascom kannste auch die pins für i2c-sofwaremässig auswählen . einfach andere belegungen angeben die offen sind und diese dem bascom-programm mitteilen.


so einfach ist das.

Dirk
09.01.2008, 19:40
Pin 1 PC0 / SCL wird vom I2C-Bus genutzt
Pin 2 PC1 / SDA wird vom I2C-Bus genutzt
... also sollte meine Verdrahtung doch eigentlich stimmen.
Ja, am PortC-Stecker stimmt sie, aber nicht am I2C-Stecker!
Da (also am I2C-Stecker) sind es Pin 1 und [highlight=red:b8e8ca7269]Pin 3[/highlight:b8e8ca7269].

Deshalb meine damalige Frage, an welchem Stecker du den cmps03 angeschlossen hast.

Gruß Dirk

Hendrix85
09.01.2008, 20:28
Hallo

Danke erstmal. Hab's jetzt auch gerafft.

Weiß vielleicht trotzdem noch jemand, ob man auch ohne ISP-Dongle die Fuse-Bits ändern kann?

Benötigt man eigentlich für das RN-Control den ISP-Dongle von Robotikhardware, oder geht da jeder beliebige (wie z.B. http://shop.embedit.de/product__120.php )?

Grüße Hendrik

Hendrix85
20.02.2008, 20:12
Hallo,

ich habe mir jetzt einen ISP-Dongle besorgt und meinen Fuse-Bits überprüft. JTAG ist disabled! und trotzdem funktioniert der Kompasssensor nicht!!!!

Gibt es sonst noch einen möglichkeit herauszubekommen, ob der I2C-Bus funktioniert??

Gruß Hendrik