Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - Zum C-Control-I-Forum - Zum C-Control-II-Forum

Re: Beschleunigungssensor über I2C auslesen Kategorie: I²C-Bus (von Tim - 16.12.2010 12:41)
Als Antwort auf Re: Beschleunigungssensor über I2C auslesen von Joerg - 16.12.2010 7:17
Ich nutze:
C-Control Pro Mega32, CC-Pro 32 Application Board
> > Hallo,
> >
> > ich beschäftige mich seit kurzer Zeit mit dem Programmieren.
> > Nun versuche ich schon seit Tagen einen Beschleunigungssenor (BMA150) über I2C auszulesen.
> > Mit Hilfe dieses und anderen Foren konnte ich mir diesen Code erstellen:
> >
> > void main(void)
> > {
> >
> >
> >     word adresse;
> >     adresse=0x02;
> >
> >     int             x_long,y_long,z_long;
> >     unsigned int    x_short,y_short,z_short;
> >     float           x,y,z;
> >
> >     I2C_Init(I2C_100kHz);
> >
> >     I2C_Start();
> >     I2C_Write(0x70);
> >     I2C_Write(adresse);
> >     I2C_Stop();
> >
> >     I2C_Start();
> >     I2C_Write(0x71);
> >
> >     x_short=I2C_Read_ACK();
> >     x_long=I2C_Read_ACK();
> >
> >     x_long=(((x_long)*4)+(x_short/64));
> >
> >         if (x_long > 512)
> >         {
> >             x_long= (x_long - 512);
> >             x_long= (512 - x_long);
> >             x_long= (x_long*(-1));
> >
> >             x= (x_long * 0.00390625);
> >         }
> >          else
> >         {
> >             x= (x_long * 0.00390625);
> >         }
> >
> >     y_short=I2C_Read_ACK();
> >     y_long=I2C_Read_ACK();
> >
> >     y_long=(((y_long)*4)+(y_short/64));
> >
> >          if (y_long > 512)
> >          {
> >               y_long= (y_long - 512);
> >               y_long= (512 - y_long);
> >               y_long= (y_long*(-1));
> >
> >               y= (y_long * 0.00390625);
> >          }
> >          else
> >          {
> >               y= (y_long * 0.00390625);
> >          }
> >
> >
> >     z_short=I2C_Read_ACK();
> >     z_long=I2C_Read_NACK();
> >
> >     z_long=(((z_long)*4)+(z_short/64));
> >
> >          if (z_long > 512)
> >         {
> >               z_long= (z_long - 512);
> >               z_long= (512 - z_long);
> >               z_long= (z_long*(-1));
> >
> >               z= (z_long *0.00390625);
> >         }
> >         else
> >         {
> >               z= (z_long *0.00390625);
> >         }
> >
> >     I2C_Stop();
> >
> >
> >     Msg_WriteFloat(x);
> >     Msg_WriteChar(13);
> >
> >     Msg_WriteFloat(y);
> >     Msg_WriteChar(13);
> >
> >     Msg_WriteFloat(z);
> >     Msg_WriteChar(13);
> > }
> >
> > Leider gibt mir das C-Control Programm für x, y und z nur 0.00000 heraus. Also kann irgendetwas nicht stimmen.
> >
> > Hat mir jemand einen Tipp?
> >
> > Danke schonmal für die Mühe.
> >
> > GruÃ? Tim
>
> Hallo Tim,
>
> hat der I2C Pull Ab's???
> ich würde mal nach jedem i2C Befehl den I2C_Status ausgeben und mit der Tabelle vergleichen.
>
> GrueÃ?e Joerg

Hallo Joerg,

danke für die Schnelle Antwort.
Ich verwende die Pull-Up Widerstände des Projectboards Pro32. Diese wurden mit Hilfe von 2 Jumpern gesetzt.
Die I2C-Status Ausgabe nach jedem I2C-Befehl zeigt immer nur "00F8" an. In diesem Forum bin ich auch einen *Fred* gestoÃ?en,
in dem jemand die gleiche Ausgaben bekommt. Er hatte wohl die Pull-Ups vergessen.

Da ich die Pull-Ups des Projectboards gejumpert habe, gehe ich davon aus, dass es nicht daran liegen kann.
Oder muss man die Pull-Up Widerstände des Projectboards eventuell "aktivieren"?

GruÃ? Tim


    Antwort schreiben


Antworten:

Re: Beschleunigungssensor über I2C auslesen (von Joerg - 16.12.2010 13:32)
    Re: Beschleunigungssensor über I2C auslesen (von Tim - 16.12.2010 19:32)
        Re: Beschleunigungssensor über I2C auslesen (von Joerg - 17.12.2010 7:32)
            Re: Beschleunigungssensor über I2C auslesen (von Tim - 18.12.2010 14:22)
                Re: Beschleunigungssensor über I2C auslesen (von Jörg - 18.12.2010 18:07)
        Re: Beschleunigungssensor über I2C auslesen (von Jörg - 16.12.2010 20:47)