Das Open-Control-Projekt - Die Alternative zur C-Control-I


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Re: Problem mit Kompass CMPS03 Kategorie: C-Control I V1.1 (von Carsten - 5.11.2004 10:23)
 Als Antwort auf Problem mit Kompass CMPS03 von Jonas - 4.11.2004 19:48
Hallo,

das Protokoll hast Du sicher schon oft überprüft (ich hab es nicht getan).. Also um herauszufinden, ob der Kompaß oder Deine Ansteuerung das Problem ist, könntest Du Deine Routinen an einem anderen I2C-Gerät testen, das verläßlich reagiert und gut dokumentiert ist, z.B. ein serieller EPROM (kostet nicht viel), wie es ihn zur Version 2.0 schon als Modul, sonst auch einzeln gibt, inklusive Demoprogramme..

Ich bin auch nicht ganz sicher, ob bei #I2C_READ der Vergleich  "if SDA then" das gewünschte Ergebnis liefert, oder ob es "if SDA = ON (oder OFF) then.." heißen sollte.. (klarer lesbar ist das auf jeden Fall, aber das ist Geschmachssache, solange es funktioniert.. :-)

Ich drück die Daumen!
Gruß Carsten

Das

> 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]                'BYTE, MIT DEM DATEN GESENDET UND EMPFANGEN WERDEN
> define Z byte[2]                        'ZÄHLERBYTE FÜR I2C-STANDARDROUTINEN
> define KOMPASSWERT byte[3]              'BYTE, IN DEM DER KOMPASSWERT GESPEICHERT WIRD
>
> '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  
>  
>
>

 Antwort schreiben

Bisherige Antworten: