PDA

View Full Version : حرفه ای: برنامه نویسی میکرو کنترولر با دوربین به زبان c



piter11
جمعه 10 مهر 1394, 23:36 عصر
سلام من میخوام با یک ماژول دوربین vga وصلش کنم به میکرو کنتلر atemg16 و طی یه زمان خاص مثلا هر ماه یه عکس بگیره بریزه تو یک حافظه جانبی فلش مموری که به میکرو اونم وصل شده و ذخیره شه کسی کد نویسیشو بلده؟ نمونه دارید؟ تاحالا کسی انجام داده؟ خیلی لازم دارم ممنون میشم کسی کمکم کنه با سپاس

ali chegini
شنبه 11 مهر 1394, 05:47 صبح
سلام.
در مورد موارد زیر باید بدونی :
1- پروتکل دوربین چیست ؟
2- دقیقا چه حافطه ای ؟
----------------------------
1 - بعد از اینکه پروتکل ارتباط با دوربین رو فهمیدی مثلا SPI ، 400K ، برای همون کد می نویسی :
2-1 - برای کد نویسی هم می تونی به راحتی از دیتاشیت میکروکنترلر مورد نظر استفاده کنی یا سرچ کنی.
2- بعد از مشخص کردن حافظه مورد نظر و پروتکل ارتباط با اون که اگر sdcard (http://avrprojects.info/avr-tutorials/reading-and-writing-sd-card-using-atmega16)انتخاب کنی معمولا SPI هستن :
1-2- می تونی از دیتا شیت استفاده کنی یا سرچ کنی.
----------------------------
نکته : برای ارتباط با کامپیوتر هم چند تا راه وجود داره که به موارد زیر بستگی داره :
1- ارتباط بی سیم هست یا نه
2- فاصله ارتباط چقدر هست یا حداکثر چقدر هست
3- نیاز به باس صنعتی هست یا نه
4- سیستم عامل مورد نظر چی هست
هر کدوم از موارد بالا می تونه تغییر زیادی تو کار ایجاد کنه که اگر اول بررسی نشه ، هزینه کار رو زیاد می کنه.

piter11
شنبه 11 مهر 1394, 10:25 صبح
سلام دوست عزیز
راه ارتباطی بله spi هستش و از sdcard هم استفاده میکنیم واسه ارتباطشم با کامپیوتر کاری نداریم
فقط میخوایم عکس بگیره ذخیرش کنه تو حافظه جانبی

ali chegini
دوشنبه 13 مهر 1394, 00:02 صبح
سلام.
1- با کدوم قسمت به مشکل خوردی ؟
2- اصلا برای چی این کار رو میکنی ؟ منظورم اینه که هدفت چیه ؟ ربات می خوای بسازی یا کار صنعتی می خوای انجام بدی.
چون دوربین های آماده که به کامپیوتر وصل میشه و میتونه فیلم و عکس بگیره و ... هست.
--------------------------------------
فرض کنیم شما دوربین رو با پروتکل I2C استفاده میکنی و sdcard رو با پروتکل SPI. - معمولا دوربین کامند رو از I2C میگیره و دیتا رو سریال می فرسته .
نمای کلی کار به صورت زیر هست :
1- راه اندازی اولیه I2C .
2- راه اندازی اولیه SPI .
3- راه اندازی اولیه UART (سریال)
4- ارسال کامند از طریق I2C و دریافت عکس از سریال و ذخیره آن.
--------------------------------------
نمای جزئی تر از راه اندازی سریال و توابع مورد استفاده :

voidUSART_Init( unsigned intbaud )
{
/* Set baud rate*/
UBRRH = (unsigned char)(baud>>8);
UBRRL = (unsigned char)baud;
/* Enable receiver and transmitter*/
UCSRB = (1<<RXEN)|(1<<TXEN);
/* Set frame format: 8data, 2stop bit*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
}

voidUSART_Transmit( unsigned chardata )
{
/* Wait for empty transmit buffer*/
while( !( UCSRA & (1<<UDRE)) )
;
/* Put data into buffer, sends the data*/
UDR = data;
}


unsigned charUSART_Receive( void)
{
/* Wait for data to be received*/
while( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer*/
returnUDR;
}

voidUSART_Flush( void)
{
unsigned chardummy;
while( UCSRA & (1<<RXC) ) dummy = UDR;
}







----------------------------------------
I2C :



//Send START condition
TWCR = (1<<TWINT)|(1<<TWSTA)|
(1<<TWEN)
/*
Wait for TWINT Flag set. This indicates
that the START condition has been
transmitted
*/
while(!(TWCR & (1<<TWINT)))
;




/*
Check value of TWI Status Register. Mask
prescaler bits. If status different from
START go to ERROR
*/
if((TWSR & 0xF8) != START)
ERROR();
/*
Load SLA_W into TWDR Register. Clear
TWINT bit in TWCR to start transmission
of address
*/
TWDR = SLA_W;
TWCR = (1<<TWINT) | (1<<TWEN);
/*
Wait for TWINT Flag set. This indicates
that the SLA+W has been transmitted,
and ACK/NACK has been received.
*/
while(!(TWCR & (1<<TWINT)))
;
/*
Check value of TWI Status Register. Mask
prescaler bits. If status different from
MT_SLA_ACK go to ERROR
*/
if((TWSR & 0xF8) != MT_SLA_ACK)
ERROR();


/*
Load DATA into TWDR Register. Clear
TWINT bit in TWCR to start transmission
of data
*/
TWDR = DATA;
TWCR = (1<<TWINT) | (1<<TWEN);
/*
Wait for TWINT Flag set. This indicates
that the DATA has been transmitted, and
ACK/NACK has been received.
*/
while(!(TWCR & (1<<TWINT)))
;
/*
Check value of TWI Status Register. Mask
prescaler bits. If status different from
MT_DATA_ACK go to ERROR
*/
if((TWSR & 0xF8) != MT_DATA_ACK)
ERROR();
/*
Transmit STOP condition
*/
TWCR = (1<<TWINT)|(1<<TWEN)|
(1<<TWSTO);




راه اندازی قسمت SPI هم کدش تو دیتاشیت هست . مرجع کد های بالا هم دیتاشیت هست اگر توضیح اضافه تری خواستی می تونی رجوع کنی .
برای کار با sdcard هم مثال زیاد هست که یه نمونش رو لینک گذاشتم (http://avrprojects.info/avr-tutorials/reading-and-writing-sd-card-using-atmega16).