Shop OBEX P1 Docs P2 Docs Learn Events
IIC problem — Parallax Forums

IIC problem

tholbertontholberton Posts: 41
edited 2012-06-22 23:38 in Propeller 1
I've been trying to get this camera working, but I'm having problems addressing it with iic. The device address is 01111000 (if beginning a write command). I don't think I'm receiving an acknowledgement bit. I'm trying to set it up so that it will turn on an LED when the acknowledgement bit is received. So far I've had very little luck. The device is the TCM8230MD. I've also checked the output in GEAR, everything looks fine from the logic probe.
DAT
org 0
camera_control


:counter_control 
              or        dira,extclk
              or        dira,finpin
              movs      ctra,#$10
              movi      ctra,#%0_00100_000
              movi      frqa,#%00100000_0
:start_cnd
              mov       time,cnt
              add       time,wait               'wait for the device to receive enough extclk signals
              waitcnt   time,delay
              or        dira,sdapin
              waitcnt   time,delay
              or        dira,clkpin
              waitcnt   time,delay
              mov       sda_space,data
              mov       eight,#$0008


:iic_loop
              shr       sda_space,#1 wc                                 'OUTPUT=LOW;INPUT=HIGH
              muxnc     dira,sdapin
              waitcnt   time,delay                           
              xor       dira,clkpin
              waitcnt   time,delay
              xor       dira,clkpin
              waitcnt   time,delay 
              djnz      eight,#:iic_loop wz


:receive
              muxnz     dira,sdapin
              xor       dira,clkpin
              waitpne   sdapin,sdapin
              xor       dira,clkpin


:doneloop
              or        outa,finpin
              jmp       #:doneloop


three                   long $0000_0003    'number of bytes to send
extclk                  long $0001_0000    'clock for camera
clkpin                  long $0004_0000    
sdapin                  long $0002_0000    '
finpin                  long $0000_8000    'finished


{addresses, data, and vars }


slave_address_read      long $0000_0079    'for TCM8230MD
slave_address_write     long $0000_0078    'for TCM8230MD
data                    long $0044_031E    'initialize subQCIF - 16 bits - 0000_0011 <- address 1010_0010 <- command
delay                   long $0000_00FF    'sets the speed of the iic protocal at around 100_000hz. The maximum speed is 400_000
wait                    long $0000_FFFF
eight                   res 1
sda_space               res 1
time                    res 1
fit

Comments

  • davejamesdavejames Posts: 4,047
    edited 2012-06-22 11:38
    ...some questions:

    1 - is the SCL clock rate running at the appropriate speed for the camera device?
    2 - are the SCL and SDA lines pulled high to +5V through resistors (10k)?
    3 - is the I2C Start condition being created correctly?
    4 - do you have a scope to view the SDA line?

    I'm not familiar with the Prop, but a bit familiar with I2C.
  • tholbertontholberton Posts: 41
    edited 2012-06-22 12:27
    the max frequency is 400 khz, this code runs it at 100khz.
    the sda and sck lines are pulled high with 2.8V because that's the requirement of the camera. yes, I'm using 10K resistors
    yes
    no, but I wish I did and I'm considering getting a oscilloscope or logic probe for that general use

    I'm starting to think that running 2.8V straight into the RES (active low) might be messing it up, cause I'm not sure if there's any input impedance or not
  • Phil Pilgrim (PhiPi)Phil Pilgrim (PhiPi) Posts: 23,514
    edited 2012-06-22 12:43
    The I2C protocol requires that data be clocked out MSB first. It looks like you're clocking it out LSB first, viz:
    shr   sda_space,#1 wc
           muxnc dira,sdapin
    

    -Phil
  • tholbertontholberton Posts: 41
    edited 2012-06-22 13:04
    thanks Phil, I changed the data from $78 to 1E just to test it out. It still doesn't work but at least that problem is out of the way

    edit - it's been using 1E the whole time. i forgot because I wrote this code a few weeks ago.
  • davejamesdavejames Posts: 4,047
    edited 2012-06-22 15:40
    ...another question:

    Can you control the clocking to the camera such that you would be able to stop it at the 9th cycle? This would allow you to check/measure the level of the SDA line, which should be a "low" (ACK/).
  • tholbertontholberton Posts: 41
    edited 2012-06-22 23:38
    yea that's pretty much what the code does. the clk stays high until the acknowledgment bit is sent.
    edit - thanks though for the suggestion. the datasheet has a power on sequence that I've only loosely followed,
    I'm going to change the power on sequence and see if that helps.
Sign In or Register to comment.