PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit Kompass CMPS03



Phönix
04.11.2004, 19:51
Hallo!
Ich habe ein Problem mit dem Kompass CMPS03von Devantech. Ansteuern kann man mittels I2C. Ausgben sollte er den Winkel in auf einen Wert, der normiert auf 0-255 ist. Aber meiner macht das irgendwie nicht. das ist mein Quellcode:

define SDA port[9] 'DATENLEITUNG
define SCL port[10] 'TAKTLEITUNG

define I2C_DATEN byte[1]
define Z byte[2]
define KOMPASSWERT byte[3]

'RUHEZUSTAND FÜR I2C-LEITUNGEN
SDA = ON
SCL = ON

'BEGINN DES HAUPTPROGRAMMS
#KOMPASS
gosub I2C_START
I2C_DATEN = 192
gosub I2C_WRITE
I2C_DATEN = 1
gosub I2C_WRITE
gosub I2C_STOPP

gosub I2C_START
I2C_DATEN = 193
gosub I2C_WRITE
gosub I2C_READ
KOMPASSWERT = I2C_DATEN

print " "
print KOMPASSWERT

gosub NO_ACK
gosub I2C_STOPP
goto KOMPASS


'I2C-STANDARDROUTINEN
#I2C_START
SDA = OFF
SCL = OFF
return

#I2C_STOPP
SDA = OFF
SCL = ON
SDA = ON
return

#I2C_WRITE
for Z = 1 to 8
SDA = OFF
if (I2C_DATEN and 128) = 128 then SDA = ON
pulse SCL
I2C_DATEN = I2C_DATEN shl 1
next
pulse SCL
return

#I2C_READ
I2C_DATEN = 0
deact SDA
for Z = 1 to 8
I2C_DATEN = I2C_DATEN shl 1
SCL = ON
if SDA then I2C_DATEN = I2C_DATEN + 1
SCL = OFF
next
return

#ACK
SDA = 0
pulse SCL
return

#NO_ACK
SDA = 1
pulse SCL
return


end


Habe ich vielleicht irgendwo einen Fehler oder kennt jemand das Problem? Für Hilfe wäre ich dankbar!
MfG
Jonas

Joerg
04.11.2004, 20:46
Hallo Jonas,


#KOMPASS
gosub I2C_START
I2C_DATEN = 192
gosub I2C_WRITE
I2C_DATEN = 1
gosub I2C_WRITE
gosub I2C_STOPP

gosub I2C_START
I2C_DATEN = 193
gosub I2C_WRITE
gosub I2C_READ
KOMPASSWERT = I2C_DATEN


hier würde ich das I2C_STOPP herausnehmen und stattdessen I2C_START etwas ändern:


#I2C_START
SDA = ON ' Neu
SCL = ON ' Neu
SDA = OFF
SCL = OFF
return


Zumindest sind dann die Routinen OK. Natürlich kann es noch andere Fehler (Verdrahtung usw.) geben.

HTH und Viele Grüße
Jörg

Phönix
05.11.2004, 19:09
Hallo!
danke für den Tipp, aber ermacht keinen Unterschied.
Vielleicht ist etwas an der externen Beschaltung:

10müF Kondensator zwischen + und - um Spannugsspitzen abzublocken
und jeweils einen 1,8kOhm Widerstand von SCL und SDA nach +5V

Vielleicht passt hier was nicht, aber ich denke nicht.
MfG

Joerg
05.11.2004, 20:40
Hallo,

dann tippe ich wirklich auf ein Schaltungsproblem. Hast du die Massen von der CC und dem CMPS-Modul verbunden? Ist die Versorgungsspannung hinreichend stabil (5V). Die 1,8K Widerstände würde ich für diesen Zweck etwas vergrößern (auf 4,7K). Evtl. SCL und SDA vertauscht oder falsch angeschlossen?
Ein Kunde hat mal die Portnummern für Anschlussklemmen-Nummern gehalten und das ging natürlich auch nicht.

Was passiert eigentlich, kommen überhaupt keine Werte oder falsche Werte? Hast du einen Oszi um den Bus mal anzusehen?

Viele Grüße
Jörg

Phönix
06.11.2004, 09:26
Hallo!
Also Masse und +5V müssten stabil sein: Hab einen 14,4V Akku und erzeuge +5V mittels Spanungswandlers und Masse kann ich ja nur die von der Batterie nahemen.
Dann versuch ichs mal mit den 4,7k Widerständen, aber verkabelt müsste eigentlich alles passen. Kann vielleicht die Drahtlänge etwas asmachen oder andere Bauteile?
Als Ergebnis erhalte ich für de Bereich 0-255 nur Werte zwischen etwa 115 und 140, zwar sind sie linear und verändern sich, wenn ich den Roboter drehe, aber das bringt eigentlich nicht so viel.
Der Kompass kann eigentlich nicht kaputt sein, denn ich habe mit einem am PWM-Ausgang nachgeschalteten Tiefpass sehr gute Werte erhalten (hab aber an CC1 keine analogen Eingägne mehr frei, aber der Tiefpass ist sehr träge und dasist nicht allzu gut)

Grüße
Jonas

Joerg
07.11.2004, 19:03
Hi Jonas,

hast du einen Oszi um das Signalspiel auf dem Bus mal angucken zu können?

Viele Grüße
Jörg