[TivaC] I2C với cam OV7670

Discussion in 'SV hỏi - PIF trả lời' started by Nguyễn Hữu Sang, Jun 28, 2015.

  1. Nguyễn Hữu Sang

    Nguyễn Hữu Sang Thành Viên PIF

    Có ai xài cái OV7670 (có DRAM) này rồi thì cho em hỏi em viết cái code thế này có sai j ko:
    Code:
    void OV7670Set(uint8_t addr, uint8_t val){
        I2CMasterSlaveAddrSet(I2C1_BASE, OV7670_ADDR, false);
        I2CMasterDataPut(I2C1_BASE, addr);
        I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_START);
        while(I2CMasterBusy(I2C1_BASE));
        I2CMasterDataPut(I2C1_BASE, val);
        I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);
        while(I2CMasterBusy(I2C1_BASE));
    }
    uint32_t OV7670Get(uint32_t addr){
        I2CMasterSlaveAddrSet(I2C1_BASE, OV7670_ADDR, false);
        I2CMasterDataPut(I2C1_BASE, addr);
        I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_SEND);
        while(I2CMasterBusy(I2C1_BASE));
     
        I2CMasterSlaveAddrSet(I2C1_BASE, OV7670_ADDR+1, true);
        I2CMasterControl(I2C1_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
        while(I2CMasterBusy(I2C1_BASE));
        return(I2CMasterDataGet(I2C1_BASE));
    }
    datasheet:"The device slave address are 42 for write and 43 for read."
    Mà đọc từ thanh ghi PID (product ID, default = 0x76) để kiểm tra thì cứ ra 0xFF, hứng thì 0xFE, còn bỏ qua, cấu hình cho nó lun thì 1 hồi ra như zầy:
    Untitled.png
    Em cũng bó tay rồi, ai biết chỉ dùm em :2cool_burn_joss_stick:
     
  2. honghiep

    honghiep Cố Vấn CLB Staff Member

    Library I2C của Tiva thì I2CMasterSlaveAddrSet đưa vào địa chỉ 7 bit của I2C - tức là không có bit R/W. Với OV7670 thì là 0x21. Chuyện read/write lớp dưới sẽ add bit này vào khi set argument bReceive của hàm I2CMasterSlaveAddrSet.
     
  3. Nguyễn Hữu Sang

    Nguyễn Hữu Sang Thành Viên PIF

    Hèn gì thấy 42 43 cũng kì, em làm được rồi, thank anh :D
    Untitled.png
     
    LUIZ likes this.
  4. hmtmarconi

    hmtmarconi Thành Viên PIF

    Anh Hiệp cho em hỏi là em config như vầy, khi em đọc về nó cũng toàn trả về 0xFF thôi
    Code:
    void BasicConfig()
    {
        SysClock = SysCtlClockFreqSet((SYSCTL_OSC_INT | SYSCTL_USE_PLL | SYSCTL_CFG_VCO_480), 120000000);
    }
    void UARTConfig()
    {
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);
     
        GPIOPinConfigure(GPIO_PA0_U0RX);
        GPIOPinConfigure(GPIO_PA1_U0TX);
     
        SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);
     
        UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);
     
        GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);
     
        UARTStdioConfig(0, 115200, 16000000);
    }
     
    void I2CConfig()
    {
        SysCtlPeripheralEnable(SYSCTL_PERIPH_I2C7);
        SysCtlPeripheralReset(SYSCTL_PERIPH_I2C7);
     
        SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
     
        GPIOPinTypeI2C(GPIO_PORTD_BASE, GPIO_PIN_1);
        GPIOPinTypeI2CSCL(GPIO_PORTD_BASE, GPIO_PIN_0);
     
        GPIOPinConfigure(GPIO_PD0_I2C7SCL);
            GPIOPinConfigure(GPIO_PD1_I2C7SDA);
     
        I2CMasterInitExpClk(I2C7_BASE, SysClock, false);
    }
     
    void SCCB_set(uint8_t reg, uint8_t data)
    {
      I2CMasterSlaveAddrSet(I2C7_BASE, OV7670_ADDR, false);
      I2CMasterDataPut(I2C7_BASE, reg);
      I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_SEND_START);
      while(I2CMasterBusy(I2C7_BASE));
     
      I2CMasterDataPut(I2C7_BASE, data);
      I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_BURST_SEND_FINISH);
      while(I2CMasterBusy(I2C7_BASE));
    }
     
    uint32_t SCCB_get(uint8_t reg)
    {
      I2CMasterSlaveAddrSet(I2C7_BASE, OV7670_ADDR, false);
      I2CMasterDataPut(I2C7_BASE, reg);
      I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_SINGLE_SEND);
      while(I2CMasterBusy(I2C7_BASE));
     
      I2CMasterSlaveAddrSet(I2C7_BASE, OV7670_ADDR, true);
      I2CMasterControl(I2C7_BASE, I2C_MASTER_CMD_SINGLE_RECEIVE);
      while(I2CMasterBusy(I2C7_BASE));
     
      return(I2CMasterDataGet(I2C7_BASE));
    }
    
     
  5. LUIZ

    LUIZ Trứng gà

    BẠN ƠI CÓ THỂ CHO MÌNH XIN CODE THAM KHẢO ĐIỀU KHIỂN MODULE CAMERA OV7670 NÀY ĐƯỢC KHÔNG BẠN MÌNH LÀM MÃI MÀ KO RA HIC
     
  6. 2death

    2death Cố Vấn CLB Staff Member

    Xin code thì chắc không ai cho đâu, người ta cũng lười lắm.
    Em làm giống như bạn ở trên:
    + Đọc kỹ datasheet.
    + Viết code.
    + Suy nghĩ.
    + Không ra nữa thì post code lên hỏi.

    Trên kia có code mẫu rồi mà?
     
Loading...

Share This Page