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!" сообщение.
Может ли кто-нибудь помочь мне устранить неполадки, почему я получаю противоречивые показания? Спасибо.
@Bert Wagner, 👍-1
Обсуждение1 ответ
Я бы начал с добавления короткой задержки перед SPI.begin() и проверки того, что потребляемая мощность не превышает 500 мА.
В описании продукта описывается последовательность включения питания. OV5642
Спасибо за предложение, Микаэль. Я добавил задержку и проверил питание, но все еще испытываю те же проблемы., @Bert Wagner
Хорошо. Предположим, проблема с оборудованием. Подтягивающие резисторы на проводах I2C? Может быть встроен в плату. Как вы подключаете устройство? Вы измеряли потребляемую мощность? Сколько это стоило? Напряжение упало?, @Mikael Patel
Вы пробовали разъединить контакты питания на модуле? Просто подключите конденсатор емкостью 100 мкФ или больше к контактам GND и питания на модуле., @Avamander
- OVF в последовательном мониторе вместо данных
- Последовательная связь между несколькими устройствами (или ардуино)
- Попытка использовать акселерометр I2C и SPI OLED
- Как использовать SPI на Arduino?
- Отправка и получение различных типов данных через I2C в Arduino
- Как работают функции вне цикла void?
- Как отображать переменные на 0,96-дюймовом OLED-дисплее с библиотекой u8glib?
- ЖК-дисплей I2C отображает странные символы
Та же проблема здесь. Вроде как если перезагрузить камеру (подключить и снова включить) она снова работает. Я не знаю почему, я также попробовал это с Raspberry Pi, и у меня не было этой проблемы (однако у меня были другие проблемы!)., @vakker