Accelermoter c code SPI/I2C

Discussion in 'Programmer's Corner' started by john_doe01, Jan 17, 2012.

  1. john_doe01

    Thread Starter New Member

    Nov 27, 2011
    24
    0
    Hi,
    Im a third year student working on my final year project, a two wheeled balancing robot.

    Im using an LIS3LV02DL 3-Axis accelerometer to gather the acceleration of the bot

    but i have no experience in I2C or SPI programming and have no idea where to startim using a PIC18F452 and programming in C

    Any help will be appreciated, Thanks
     
  2. hgmjr

    Moderator

    Jan 28, 2005
    9,030
    214
    Are you also including a sensor that will provide you with the tilt information. If not I think you are going to need to consider including one. If all you have is acceleration information then you will need to do some intense math to get from acceleration to positional information. With a gyroscope you can get tilt information directly and instantly.

    Here is an IMU that though it is a little pricey will supply your robot with the feedback it needs to know when it is in the proper upright position. It too uses an I2C or SPI interface.

    http://www.parallax.com/portals/0/downloads/docs/prod/sens/27911-GyroscopeL3G4200D-v1.0.pdf



    hgmjr
     
    Last edited: Jan 17, 2012
  3. guitarguy12387

    Active Member

    Apr 10, 2008
    359
    12
    That device has the I2C/SPI controllers. It's really just a matter of doing the register reads/writes and filling the RX/TX buffers with data.

    The datasheet will be the most helpful.
     
  4. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,387
    1,605
    To start, Microchip states the PIC18F452 is "Not Recommended for new designs" and has been superseded by the PIC18F4520.

    Both are good choices as the Microchip C18 compiler is both excellent and free.

    You'll need a programmer and debugger, something like the PICkit II or III will do nicely. They come bundled with some decent development boards but you probably will not find your specific PIC chip there. Still, if you go with a PIC18 type most of your code will still be good. (more info)

    AFAIK an accelerometer should be enough to sense the position angle. You can get one from Sparkfun on a breakout board (easier to solder then the bare IC).
     
  5. john_doe01

    Thread Starter New Member

    Nov 27, 2011
    24
    0
    hgmjr
    Im already using a gyroscope to get the tilt information (LISY300AL) and the PIC is already correctly getting the correct value from it.
    so far i have sorted out the PWM to the two motors and a H-bridge driver that will drive the motors, chassis has also been built.
    next step is to get the accelerometer information in to the PIC, combine the two values (Gyro and Acc) via a Kalman Filter and then begin programming the PID loop

    ErnieM:
    i would prefer to use a different PIC but the specification requires the use of an 18F452 so ill have to stick to that

    would you recommend I2C over SPI?
    im competent at programming i just lack experience with either

    thanks again
     
  6. ErnieM

    AAC Fanatic!

    Apr 24, 2011
    7,387
    1,605
    I2C needs 2 I/O pins to drive up to 127 devices. SPI needs 3 I/O's plus 1 for each device it drives, and it has the speed advantage. I personally prefer I2C but don't have a rational reason beyond pin count.

    AFAIK the library support in C18 is for software versions of both interfaces, meaning the code does not use the MSSP module. To use that module you just have to set the control registers and go. Taking a peek at the library helpfile isn't a bad idea as it outlines the steps you need take to perform a read or write operation.

    While I like I2C for the simple circuitry I always seen to stumble over organizing the code to complete a transfer between start & write & restart & read & stop signals.

    I've not done low level SPI transfers (my SD cards use it but they work thru a library) but the protocol seems much simpler due to the address information being contained on the chip select CS line.

    Of the two, SPI may be the simpler protocol for you to use.
     
  7. john_doe01

    Thread Starter New Member

    Nov 27, 2011
    24
    0
    Thank you all for your help

    decided to use I2C to collect the accelerometer readings and take a bit banging approach to the coding
     
Loading...