회로

OV7670을 Arduino에 연결하는 방법 : 6 단계 (그림 포함)

차례:

Anonim

이 지침은 러시아어로 제공되는 지침에 대한 빠른 번역입니다.

http://privateblog.info/arduino-due-i-kamera-ov7670-primer-ispolzovaniya/

Arduino Due에 OV7670 연결은 Arduino Uno보다 쉽습니다 : 낮은 작동 전압 - 3V, 높은 내부 속도, 더 많은 메모리 및 보드상의 더 많은 접점.

용품:

1 단계 : Arduino Due에 OV7670을 연결하는 스키마

전선 연결을 시작하겠습니다. 그림에서 스키마를 사용할 수 있습니다. 저항은 필요 없습니다. Arduino Due의 작동 전압은 3V입니다. OV7670에 최적입니다.

2 단계 : 클럭 신호 생성

유효한 연결 후에 우리는 8MHz 이상의 클럭 신호를 얻을 필요가 있습니다. 10.5MHz를 얻는 것은 쉽습니다.

int32_t mask_PWM_pin = digitalPinToBitMask (7);

REG_PMC_PCER1 = 1 << 4; // PWM 컨트롤러의 클럭 활성화

REG_PIOC_PDR | = 마스크 _PWM_ 핀; // 핀에 대한 주변 장치 기능 활성화 (모든 PIO 기능 비활성화)

REG_PIOC_ABSR | = mask_PWM_pin; // 주변 옵션 선택

BREG_PWM_CLK = 0; // 클럭 속도를 선택, 0 -> MCLK를 기준으로 84MHz

REG_PWM_CMR6 = 0 << 9; // PWM 채널 (pin7) -> (CPOL = 0)에 대한 클록 및 극성 선택

REG_PWM_CPRD6 = 8; // PWM주기 초기화 -> T = 값 / 84MHz (값 : 최대 16 비트), 값 = 8 -> 10.5MHz

REG_PWM_CDTY6 = 4; // 듀티 사이클 초기화, REG_PWM_CPRD6 / 값 = 듀티 사이클, 8/4 = 50 %

REG_PWM_ENA = 1 << 6; // PWM 채널에서 PWM 활성화 (핀 7 = PWML6)

3 단계 : OV7670의 레지스터 구성

클럭 신호를 생성 한 후 적절한 값을 OV7670의 레지스터에 써야합니다. TWI 인터페이스가 7 비트 주소를 지원하기 때문에 0x21을 주소로 사용해야합니다. 그것은 레지스터를 쓰는 것을 허용하지만, 문제는 읽을 것입니다.

void write (uint8_t regID, byte regDat) {

Wire.beginTransmission (주소);

Wire.write (regID & 0x00FF);

Wire.write (regDat & 0x00FF);

if (Wire.endTransmission (true)) {

Serial.print ( "error write reg");

Serial.println (regID);

}

지연 (20);

}

나중에 소스 코드에서 찾을 레지스터 값.

4 단계 : 이미지 전송

클럭 신호와 쓰기 레지스터를 생성 한 후에 이미지를 전송해야합니다. Arduino Due는 이러한 목적으로 UART 인터페이스를 제공합니다.

Serial.begin (460800);

전송 속도를 높이려면 사용자 지정 기능을 사용하는 것이 좋습니다.

정적 인라인 int uart_putchar (const uint8_t c) {

while (! (UART-> UART_SR & UART_SR_TXRDY));

UART-> UART_THR = c;

0을 반환;

}

우리는 Arduino Due 내부의 버퍼를 사용하여 일부 유물을 막을 수 있습니다. 이 경우 우리는 이미지를 버퍼에 쓴다.

static void captureImg (uint16_t wg, uint16_t hg) {

uint16_t y, x;

Serial.println ( "* RDY *");

while (! (REG_PIOB_PDSR & (1 << 21))); // 높은 동안 기다린다.

((REG_PIOB_PDSR & (1 << 21))); // 낮은 대기

y = hg;

while (y -) {

x = wg;

while (x -) {

while ((REG_PIOD_PDSR & (1 << 10))); // 낮은 값을 기다린다.

myImage y x = (REG_PIOC_PDSR & 0xFF000) >> 12;

while (! (REG_PIOD_PDSR & (1 << 10))); // 높은 값을 기다린다.

while ((REG_PIOD_PDSR & (1 << 10))); // 낮은 값을 기다린다.

while (! (REG_PIOD_PDSR & (1 << 10))); // 높은 값을 기다린다.

}

}

for (y = 0; y <hg; y ++) {

for (x = 0; x <wg; x ++) {

uart_putchar (myImage y x);

}

}

}

5 단계 : 수신

이제 이미지를 받아야합니다. 이를 위해 Arduino Uno와 같은 자바 응용 프로그램이 사용됩니다.

프레임 그래버

Framegrabber를 실행하는 방법

OV7670과 Arduino Uno를 연결하는 방법

6 단계 : 결과

그림에서 볼 수있는 결과입니다.

Arduino Due에 문제가 있습니다. 속도를 460800 이상으로 높일 수는 없지만 버퍼링 한 이후로 사진의 품질에 영향을주지 않아야합니다.