اطلاعیه

Collapse
No announcement yet.

راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

Collapse
X
 
  • فیلتر
  • زمان
  • Show
Clear All
new posts

    #16
    پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

    سلام.
    به این دو آدرس یه سری بزنید.از همه امکانات میکرو استفاده کرده یه ماژول اساسی ساخته.
    (به نظر به USB و MMC هم وصل میشه.)
    البته فروشیه نه آموزشی.
    http://cgi.ebay.com.sg/AVR-Atmega32-OV7660-262K-TFT-LCD-Module-Board-/190407103830
    http://cgi.ebay.com.sg/2-8-TFT-LCD-Module-AVR-Resource-OV7670-Camera-V4-0-/200475513524
    اینا رو گذاشتم دل گرم تر ادامه بدیم.! :biggrin:

    دیدگاه


      #17
      پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

      اتفاقا من اون 45 دلاری هه رو دارم و تست کردم ، جواب داد (کار خاصی نکردم ، usb رو وصل کردم تاروشن شد) .بنابراین منم خیالم راحته . فقط باید یه بار اینرو روی برد برد یا بورد هزار سوراخ هم امتحان کنم .
      برای همین میگم اگه مدار دقیقا مطابق شماتیک بسته بشه ، بدون تغییر برنامه باید کار بکنه.
      من فقط فرصت نکردم مدارش روببندم (گیت nand نداشتم !)

      دیدگاه


        #18
        پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

        برد رو از کجا خریدید؟

        دیدگاه


          #19
          پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

          بنظرم باید خودمون sccb رو بدون استفاده از I2C و twi میکرو شبیه سازی کنیم. تو یه سورس همچین کاری کرده بود! البته انگار 7660 بود...

          دوستانی که میخوان همکاری کنن، sccb specification رو تو گوگل سرچ کنن. یه pdf هست که کامل توضیح داده. اینو بخونین ببینیم چی میشه...
          https://www.linkedin.com/in/mohammadhosseini69

          http://zakhar.blog.ir

          دیدگاه


            #20
            پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکر&

            یه موضوع مهم !!

            سطح ارتباط منطقی میکرو که 5 ولت.
            در مورد ماژول دوربین هم با توجه به اینکه من 3.1 ولت دادم و دیودی هم خود ماژول واسه تغذیه آنالوگ و I/O داره، پس میشه حدودا 2.6 ولت (آنالوگ و I/O دوربین)
            حالا ارتباط i2C چی میشه؟ میکرو از اینطرف برای 1 کردن، 5 ولت میده. ابن باعث نمیشه چیپ دوربین بسوزه؟؟؟ ! :sad: تو دیتاشیت حداکثر ولتاژ 4.5 نوشته. تو خطوط ارتباطی اگه ولتاژ بالای این حد داشته باشیم چی میشه؟
            از اون مهمتر مقاومت پول پ SDA و SCL باید به 5 وصل بشه یا ... ؟ من که به 5 وصل کرده بودم. به تغذیه I/O دوربین که دسترسی ندارم. ولی میتونم با 3.1 هم امتحان کنم.

            راستی من آخرش نفهمیدم تو ارتباط I2C ، پایه ها باید ورودی باشن یا خروجی؟ مقاومت پول پ داخلی فعال باشه یا نه؟
            https://www.linkedin.com/in/mohammadhosseini69

            http://zakhar.blog.ir

            دیدگاه


              #21
              پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

              این کدی که نوشتم و دارم تست میکنم :

              #include <avr/io.h>
              #include <util/delay.h>
              #include <util/twi.h>

              #define bitrateKHz 100

              int main()
              {
              sei();
              unsigned char twst=0;
              TWSR = 0;
              TWBR = (((F_CPU/1000l)/bitrateKHz)-16)/2;
              _delay_ms(2000);

              while ( 1 )
              {
              // send START condition
              TWCR = (1<<TWINT) | (1<<TWSTA) | (1<<TWEN);

              // wait until transmission completed
              while(!(TWCR & (1<<TWINT)));

              // check value of TWI Status Register. Mask prescaler bits.
              twst = TW_STATUS & 0xF8;
              if ( (twst != TW_START) && (twst != TW_REP_START)) continue;

              // send device address
              TWDR = 0x42;
              TWCR = (1<<TWINT) | (1<<TWEN);

              // wail until transmission completed
              while(!(TWCR & (1<<TWINT)));

              // check value of TWI Status Register. Mask prescaler bits.
              twst = TW_STATUS & 0xF8;
              if ( (twst == TW_MT_SLA_NACK )||(twst ==TW_MR_DATA_NACK) )
              {
              /* device busy, send stop condition to terminate write operation */
              TWCR = (1<<TWINT) | (1<<TWEN) | (1<<TWSTO);

              // wait until stop condition is executed and bus released
              while(TWCR & (1<<TWSTO));

              continue;
              }
              //if( twst != TW_MT_SLA_ACK) return 1;
              break;
              }

              DDRB = PORTB = 0xff; //turn on LED

              return 0;
              }

              اول وضعیت start ارسال و از طرف slave (سنسور) تایید میشه
              بعد آدرس نوشتن رو سنسور فرستاده میشه. تو دیتاشیت نوشته 42. نگفته هگز!! معمولا باید هگز باشه دیگه. نکته دیگه اینه که آیا این 42 هفت بیت باارزشتر دیتای ارسالی باید باشه یا نه باید همین فرستاده بشه. چون همونطور که میدونین کم ارزشترین بیت از بایتی که برای آدرس ارسال میشه مشخص میکنه که میخوایم بنویسیم یا بخونیم. برای نوشتن این بیت باید صفر باشه و برای خوندن یک
              بهرحال من همه اینا رو امتحان کردم و جواب نداد! باید بعد از ارسال آدرس، سنسور به عنوان slave تایید کنه و وضعیت ACK (یا acknowledge) اعلام بشه. درحالی که NACK میشه! :angry:

              دارم تمام تلاشم رو میکنم که این سنسور راه اندازی بشه. مطمئنا خیلی ها هستن که میخوان دوربین وصل کنن به میکرو... اما نمیدونم چرا کسی همکاری نمیکنه!! :sad:
              برای پست بعد شماتیک رو آماده میکنم...
              https://www.linkedin.com/in/mohammadhosseini69

              http://zakhar.blog.ir

              دیدگاه


                #22
                پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

                ببخشید دیر جواب میدم ،

                بنظرم باید خودمون sccb رو بدون استفاده از I2C و twi میکرو شبیه سازی کنیم. تو یه سورس همچین کاری کرده بود! البته انگار 7660 بود...

                دوستانی که میخوان همکاری کنن، sccb specification رو تو گوگل سرچ کنن. یه pdf هست که کامل توضیح داده. اینو بخونین ببینیم چی میشه...
                تو اون مدار و برنامه ای که همراه دوربینه ، چون پایه های میکرو کم اومده (همینطوریش هم لچ استفاده کرده) و پایه های مربوط به TWI پر بودن ، اومده به صورت نرم افزاری اون رو اجرا کرده . وگرنه sccb با i2c همخوانی داره.

                7660 با 7670 زیاد فرقی نداره ، برای همین با همون هم کار میکنه.
                یه موضوع مهم !!

                سطح ارتباط منطقی میکرو که 5 ولت.
                در مورد ماژول دوربین هم با توجه به اینکه من 3.1 ولت دادم و دیودی هم خود ماژول واسه تغذیه آنالوگ و I/O داره، پس میشه حدودا 2.6 ولت (آنالوگ و I/O دوربین)
                حالا ارتباط i2C چی میشه؟ میکرو از اینطرف برای 1 کردن، 5 ولت میده. ابن باعث نمیشه چیپ دوربین بسوزه؟؟؟ ! تو دیتاشیت حداکثر ولتاژ 4.5 نوشته. تو خطوط ارتباطی اگه ولتاژ بالای این حد داشته باشیم چی میشه؟
                از اون مهمتر مقاومت پول پ SDA و SCL باید به 5 وصل بشه یا ... ؟ من که به 5 وصل کرده بودم. به تغذیه I/O دوربین که دسترسی ندارم. ولی میتونم با 3.1 هم امتحان کنم.

                راستی من آخرش نفهمیدم تو ارتباط I2C ، پایه ها باید ورودی باشن یا خروجی؟ مقاومت پول پ داخلی فعال باشه یا نه؟
                یکی از راه هاش اینه که کلا تغذیه همه بورد رو 3.3 در نظر بگیرید . از جمله خود میکرو . البته باید میکروتون نوع L باشه . با اینکار دیگه نگران 5 ولت و 3 ولت نیستید.
                اما اگه میخواید میکرو تون 5 ولت باشه ، از این روش ها میتونید استفاده کنید:
                http://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=65
                بهترین روشش اینه که طرف اونی که 3.3 ولته (دوربین ) باس i2c رو به 3.3 پول پ کنید و طرفی که میکرو 5ولت هست رو به 5 ولت پول پ کنید . بین این دوتا پول پ هم یه ماسفت کانال n بگذارید (مثل 2n7002 , vn2222L , bss138 ) . اینطوری دیگه مو لادرزش نمیره و در حقیقت یه لول شیفتر ساختید.
                دادن 5 ولت به چیپی که absolute maximum اش 4.5 ولته ، حتما پیامد های ناگواری داره ! البته معمولا در مدار ورودی یه کلمپ میگذارن ولی بازم بسته مدت دادن ولتاژ ، همون مدار کلمپ هم خراب میشه و میتونه به چیپ آسیب برسه . شما 5ولت رو پول اپ هم کرده بودید ، یعنی مدام این ولتاژ روی پایه بوده ! . انشاءالله که چیزی نشده .
                بهترین کار اینه که یه رگولاتور 3.3 ولت بگیرید ، تغذیه کل مدار رو با اون بدید .
                ورودی و خروجی بودن پایه ، ارتباطی با i2c نداره ، جون اون بخشها برای GPIO هستن و I2C یه بخش جدا داره . پول اپش هم مهم نیست ، چون به هر حال یه پول اپ خارجی دارید.

                دیدگاه


                  #23
                  پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

                  دقت نکرده بودم که خود ماژول رو باس I2C مقاومت پول پ گذاشته! پس با این حساب نسوخته دیگه نه؟ اون مقاومت نمیذاره ولتاژ به 5 برسه! (شخصا تست کردم (مسخره نکنین!) یعنی با پایه میکرو 5 ولت دادم ولتاژ رو باس شد 4.5!)

                  من الان میکرو نوع L که ندارم. ماسفت هم ندارم! به یکی گفتم بگرده تو یه کارگاه ببینه اینا پیدا میشه...
                  اگه نشد باید رو arm تست کنم. اونم مشکلش اینه که arm رو تازه شروع کردم اعتماد به نفس ندارم!
                  https://www.linkedin.com/in/mohammadhosseini69

                  http://zakhar.blog.ir

                  دیدگاه


                    #24
                    پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

                    یعنی توی Bascom نمیشه اینو راه انداخت ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                    معجزه پس از معجزه می آید و شگفتی ها از تجلی باز نمی مانند.

                    دیدگاه


                      #25
                      پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

                      نوشته اصلی توسط john lock
                      یعنی توی Bascom نمیشه اینو راه انداخت ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
                      چرا نشه!
                      اما خب تنها چیزی که تو اینترنت در موردش پیدا میشه فقط چند نمونه سورس به زبون سی (winavr) ...

                      فردا میرم سراغ twi آرم...
                      https://www.linkedin.com/in/mohammadhosseini69

                      http://zakhar.blog.ir

                      دیدگاه


                        #26
                        پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکروکنترلر

                        سلام
                        بلاخره دیروز تونستم با I2C ، رجیسترهای دوربین رو دستکاری کنم و کلاکش رو کم کنم. ولی هنوز نتونستم تصویر درست حسابی بگیرم...نمی دونم هدرهای bmp مشکل داره یا دوربین، یا نحوه ی خوندن دیتاها!!!

                        دیدگاه


                          #27
                          پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکر&

                          نوشته اصلی توسط حسنی
                          سلام
                          بلاخره دیروز تونستم با I2C ، رجیسترهای دوربین رو دستکاری کنم و کلاکش رو کم کنم. ولی هنوز نتونستم تصویر درست حسابی بگیرم...نمی دونم هدرهای bmp مشکل داره یا دوربین، یا نحوه ی خوندن دیتاها!!!
                          با چی؟ میکرو چی بود؟ لطفا کد و مدار رو بذار

                          من هرکاری کردم نتیجه نگرفتم! کلی با arm کلنجار رفتم بازم نشد! فکر کنم اون موقع که با 5 ولت کار میکردم سوخته...
                          https://www.linkedin.com/in/mohammadhosseini69

                          http://zakhar.blog.ir

                          دیدگاه


                            #28
                            پاسخ : پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکر&

                            نوشته اصلی توسط محمد حسینی
                            با چی؟ میکرو چی بود؟ لطفا کد و مدار رو بذار

                            من هرکاری کردم نتیجه نگرفتم! کلی با arm کلنجار رفتم بازم نشد! فکر کنم اون موقع که با 5 ولت کار میکردم سوخته...
                            LPC2378
                            واسه من که طول کشید به خاطر این بود که یه سوتی بد داده بودم!!! تیک power بلوک I2C0 رو تو فایل startup نزده بودم!و 3،4 روز سر کار بودم! I2C بدون پاور بود و من انتظار داشتم جواب بده!
                            بعید می دونم سوخته باشه! من یه دفعه کانتکتور دوربین رو اشتباه جا زدم! VCC و GND ها جابه جا شد! برای اطمینان با اسکوپ پایه HREF رو ببینید.
                            دوربین من OV6620 ولی خوب باس همون باسه!

                            کد:
                            //MY_I2C_N_IRQ.h
                            #define I2C_EN 0x40	
                            #define I2C_STA 0x20
                            #define I2C_STO 0x10
                            #define I2C_SI 0x08
                            #define I2C_AA 0x04
                            
                            #define CAM_WRITE 0xC0
                            #define CAM_READ 0xC1
                            
                            
                            
                            void I2CInit(void);
                            void AddressCAM(unsigned char address) ;
                            void WriteCAM(unsigned char Reg ,unsigned char Data);
                            unsigned char ReadCAM (unsigned char reg);
                            کد :
                            کد:
                            #include"LPC23xx.h" 
                            #include"MY_I2C_N_IRQ.h"
                            
                             void I2CInit()
                            
                            {
                              
                            	PINSEL1 &= ~0x03C00000;
                              PINSEL1 |= 0x01400000;	/* set PIO0.27 and PIO0.28 to I2C0 SDA and SCK */
                            							/* function to 01 on both SDA and SCK. */
                            	I20SCLH=0x96; /* 100 KHz : Fcpu:60M Fi2c0=15M divide value(I20SCLH+I20SCLL=150)*/
                            	I20SCLL=0x96; // I2Cbitfrequency=(fPCLK/(I2CSCLH + I2CSCLL))
                            	I20CONCLR = 0x6C; //CLEAR ALL FLAGS
                            	I20CONSET = I2C_EN;
                            	
                            }
                            
                            void AddressCAM(unsigned char address) 
                            {
                            	do
                            	 {
                            		I20CONSET = I2C_STA ; //setup start condition	 
                            		while (~I20CONSET & I2C_SI); //wait for start to be sent
                            	 }
                            	while (I20STAT != 0x08); //repeat if no ACK received
                            
                              I20DAT = address ; //load the CAM write address
                            	I20CONCLR = I2C_STA | I2C_SI; //send CAM address
                            	while (~I20CONSET & I2C_SI); //wait for address to be sent
                            
                            }
                            void WriteCAM(unsigned char Reg ,unsigned char Data) 
                            {
                            	AddressCAM(CAM_WRITE);
                            	while (I20STAT != 0x18);
                            	I20DAT = Reg; //load address
                            	I20CONCLR = I2C_SI; //send data
                            	
                            	while (~I20CONSET & I2C_SI); //wait
                            	
                              I20DAT = Data; //load data
                            	I20CONCLR = I2C_SI; //send data
                            	while (~I20CONSET & I2C_SI); //wait for data to be sent
                            	while (I20STAT != 0x28);
                            	I20CONSET = I2C_STO; //setup stop condition
                            	I20CONCLR = I2C_SI; //start sending stop
                            	while (I20CONSET & I2C_STO); //wait for stop to be sent
                            	
                            }//
                            من از اینتراپت I2C استفاده نکردم، اونجوری شاید راحت تر باشه.
                            الان تونستم write کنم ولی با read مشکل دارم. readش خیلی مسخرست باید یه write مجازی ایجاد کنی بعد read کنی، نمی دونم این شرکت Omni چرا از I2C استاندارد استفاده نکرده! و یه پروتکل از خودش داده!

                            یه سوال بی ربط به موضوع هم داشتم! من دیتاهای دریافتی از دوربین رو ذخیره نمی کنم. بلافاصله با سریال ارسال می کنم.چرا CPU معطل می مونه تا ارسال تموم شه؟! مگه نه اینکه باید دیتا رو بده به بخش UART و خود UART زمان بندی و چیدمان دیتا رو واسه ارسال آماده کنه؟ این وسط زمان زیادی از دست میره.
                            من اول می خواستم اطلاعات یک فریم رو بگیرم و ارسال کنم ولی هر چقدر هم کلاک دوربین رو کم کنید بازم یه فریم خیلی سریع آماده میشه و فرصت ارسالش نیست. باید دیتاها رو از فریم های مختلف گرفت


                            دیدگاه


                              #29
                              پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکر&

                              من با at91sam7 کار میکنم
                              خوبه انگار twi با LPC راحتره (مثل avr8). این at91 خیلی عجیب غریبه! مثلا خواستن کارو راحت کنن چند غالب ارسال در نظر گرفتن... اما دستمون رو بدستن ...
                              الان مشکل من اینه که هر آدرسی میفرستم مشکلی پیش نمیاد و nack نمیشه!

                              ولتاژ io برای6620 ، 5 ولت درسته؟ LPC با چند ولت کار میکنه؟...

                              از کجا فهمیدی درست رو رجیسترها نوشتی؟ با اسکوپ کلاک ها رو میبینی؟ (من که اسکوپ ندارم! باید بمونم تا ترم جدید تو آزمایشگاه...)
                              https://www.linkedin.com/in/mohammadhosseini69

                              http://zakhar.blog.ir

                              دیدگاه


                                #30
                                پاسخ : پاسخ : راه اندازی دوربین با سنسور OV7670 توسط میکر&

                                نوشته اصلی توسط محمد حسینی
                                من با at91sam7 کار میکنم
                                خوبه انگار twi با LPC راحتره (مثل avr8). این at91 خیلی عجیب غریبه! مثلا خواستن کارو راحت کنن چند غالب ارسال در نظر گرفتن... اما دستمون رو بدستن ...
                                الان مشکل من اینه که هر آدرسی میفرستم مشکلی پیش نمیاد و nack نمیشه!

                                ولتاژ io برای6620 ، 5 ولت درسته؟ LPC با چند ولت کار میکنه؟...

                                از کجا فهمیدی درست رو رجیسترها نوشتی؟ با اسکوپ کلاک ها رو میبینی؟ (من که اسکوپ ندارم! باید بمونم تا ترم جدید تو آزمایشگاه...)
                                بله 5 ولته...LPC 3.3V ولی پایه هاش تا 5 رو تحمل میکنه.
                                با اسکوپ دیدم... خروجی آنالوگ هم داره ...وصل کردم به TV دیدم.

                                دیدگاه

                                لطفا صبر کنید...
                                X