Главная » Микроконтроллеры
Призовой фонд
на март 2021 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Сайт Паяльник
3. 350 руб.
От пользователей


Двусторонний теплопроводящий скотч. Ширина 8, 10, 12 или 20мм. Длина намотки 5, 10 или 25м

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
Конструктор - темброблок на LM1036 Мини гравер 125 Ватт
вверх