I2C Comm with Digital Compass HMC6352


Results 1 to 11 of 11

Threaded View

  1. #1
    Join Date
    Mar 2008
    Posts
    5

    Default I2C Comm with Digital Compass HMC6352

    This is my first post to the group.

    I'm designing a heading hold autopilot for a free flight glider. I'm basing it on a PIC16F88, and using an HMC6352 digital compass (http://www.sparkfun.com/datasheets/C...ts/HMC6352.pdf).

    I've never played with I2C before, and figured that I would try something simple first, like reading an EEPROM register in the compass module. My problem is that no matter what I do, I seem to always read back a value that is exactly 1/2 of what it should be.

    So then I tried writting a value to a RAM address and reading it back. Again, same issue, the value read back is 1/2 the value written.

    I'm using PIC BASIC PRO, on a LABX18 development board. Here's the code I'm using for the EEPROM read, which is modified from some of the example programs:
    Code:
    Define  LCD_DREG        PORTA
    Define  LCD_DBIT        0
    Define  LCD_RSREG       PORTB
    Define  LCD_RSBIT       6
    Define  LCD_EREG        PORTB
    Define  LCD_EBIT        3
    
    ' Define I2C Interface
    
    SDA    Var    PORTB.1                    ' Data pin
    SCL    Var    PORTB.4                    ' Clock pin
    
    cmd  Var Byte
    addr Var Byte
    cont Var Byte
    
        ANSEL = 0                      ' PORTA is digital
        CMCON = 7                      ' PORTA is digital
    
        Pause 100                    ' Wait for LCD to start up
            
    loop1:
        pauseus 1000
        cmd = $72                    ' Read from compass EEPROM
        addr= $00                    ' EPROM address $00
        I2CWRITE SDA, SCL, $42, [cmd, addr], nowrite
    
        pauseus 1000
         I2CREAD SDA, SCL, $42, [cont], noread
        Lcdout $fe, 1, "Data: ", cont
        
        goto loop1
        
        End
    
    nowrite:
        Lcdout $fe, 1, "Write Err"
        goto nowrite
    
    noread:
        Lcdout $fe, 1, "Read Err"
        goto noread
    If anyone can point me to the error of my ways, it would be greatly appreciated.

    John Ihlein
    Albuqueruqe, NM
    Last edited by ScaleRobotics; - 26th May 2010 at 17:07. Reason: code brackets added

Similar Threads

  1. I2C Master/Slave 16F88/16F767 working code
    By DanPBP in forum Code Examples
    Replies: 2
    Last Post: - 23rd October 2012, 22:31
  2. HARDWARE I2C SAMPLE CODE question
    By Michael Wakileh in forum Code Examples
    Replies: 2
    Last Post: - 16th June 2009, 21:07
  3. I2C Master Slave issues.
    By cpayne in forum mel PIC BASIC Pro
    Replies: 9
    Last Post: - 29th March 2008, 19:33
  4. Big characters on HD44780 4x20
    By erpalma in forum mel PIC BASIC Pro
    Replies: 23
    Last Post: - 7th January 2007, 02:21
  5. Digital Compass Project
    By BJSmith in forum Serial
    Replies: 2
    Last Post: - 7th April 2006, 19:32

Members who have read this thread : 1

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts