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 Joerg - 16.12.2010 13:32)
Als Antwort auf Re: Beschleunigungssensor über I2C auslesen von Tim - 16.12.2010 12:41
Ich nutze:
C-Control Pro Mega128
> > > 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

Hallo Tim,

den Status Code 0xF8 gibt es doch gar nicht oder?
Kommt dieser Wert auch nach I2C_Start();  ???

GrueÃ?e Joerg


    Antwort schreiben


Antworten:

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)