Реклама ⓘ
Главная » Микроконтроллеры
Призовой фонд
на апрель 2024 г.
1. 100 руб.
От пользователей

Реклама ⓘ

STM32F4. Урок 27 - Подключение камеры OV9655

В данной библиотеке описывается подключение модуля цифровой камеры 1,3МПикселя (на базе контроллера OV9655) с использованием DMA через интерфейс DCMI к отладочной плате TM32F4 Discovery.

Стоимость модуля на Ebay составляет примерно 15 евро. Камера имеет разрешение 1280х1024 (SXGA) и глубину цвета 16 бит. Связь с чипом осуществляется через I2C (400кГц максимум), а данные изображения передаются по 8ми битной шине DCMI. Поддерживаются 15 и 30 кадров в секунду.

В данной статье автор реализует просмотр изображения на ЖК-дисплее, на данный момент имеются библиотеки для работы с QVGA дисплеем (320×240) и QQVGA (160×120). Передача осуществляется через DMA для разгрузки процессора и более плавного отображения на дисплее (на данный момент картинка отображается зеркально). Версия библиотеки 1.1 позволяет сохранять снимки. Если выбрано разрешение 160х120 пикселей, снимок может быть сохранен в оперативную память. Полученное изображение может быть в итоге может быть преобразовано из массива в памяти в BMP формат с помощью библиотеки “UB_OV9655_RAM2BMP”. Данные могут быть переданы через UART (для этого требуется подключение UART-библиотеки).

Примечание: некоторые DCMI-порты процессора на модуле Discovery уже заняты кодеком CS43L22 и акселерометром LIS302 (PA4, PA6, PB6, PB9, PC7). Проблем с работой камеры замечено не было, однако, две микросхемы, наверное, одновременно не могут быть использованы.

Важное замечание по отладочной плате: При использовании отладочной платы необходимо переподключить два пина. Стандартное подключение DCMI (CON6) предусматривает использование D2 и D3 на пинах процессора PE0 и PE1. Но эти порты используются для обработки прерываний LIS302 и линии всегда подтянуты к низкому уровню!! Автор подключает эти линии к выводам PC8 и PC9, которые также являются линиями D2 и D3 шины DCMI.

Еще одно замечание: 18 пиновый разъем CON6, помеченный как OV9655, не совсем совместим по пинам, поэтому необходимо припаять переходник. Модуль камеры требует подачи частоты (10-48МГц). В примере используется генератор 16МГц, по умолчанию используется 24МГц, но у автора его не было:-) Для работы с дисплеем и I2C-шиной используется две библиотеки "STM32_UB_LCD_ST7783" и "STM32_UB_I2C1". Для отображения на QQVGA используется библиотека версии 1.5.

Пример исполнения:

Используемые выводы и DMA:

PA4  -> DCMI_HSYNC  = Camera HSYNC (HREF)
PA6  -> DCMI_PCLK   = Camera PIXCLK (PCLK)
PB6  -> DCMI_D5     = Camera D5 (D7)
PB7  -> DCMI_VSYNC  = Camera VSYNC (VSYNC)
PB8  -> I2C1-SCL    = Camera I2C-SCL (SIOC)
PB9  -> I2C1-SDA    = Camera I2C-SDA (SIOD)
PC6  -> DCMI_D0     = Camera D0 (D2)
PC7  -> DCMI_D1     = Camera D1 (D3)
PC8  -> DCMI_D2     = Camera D2 (D4)
PC9  -> DCMI_D3     = Camera D3 (D5)
PE4  -> DCMI_D4     = Camera D4 (D6)
PE5  -> DCMI_D6     = Camera D6 (D8)
PE6  -> DCMI_D7     = Camera D7 (D9) 

 (*) Текст в скобках соответствует выводу на модуле OV9655

     DMA : или DMA2_STREAM1_CHANNEL1
           или DMA2_STREAM7_CHANNEL1

     Camera (GND)  = GND
     Camera (Vcc)  = 3,3V
     Camera (XCLK) = 24MHz (10...48MHz)
     Camera (PWDN) = nc
     Camera (RET)  = nc

Требуемые библиотеки:

Подключаемые модули CooCox-IDE: DCMI, DMA
Поддерживаемые библиотеки: STM32_UB_I2C1, STM32_UB_LCD_ST7783

Перечисления:

typedef enum {
  OV9655_OK =0,    // OV9655 OK
  OV9655_I2C_ERR,  // Ошибка I2C
  OV9655_MIDH_ERR, // Ошибка ID-HIByte
  OV9655_MIDL_ERR, // Ошибка ID-LoByte
  OV9655_PID_ERR,  // Ошибка Produkt-ID
  OV9655_LCD_ERR   // Ошибка Display
}OV9655_ERR_t;

Функции:

OV9655_ERR_t UB_OV9655_Init(void);  // Инициализация OV9655
void UB_OV9655_CaptureStart(void);  // Запуск режима Capture
void UB_OV9655_CaptureStop(void);   // Остановка режима Capture
void UB_OV9655_Snapshot(void);      // Сделать один снимок
void UB_OV9655_SetHelligkeit(uint8_t wert); // Регулировка яркости
void UB_OV9655_Snapshot2RAM(void);          // Сохранить снимок в памяти
void UB_OV9655_RAM2BMP(void);               // Создать файл в формате BMP

Пример использования:

//--------------------------------------------------------------
// File     : main.c
// Datum    : 29.03.2013
// Version  : 1.0
// Autor    : UB
// EMail    : mc-4u(@)t-online.de
// Web      : www.mikrocontroller-4u.de
// CPU      : STM32F4
// IDE      : CooCox CoIDE 1.7.0
// Module   : CMSIS_BOOT, M4_CMSIS_CORE
// Funktion : Demo der OV9655-Library (Camera per DCMI)
// Hinweis  : Diese zwei Files muessen auf 8MHz stehen
//              "cmsis_boot/stm32f4xx.h"
//              "cmsis_boot/system_stm32f4xx.c"
//--------------------------------------------------------------

#include "main.h"
#include "stm32_ub_ov9655.h"

int main(void)
{
  OV9655_ERR_t check;

  SystemInit(); // Инициализация настроек кварца

  // Инициализация модуля камеры (OV9655)
  check=UB_OV9655_Init();
  if(check==OV9655_OK) {
    // Если прошла успешно -> Запуск в режиме Capture
	UB_OV9655_CaptureStart();
  }
  else {
    // Если ошибка
	// Сделать экран красным
	UB_LCD_FillScreen(RGB_COL_RED);
  }

  while(1)
  {

  }
}

В приложении проект CooCox и отдельная библиотека для использования в других проектах. Автор оригинала статьи просит задавать вопросы на его сайте на немецком или английских языках.

Оригинал статьи

Прикрепленные файлы:

Теги:

Опубликована: 0 1
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

AVR-программатор USB ASP
AVR-программатор USB ASP
Ручной фен 450 Вт с регулировкой температуры Программатор Pickit3
вверх