📄 c328r.h
字号:
// ------------------------------------- C328R camera module header file -------------------------------------
enum mode {CMD,CAMERA_JPEG_DATA,CAMERA_JPEG_DATA_REMAINDER,CAMERA_PREVIEW_DATA};
enum mode MODE;
//unsigned volatile int picture_address; // ez kell, csak itt a general.h fileban van deklar醠va
#define CAMERA_DATA_PACKAGE CAMERA_DATA_LENGTH+6
#define INIT_ID 0x01
#define GET_PICTURE_ID 0x04
#define SNAPSHOT_ID 0x05
#define SETPS_ID 0x06
#define SETBR_ID 0x07
#define RESET_ID 0x08
#define POFF_ID 0x09
#define DATA_ID 0x0A
#define SYNC_ID 0x0D
#define ACK_ID 0x0E
#define NACK_ID 0x0F
#define LIGHTF_ID 0x13
#define JPEG_640x480 0x07,0x01,0x07
#define JPEG_320x240 0x07,0x01,0x05
#define JPEG_160x128 0x07,0x01,0x03
#define JPEG_80x64 0x07,0x01,0x01
#define _8BITGS_80x60 0x03,0x01,0x01
#define _8BITGS_160x120 0x03,0x03,0x01
#define _4BITGS_80x60 0x02,0x01,0x01
#define _4BITGS_160x120
void SendCameraCmd(unsigned char cyclenumber,unsigned char delaynumber,unsigned char idH,unsigned char idL,unsigned char par1,unsigned char par2,unsigned char par3,unsigned char par4)
{
unsigned char trynumber=0;
ACK=0;
NACK=0;
while((ACK==0) && (NACK==0) && (trynumber<cyclenumber))
{
while ( !( UCSR0A & (1<<UDRE0)) ); // megv醨ja m韌 黵es lesz a transmit buffer
UDR0=idH;
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0=idL;
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0=par1;
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0=par2;
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0=par3;
while ( !( UCSR0A & (1<<UDRE0)) );
UDR0=par4;
for(unsigned char i=0;i<delaynumber; i++ ) DELAY_1MS_10MHZ;
trynumber++; // timegap for the camera response
}
}
void ReceiveCameraAck(unsigned char ack)
{
while(!ack) _NOP();
ack=0;
}
void UsartInit_14400(void) //10 MHz CLK frekvencia
{
UCSR0A= (1<<U2X0);
UBRR0H = 0;
UBRR0L = 86;
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); // receive/transmit enged閘yez閟, receive complete interrupt enged閘yezve
UCSR0C = (0 << USBS0) | (1 << UCSZ01) | (1 << UCSZ00); // 1 stop bit, 8 adatbit keretenk閚t
}
void UsartInit_115200(void) //10 MHz CLK frekvencia
{
UCSR0A= (1<<U2X0);
UBRR0H = 0;
UBRR0L = 10;
UCSR0B = (1 << RXEN0) | (1 << TXEN0) | (1 << RXCIE0); // receive/transmit enged閘yez閟, receive complete interrupt enged閘yezve
UCSR0C = (0 << USBS0) | (1 << UCSZ01) | (1 << UCSZ00); // 1 stop bit, 8 adatbit keretenk閚t
}
void C328RCameraInit(unsigned char firstinit) // el鮰te az USART-ot 14400 baud rate-re kell inicializ醠ni!!!
{
// if(firstinit)
{
UsartInit_14400();
SendCameraCmd(60,25,0xAA,SYNC_ID,0x00,0x00,0x00,0x00); // SYNC
// ReceiveCameraAck(SYNC_ACK);
SendCameraCmd(3,10,0xAA,SETBR_ID,0x0F,0x01,0x00,0x00); // SETBR (115200br)
ReceiveCameraAck(SETBR_ACK);
UsartInit_115200();
}
SendCameraCmd(1,10,0xAA,LIGHTF_ID,0x00,0x00,0x00,0x00);
ReceiveCameraAck(LIGHTF_ACK);
if (firstinit)
{
cli();
LED2_ON;
for (unsigned int s=0;s<2000;s++) DELAY_1MS_10MHZ; // az els
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -