سلام دوستان
من دارم روی ی پروژه برای کارشناسی ام کار میکنم که اونم راه اندازی دوربین ov7670 است
توی ی تاپیک در همین فروم دربارش بحث شده اما اشکال من رفع نشد
چون این دوربین با i2c به میکرو وصل میشه من دارم برنامه ی i2c رو خودم دستی توی کد ویژن مینویسم و برای اینکه از برنامم مطمئن شم
از سنسور ds1307 که از همین پروتوکل استفاده میکنه ، استفاده میکنم
من در شبیه سازی تونستم این سنسور رو راه اندازی کنم اما سخت افزاری نه
میشه کمکم کنید
برنامم هم در ادامه ضمیمه کردم
من دارم روی ی پروژه برای کارشناسی ام کار میکنم که اونم راه اندازی دوربین ov7670 است
توی ی تاپیک در همین فروم دربارش بحث شده اما اشکال من رفع نشد
چون این دوربین با i2c به میکرو وصل میشه من دارم برنامه ی i2c رو خودم دستی توی کد ویژن مینویسم و برای اینکه از برنامم مطمئن شم
از سنسور ds1307 که از همین پروتوکل استفاده میکنه ، استفاده میکنم
من در شبیه سازی تونستم این سنسور رو راه اندازی کنم اما سخت افزاری نه
میشه کمکم کنید
برنامم هم در ادامه ضمیمه کردم
کد:
/*****************************************************
Chip type : ATmega32
Program type : Application
AVR Core Clock frequency: 8.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 256
*****************************************************/
#include <mega32.h>
#include <delay.h>
#include <stdio.h>
#include <string.h>
#asm
.equ __lcd_port=0x1B;
#endasm
#include <lcd.h>
#define SCL PORTB.0
#define SDA PORTB.1
void itoc_write (char ad1,char ad2)
{
int ii;
char komaki;
// PORTB.0=0;
DDRB.0=1; //OUTPUT
DDRB.1=1;
// PORTB.0=0;
// delay_us(5);
// SCL=1;
PORTB.1=1; // SDA=1;
delay_us(25);
PORTB.0=1; // SCL=1;
delay_us(25);
PORTB.1=0; // START CONDITION
delay_us(25);
PORTB.0=0; // SCL=0
delay_us(10);
komaki=0xD0;
for(ii=0;ii<8;ii++)
{
if((komaki&0x80)!=0) PORTB.1=1;
else PORTB.1=0;
delay_us(25);
PORTB.0=1; //SCL=1
delay_us(25);
komaki=komaki<<1;
PORTB.0=0;
}
delay_us(25);
DDRB.1=0;
// PORTB.1=1;
PORTB.0=1; //SCL=1
delay_us(25);
// PORTB.1=1;
// PORTB.0=0;
// delay_us(5);
// while(PINB.1==1);
PORTB.0=0;
DDRB.1=1;
delay_us(40);
komaki=ad1;
for(ii=0;ii<8;ii++)
{
if((komaki&0x80)!=0) PORTB.1=1;
else PORTB.1=0;
delay_us(25);
PORTB.0=1; //SCL=1
delay_us(25);
komaki=komaki<<1;
PORTB.0=0;
}
delay_us(25);
DDRB.1=0;
// PORTB.1=1;
PORTB.0=1; //SCL=1
delay_us(25);
// PORTB.1=1;
// PORTB.0=0;
// delay_us(5);
// while(PINB.1==1);
PORTB.0=0;
DDRB.1=1;
delay_us(40);
komaki=ad2;
for(ii=0;ii<8;ii++)
{
if((komaki&0x80)!=0) PORTB.1=1;
else PORTB.1=0;
delay_us(25);
PORTB.0=1; //SCL=1
delay_us(25);
komaki=komaki<<1;
PORTB.0=0;
}
delay_us(25);
DDRB.1=0;
// PORTB.1=1;
PORTB.0=1; //SCL=1
delay_us(25);
// PORTB.1=1;
// PORTB.0=0;
// delay_us(5);
// while(PINB.1==1);
PORTB.0=0;
DDRB.1=1;
delay_us(40);
PORTB.1=0;
delay_us(25);
PORTB.0=1;
delay_us(25);
PORTB.1=1; // STOP
delay_us(40);
}
char itoc_read(char ad1)
{
int ii;
char komaki;
DDRB.0=1;
DDRB.1=1;
PORTB.0=0;
delay_us(25);
PORTB.1=1; // SDA=1;
delay_us(25);
PORTB.0=1; // SCL=1;
delay_us(25);
PORTB.1=0; // START CONDITION
// DDRB.1=0; // INPUT
delay_us(25);
PORTB.0=0; // SCL=0
komaki=0xD0;
for(ii=0;ii<8;ii++)
{
if((komaki&0x80)!=0) PORTB.1=1;
else PORTB.1=0;
delay_us(25);
PORTB.0=1; //SCL=1
delay_us(25);
komaki=komaki<<1;
PORTB.0=0;
}
delay_us(25);
DDRB.1=0;
// PORTB.1=1;
PORTB.0=1; //SCL=1
delay_us(25);
// PORTB.1=1;
// PORTB.0=0;
// delay_us(5);
// while(PINB.1==1);
PORTB.0=0;
DDRB.1=1;
delay_us(40);
komaki=0;
komaki=ad1;
for(ii=0;ii<8;ii++)
{
if((komaki&0x80)!=0)
PORTB.1=1;
else PORTB.1=0;
delay_us(25);
PORTB.0=1; //SCL=1
delay_us(25);
komaki=komaki<<1;
PORTB.0=0;
}
delay_us(25);
DDRB.1=0;
// PORTB.1=1;
PORTB.0=1; //SCL=1
delay_us(25);
// PORTB.1=1;
// PORTB.0=0;
// delay_us(5);
// while(PINB.1==1);
PORTB.0=0;
DDRB.1=1;
delay_us(40);
PORTB.1=0;
delay_us(25);
PORTB.0=1;
delay_us(25);
PORTB.1=1; // STOP
delay_us(50);
DDRB.0=1;
DDRB.1=1;
// PORTB.0=0;
// delay_us(25);
// PORTB.1=1; // SDA=1;
// delay_us(25);
PORTB.0=1; // SCL=1;
// delay_us(25);
PORTB.1=0; // START CONDITION
// DDRB.1=0; // INPUT
delay_us(25);
PORTB.0=0; // SCL=0
komaki=0;
komaki=0xD1;
for(ii=0;ii<8;ii++)
{
if((komaki&0x80)!=0) PORTB.1=1;
else PORTB.1=0;
delay_us(25);
PORTB.0=1; //SCL=1
delay_us(25);
komaki=komaki<<1;
PORTB.0=0;
}
delay_us(25);
DDRB.1=0;
// PORTB.1=1;
PORTB.0=1; //SCL=1
delay_us(25);
// PORTB.1=1;
// PORTB.0=0;
// delay_us(5);
// while(PINB.1==1);
PORTB.0=0;
DDRB.1=1;
delay_us(50);
komaki=0;
DDRB.1=0; // INPUT
// PORTB.1=1;
for(ii=0;ii<7;ii++)
{
// if(PINB.1==1) komaki=komaki+1;
// komaki=komaki<<1;
PORTB.0=1;
delay_us(25);
if(PINB.1==1) komaki=komaki+1;
komaki=komaki<<1;
PORTB.0=0; //SCL=0
delay_us(25);
}
if(PINB.1==1) komaki=komaki+1;
// komaki=komaki>>1;
// DDRB.1=1;
return komaki;
PORTB.1=0;
delay_us(25);
PORTB.0=1;
delay_us(25);
PORTB.1=1; // STOP
delay_us(40);
}
char s1[16];
char meghdar;
void main(void)
{
PORTA=0x00;
DDRA=0x00;
PORTB=0;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x00;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
lcd_init(16);
itoc_write(0x06,0x11); //year
lcd_gotoxy(0,0);
lcd_putsf("test2");
itoc_write(0x05,0x09); //month
itoc_write(0x04,0x15); //date
meghdar= itoc_read(0x06);
lcd_gotoxy(7,0);
lcd_putsf("Test 1");
sprintf(s1,"%d" ,meghdar);
lcd_gotoxy(5,1);
lcd_puts(s1);
// sprintf(s1,"%d" ,meghdar);
// lcd_gotoxy(5,1);
// lcd_puts(s1);
delay_ms(500);
//meghdar2=itoc_read(0x05);
// meghdar3=itoc_read(0x04);
// }
while (1)
{
// itoc_write(0xD0,0x07,0x93); //control reg
// sprintf(s1,"%d" ,meghdar);
// lcd_gotoxy(5,1);
// lcd_puts(s1);
// sprintf(s2,"%d",meghdar2);
// lcd_gotoxy(5,1);
// lcd_puts(s2);
// sprintf(s3,"%d",meghdar3);
// lcd_gotoxy(10,1);
// lcd_puts(s3);
////
}
}



دیدگاه