Arduino UNO несовместимо с чтением регистра I2C из ArduCam

У меня есть Arducam, подключенный к Arduino UNO. Код, который я запускаю, выглядит так:

#include <Wire.h>
#include <ArduCAM.h>
#include <SPI.h>
#include "memorysaver.h"

const int CS = 10;

ArduCAM myCAM(OV5642, CS);

void setup() {
  uint8_t vid, pid;

  Wire.begin();
  Serial.begin(115200);
  pinMode(CS, OUTPUT);

  SPI.begin();

  //Check if the camera module type is OV5642
  myCAM.rdSensorReg16_8(OV5642_CHIPID_HIGH, &vid);
  myCAM.rdSensorReg16_8(OV5642_CHIPID_LOW, &pid);

  if ((vid != 0x56) || (pid != 0x42))
    Serial.println("Can't find OV5642 module!");
  else
    Serial.println("OV5642 detected.");

...

и функцию rdSensorReg16_8 из библиотеки:

//I2C Запись 8-битного адреса, 16-битные данные
byte ArduCAM::wrSensorReg8_16(int regID, int regDat)
{
    Wire.beginTransmission(sensor_addr >> 1);
    Wire.write(regID & 0x00FF);     

    Wire.write(regDat >> 8);            // отправляет байт данных, сначала старший бит
    Wire.write(regDat & 0x00FF);    

    if(Wire.endTransmission())
    {
        return 0; 
    }

    delay(1);
    return(1);
}

Проблема, с которой я сталкиваюсь, заключается в том, что иногда я получаю сообщение "Не удается найти модуль OV5642!" сообщение, а в других случаях все в порядке, и я получаю "Обнаружен OV5642" (у меня подключен модуль OV5642, поэтому он всегда должен возвращаться обнаружен).

Я пробовал использовать разные кабели для подключения камеры к моему UNO. Я попытался заменить USB-кабель. Я попытался использовать настенный адаптер 12 В для питания UNO. Ни один из этих вариантов не решил мою проблему навсегда — я по-прежнему получаю оба сообщения взаимозаменяемо.

Одна вещь, которая кажется, добавляет последовательности, когда я меняю USB-порт на моем компьютере, к которому подключен кабель. Каждый раз, когда я переключаю USB-порт, который я использую, кажется, что при первом запуске я получаю успешное сообщение «Обнаружен OV5642», но после сброса Arduino или повторной загрузки моего скетча я возвращаюсь к «Могу». Не найди модуль OV5642!" сообщение.

Может ли кто-нибудь помочь мне устранить неполадки, почему я получаю противоречивые показания? Спасибо.

, 👍-1

Обсуждение

Та же проблема здесь. Вроде как если перезагрузить камеру (подключить и снова включить) она снова работает. Я не знаю почему, я также попробовал это с Raspberry Pi, и у меня не было этой проблемы (однако у меня были другие проблемы!)., @vakker


1 ответ


0

Я бы начал с добавления короткой задержки перед SPI.begin() и проверки того, что потребляемая мощность не превышает 500 мА.

В описании продукта описывается последовательность включения питания. OV5642

,

Спасибо за предложение, Микаэль. Я добавил задержку и проверил питание, но все еще испытываю те же проблемы., @Bert Wagner

Хорошо. Предположим, проблема с оборудованием. Подтягивающие резисторы на проводах I2C? Может быть встроен в плату. Как вы подключаете устройство? Вы измеряли потребляемую мощность? Сколько это стоило? Напряжение упало?, @Mikael Patel

Вы пробовали разъединить контакты питания на модуле? Просто подключите конденсатор емкостью 100 мкФ или больше к контактам GND и питания на модуле., @Avamander