720p resolution

This commit is contained in:
Adam Prochazka
2023-04-13 16:35:55 +02:00
parent 58b09c93ab
commit 7ace5ef5a2
14 changed files with 33869 additions and 3372 deletions

View File

@ -120,75 +120,43 @@ void Cam_I2C_write_bulk(I2C_HandleTypeDef *hi2c, const struct sensor_reg regList
void Cam_Init(I2C_HandleTypeDef *hi2c, SPI_HandleTypeDef *hspi)
{
Cam_SPI_write(hspi, 0x07, 0x80);
Cam_SPI_write(hspi, 0x07, 0x80);
HAL_Delay(100);
Cam_SPI_write(hspi, 0x07, 0x00);
Cam_SPI_write(hspi, 0x07, 0x00);
HAL_Delay(100);
//Cam_SPI_write(hspi, 0x00, 0x55);
HAL_Delay(5);
Cam_I2C_write(hi2c, (uint16_t)0x3008, 0x80);
HAL_Delay(5);
Cam_I2C_write_bulk(hi2c, OV5642_QVGA_Preview);
HAL_Delay(200);
Cam_I2C_write_bulk(hi2c, OV5642_JPEG_Capture_QSXGA);
Cam_I2C_write_bulk(hi2c, ov5642_320x240);
HAL_Delay(100);
//Cam_I2C_write_bulk(hi2c, OV5642_720P_Video_setting);
Cam_I2C_write(hi2c, (uint16_t)0x3818, 0xa8); // TIMING CONTROL - ENABLE COMPRESSION, THUMBNAIL MODE DISABLE, VERTICAL FLIP, MIRROR
Cam_I2C_write(hi2c, (uint16_t)0x3621, 0x10); // REGISTER FOR CORRECT MIRROR FUNCTION
Cam_I2C_write(hi2c, (uint16_t)0x3801, 0xb0); // TIMING HORIZONTAL START - ALSO FOR MIRROR
Cam_I2C_write(hi2c, (uint16_t)0x4407, 0x04); // COMPRESSION CONTROL
//Cam_I2C_write(hi2c, (uint16_t)0x5000, 0xFF);
HAL_Delay(5);
// Setup camera, H-sync: High, V-sync:high, Sensor_delay: no Delay, FIFO_mode:FIFO enabled, power_mode:Low_power
Cam_SPI_write(hspi, 0x03, 0x02);
HAL_Delay(5);
//Cam_I2C_write_bulk(hi2c, ov5642_1024x768);
Cam_I2C_write_bulk(hi2c, ov5642_320x240);
HAL_Delay(1000);
Cam_SPI_write(hspi, 0x04, 0x01);
HAL_Delay(5);
Cam_SPI_write(hspi, 0x01, 0x00); // Capture Control Register - Set to capture n+1 frames
HAL_Delay(5);
/*
Cam_I2C_write(hi2c, (uint16_t)0x3008, 0x80);
Cam_I2C_write_bulk(hi2c, OV5642_QVGA_Preview);
HAL_Delay(100);
HAL_Delay(200);
Cam_I2C_write_bulk(hi2c, OV5642_JPEG_Capture_QSXGA);
Cam_I2C_write_bulk(hi2c, ov5642_1024x768);
//Cam_I2C_write_bulk(hi2c, ov5642_320x240);
HAL_Delay(100);
//Cam_I2C_write_bulk(hi2c, OV5642_720P_Video_setting);
Cam_I2C_write(hi2c, (uint16_t)0x3818, 0xa8); // TIMING CONTROL - ENABLE COMPRESSION, THUMBNAIL MODE DISABLE, VERTICAL FLIP, MIRROR
Cam_I2C_write(hi2c, (uint16_t)0x3621, 0x10); // REGISTER FOR CORRECT MIRROR FUNCTION
Cam_I2C_write(hi2c, (uint16_t)0x3801, 0xb0); // TIMING HORIZONTAL START - ALSO FOR MIRROR
//Cam_I2C_write(hi2c, (uint16_t)0x4407, 0x04); // COMPRESSION CONTROL
Cam_I2C_write(hi2c, (uint16_t)0x4407, 0x04); // COMPRESSION CONTROL
//Cam_I2C_write(hi2c, (uint16_t)0x5888, 0x01);
Cam_I2C_write(hi2c, (uint16_t)0x5000, 0xFF);
Cam_I2C_write(hi2c, (uint16_t)0x4407, 0x09); // COMPRESSION CONTROL
HAL_Delay(5);
// Setup camera, H-sync: High, V-sync:high, Sensor_delay: no Delay, FIFO_mode:FIFO enabled, power_mode:Low_power
Cam_SPI_write(hspi, 0x03, 0x02);
Cam_I2C_write_bulk(hi2c, ov5642_320x240);
//Cam_I2C_write_bulk(hi2c, ov5642_1024x768);
Cam_SPI_write(hspi, 0x04, 0x01);
Cam_SPI_write(hspi, 0x01, 0x00); // Capture Control Register - Set to capture n+1 frames
HAL_Delay(5);
*/
Cam_I2C_write_bulk(hi2c, ov5642_1024x768);
//Cam_I2C_write_bulk(hi2c, ov5642_320x240);
HAL_Delay(1000);
Cam_SPI_write(hspi, 0x04, 0x01);
HAL_Delay(5);
Cam_SPI_write(hspi, 0x01, 0x00); // Capture Control Register - Set to capture n+1 frames
HAL_Delay(5);
}
void Cam_Refresh(I2C_HandleTypeDef *hi2c, SPI_HandleTypeDef *hspi){
@ -294,7 +262,7 @@ int Cam_FIFO_length(SPI_HandleTypeDef *hspi)
uint32_t len1, len2, len3, len = 0;
len1 = Cam_SPI_read(hspi, 0x42);
len2 = Cam_SPI_read(hspi, 0x43);
len3 = Cam_SPI_read(hspi, 0x44) & 0x7f;
len3 = Cam_SPI_read(hspi, 0x44)& 0x7f;
len = ((len3 << 16) | (len2 << 8) | len1) & 0x07fffff;
return len;
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -86,7 +86,7 @@ void Error_Handler(void);
#define LD3_GPIO_Port GPIOB
/* USER CODE BEGIN Private defines */
#define CDC_BUFF_SIZE 12800
#define CDC_BUFF_SIZE 51200
#define CDC_FRAME_SIZE 64
#define CDC_FRAME_DELAY 1
/* USER CODE END Private defines */

View File

@ -73,20 +73,6 @@ static void MX_USB_PCD_Init(void);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
void SysTick_Init(void)
{
SysTick_Config(SystemCoreClock / 10000); // Set SysTick interrupt to occur every 100us
}
void delay_us(uint32_t us)
{
uint32_t start = SysTick->VAL;
uint32_t ticks = us * 10;
while ((start - SysTick->VAL) < ticks);
}
/* USER CODE END 0 */
/**
@ -96,7 +82,6 @@ void delay_us(uint32_t us)
int main(void)
{
/* USER CODE BEGIN 1 */
LED_On();
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
@ -124,24 +109,24 @@ int main(void)
MX_I2C1_Init();
MX_USB_PCD_Init();
/* USER CODE BEGIN 2 */
//MX_DAC1_Init();
//MX_TIM15_Init();
LED_On();
HAL_PWREx_EnableVddUSB();
HAL_Delay(1);
tud_init(BOARD_DEVICE_RHPORT_NUM);
HAL_Delay(10);
SPI_Init(&hspi1);
// Wait for power stabilization
//HAL_Delay(1000);
tud_task();
int last_sent_idx = 0;
int buff_stop_idx = 0;
uint16_t image_size = 0;
uint8_t cdc_buff[CDC_BUFF_SIZE];
uint8_t cdc_buff[CDC_BUFF_SIZE+CDC_FRAME_SIZE];
for(int i = 0; i < (CDC_BUFF_SIZE+CDC_FRAME_SIZE); i++) cdc_buff[i] = 0x00;
Cam_Init(&hi2c1, &hspi1);
@ -160,22 +145,13 @@ int main(void)
buff_stop_idx = 0;
last_sent_idx = 0;
for(int i = 0; i < CDC_BUFF_SIZE; i++) cdc_buff[i] = 0x00;
//for(int i = 0; i < CDC_BUFF_SIZE; i++) cdc_buff[i] = 0x00;
CS_Off();
CS_On();
tud_task();
//Cam_Refresh(&hi2c1, &hspi1);
//Cam_Init(&hi2c1, &hspi1);
tud_task();
Cam_Capture(&hspi1);
tud_task();
image_size = Cam_FIFO_length(&hspi1);
Cam_Start_Burst_Read(&hspi1);
@ -185,8 +161,10 @@ int main(void)
}
else {
LED_Off();
int number_to_read = 0;
for(int i = 0; i < CDC_BUFF_SIZE; i++) cdc_buff[i] = 0x00;
//for(int i = 0; i < CDC_BUFF_SIZE; i++) cdc_buff[i] = 0x00;
if((buff_stop_idx + CDC_BUFF_SIZE) > (int) image_size){
number_to_read = (int) image_size - buff_stop_idx;
}
@ -197,6 +175,8 @@ int main(void)
HAL_SPI_Receive(&hspi1, cdc_buff, number_to_read, HAL_MAX_DELAY);
buff_stop_idx = buff_stop_idx + number_to_read;
LED_On();
}
int current_sending_idx = 0;
@ -214,12 +194,10 @@ int main(void)
tud_cdc_write_flush();
//Delay between sends
int i = 0;
for(;i<7000;i++);
for(;i<4000;i++);
}
while(last_sent_idx < buff_stop_idx);
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */