Increase resolution, decrease send interval

This commit is contained in:
Adam Prochazka
2023-04-08 23:30:23 +02:00
parent 2007a5de10
commit ae0f8749b5
8 changed files with 138 additions and 97 deletions

View File

@ -133,7 +133,35 @@ void Cam_Init(I2C_HandleTypeDef *hi2c, SPI_HandleTypeDef *hspi)
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_bulk(hi2c, ov5642_320x240);
//Cam_I2C_write_bulk(hi2c, ov5642_320x240);
//Cam_I2C_write_bulk(hi2c, ov5642_640x480);
Cam_I2C_write_bulk(hi2c, ov5642_1280x960);
// 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_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){
Cam_I2C_write(hi2c, (uint16_t)0x3008, 0x80);
Cam_I2C_write_bulk(hi2c, OV5642_QVGA_Preview);
Cam_I2C_write_bulk(hi2c, OV5642_JPEG_Capture_QSXGA);
//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_bulk(hi2c, ov5642_320x240);
//ov5642_1024x768
Cam_I2C_write_bulk(hi2c, ov5642_1024x768);
// 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);

View File

@ -18,6 +18,8 @@ int Cam_I2C_write(I2C_HandleTypeDef *hi2c, uint16_t address, uint8_t data);
int Cam_I2C_write_struct(I2C_HandleTypeDef *hi2c, sensor_reg reg);
void Cam_I2C_write_bulk(I2C_HandleTypeDef *hi2c, const struct sensor_reg regList[]);
void Cam_Init(I2C_HandleTypeDef *hi2c, SPI_HandleTypeDef *hspi);
void Cam_Refresh(I2C_HandleTypeDef *hi2c, SPI_HandleTypeDef *hspi);
int Cam_FIFO_length(SPI_HandleTypeDef *hspi);
void Cam_Capture(SPI_HandleTypeDef *hspi);

View File

@ -271,86 +271,77 @@ int main(void)
// Wait for power stabilization
//HAL_Delay(1000);
Cam_Init(&hi2c1, &hspi1);
#define CDC_BUFF_SIZE 10000
int currentSendingIndex = 0;
int last_sent_idx = 0;
int buff_stop_idx = 0;
uint16_t image_size = 0;
uint8_t cdc_buff[CDC_BUFF_SIZE];
Cam_Capture(&hspi1);
uint16_t image_size = Cam_FIFO_length(&hspi1);
uint8_t image_data[10000];
memset(image_data, 0x00, 10000);
Cam_Start_Burst_Read(&hspi1);
//HAL_SPI_Receive_DMA(&hspi1, image_data, 10000);
HAL_SPI_Receive(&hspi1, image_data, 10000, HAL_MAX_DELAY);
LED_On();
while (SPI_Rx_Done_Flag == 0)
{
// Wait for SPI transfer to finish
break;
}
CS_Off();
SPI_Rx_Done_Flag = 0;
/* USER CODE END 2 */
/* Infinite loop */
/* USER CODE BEGIN WHILE */
while (1)
{
{
tud_task();
if(currentSendingIndex >= 9949){
//if(false){
currentSendingIndex = 0;
//free(image_data);
for(int i = 0; i < 10000; i++) image_data[i] = 0x00;
if(buff_stop_idx >= (int)image_size){
buff_stop_idx = 0;
last_sent_idx = 0;
for(int i = 0; i < CDC_BUFF_SIZE; i++) cdc_buff[i] = 0x00;
CS_Off();
CS_On();
tud_task();
Cam_Init(&hi2c1, &hspi1);
tud_task();
Cam_Capture(&hspi1);
tud_task();
image_size = Cam_FIFO_length(&hspi1);
//image_data = malloc((image_size + (image_size%10)) * sizeof(uint8_t));
//memset(image_data, 0x00, image_size + (image_size%10));
Cam_Start_Burst_Read(&hspi1);
HAL_SPI_Receive(&hspi1, image_data, 10000, HAL_MAX_DELAY);
//Debug_LED_On();
continue;
while (SPI_Rx_Done_Flag == 0)
{
// Wait for SPI transfer to finish
//tud_task();
break;
}
CS_Off();
//SPI_Rx_Done_Flag = 0;
if(image_size < 1){
currentSendingIndex = 10000;
LED_On();
}
//HAL_SPI_Receive(&hspi1, cdc_buff, CDC_BUFF_SIZE, HAL_MAX_DELAY);
}
else {
//tud_cdc_write("11111111\r\n", 10);
//tud_cdc_write_flush();
//tud_cdc_write(&sendT[currentSendingIndex], 50);
tud_cdc_write(&image_data[currentSendingIndex], 50);
tud_cdc_write_flush();
currentSendingIndex = currentSendingIndex + 50;
HAL_Delay(5);
int number_to_read = 0;
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;
}
else{
number_to_read = CDC_BUFF_SIZE;
}
HAL_SPI_Receive(&hspi1, cdc_buff, number_to_read, HAL_MAX_DELAY);
buff_stop_idx = buff_stop_idx + number_to_read;
}
int current_sending_idx = 0;
do{
tud_task();
tud_cdc_write(&cdc_buff[current_sending_idx], 50);
tud_cdc_write_flush();
current_sending_idx = current_sending_idx + 50;
last_sent_idx = last_sent_idx + 50;
HAL_Delay(3);
}
while(last_sent_idx < buff_stop_idx);
LED_On();
/* USER CODE END WHILE */
/* USER CODE BEGIN 3 */