با سلام و خسته نباشید و یک ایول به همه که هوای همو دارن و تو این انجمن بهم کمک میکنن.
من برای نوشتن برنامه روبات مسیریابم مشکل دارم اگه میشه دوستان کمک کنید تا بنویسمش
من 20 تا سنسور گذاشتم که تقریبا به این صورت چیده شده
که سنسورای شماره 14،15،19،20 برای بارکد خوان قرار دادم
واز اپ امپ استفاده کردم و میخوام با pwmسرعتشو کنترل کنم
میکرومم atmega32 ای وی ار هست
اگه کسی هست کمکم کنه یا علی
می خوای از بسکام استفاده کنی یا از CodeVisionAVR باید بگی ؟؟؟
از چه درایوری می خوای استفاده کنی (l298-93,...)
(۰۷-بهمن-۱۳۸۹, ۲۲:۲۹:۰۹)h0x00i نوشته است: [ -> ]می خوای از بسکام استفاده کنی یا از CodeVisionAVR باید بگی ؟؟؟
از چه درایوری می خوای استفاده کنی (l298-93,...)
با سلام ممنون که کمکم میکنید
من بیشتر دوست دارم از CodeVisionAVR استفاده کنم
ولی در کل برام فرقی نداره
و از درایورl298استفاده میکنم.
خوب باید از تایمر 1 استفاده کنی در مود fast pwm
سلام دوستان من یه برنامه ربات مسیریاب دارم که اقا حامد گل برام نوشته بودن ولی گفتن تکمیل نیست
کسی هست بتونه بهم کمک کنه تاتکمیلش کنم اخه من ازش سر در نمیارم
باتشکر فراوان
(۱۲-شهریور-۱۳۹۰, ۰۴:۰۶:۲۷)hamedskort نوشته است: [ -> ]سلام دوستان من یه برنامه ربات مسیریاب دارم که اقا حامد گل برام نوشته بودن ولی گفتن تکمیل نیست
کسی هست بتونه بهم کمک کنه تاتکمیلش کنم اخه من ازش سر در نمیارم
باتشکر فراوان
سلام دوست من. شما باید برنامتو بزاری رو frume تا کسی بتونه تکمیلش کنه آخه. چی رو تکمیل کنیم؟
برنامه رو بزار با شماتیک مدارت تا انشاو الله تکمیلش کنیم به کمک هم.
(۱۶-شهریور-۱۳۹۰, ۲۳:۵۲:۲۳)hamed dehghani نوشته است: [ -> ] (۱۲-شهریور-۱۳۹۰, ۰۴:۰۶:۲۷)hamedskort نوشته است: [ -> ]سلام دوستان من یه برنامه ربات مسیریاب دارم که اقا حامد گل برام نوشته بودن ولی گفتن تکمیل نیست
کسی هست بتونه بهم کمک کنه تاتکمیلش کنم اخه من ازش سر در نمیارم
باتشکر فراوان
سلام دوست من. شما باید برنامتو بزاری رو frume تا کسی بتونه تکمیلش کنه آخه. چی رو تکمیل کنیم؟
برنامه رو بزار با شماتیک مدارت تا انشاو الله تکمیلش کنیم به کمک هم.
کد:
/***************in the name of god*******************
Project : robat ((find line))
Version : 1.0
Date : 2/5/2011
Author : hamedtorky\_/`i`\_/hamedtorky7@gmail.com
Company : h0x00i
Comments: the best company for robatic
www.iranled.com
Chip type : ATmega32L
Program type : Application
AVR Core Clock frequency: 12.000000 MHz
Memory model : Small
External RAM size : 0
Data Stack size : 512
*****************************************************/
#include <mega32.h>
#include <delay.h>
#define pwm1 PORTD.4
#define pwm2 PORTD.5
#define sensor PORTB.2
//for : motor delay for code and color
int time=850;
//for code
int code=0;
//for color
int color=0;
//CONTROL MOTOR
void mf(){ DDRD=0b00000101;}
void mr(){ DDRD=0b00000110;}
void ml(){ DDRD=0b00001001;}
void ms(){ DDRD=0b00000000;}
//SEMSOR FORWARD
void sf(){
// SENSOR FORWARD
PINA.0=0xFF;
PINB.3=0xFF;
PINA.2=0xFF;
PINC.7=0xFF;
}
//SENSOR LEFT
void sl1(){
//SENSOR 1,2
PINC.2=0xFF;
PINC.1=0xFF;
}
void sl2(){
//SENSOR 3,4
PINC.4=0xFF;
PINC.5=0xFF;
}
void sl3(){
//SENSOR 5,6
PINC.5=0xFF;
PINC.6=0xFF;
}
//SESOR RIGHT
void sr1(){
//SENSOR 13,12
PINA.7=0xFF;
PINA.6=0xFF;
}
void sr2(){
//SENSOR 11,10
PINA.5=0xFF;
PINA.4=0xFF;
}
void sr3(){
//SENSOR 9,8
PINA.3=0xFF;
PINA.1=0xFF;
}
//SENSOR CODE
void scr(){
//SENSOR CODE RIGHT
PINB.0=0XFF;
}
void scl(){
//SENSOR CODE LEFT
PINC.0=0XFF;
}
//SENSOR COLOR
void scor(){
//SENSOR COLOR RIGHT
PINB.1=0XFF;
}
void scol(){
//SENSOR COLOR LEFT
PIND.7=0XFF;
}
void code2(){
//2 LINE
PINC.6=0xFF;
PINC.5=0xFF;
PINA.1=0xFF;
PINA.3=0xFF;
PINA.0=0xFF;
}
void code3(){
//NO LINE
PINC.2=0x00;
PINC.3=0x00;
PINC.4=0x00;
PINC.5=0x00;
PINC.6=0x00;
PINA.0=0x00;
PINA.7=0x00;
PINA.6=0x00;
PINA.5=0x00;
PINA.4=0x00;
PINA.3=0x00;
PINA.1=0x00;
}
void code4(){
//big line
PINA.0=0xFF;
PINC.6=0xFF;
PINA.1=0xFF;
}
void main(void)
{
//confige port for micro
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
PORTD=0x00;
DDRD=0xFF;
//*********
while (1)
{
while(sf){
mf();
if(scr){
code=code+1;
if(code==3){
code=0;
delay_ms(time);
if(code2){
mr();
};
};
while(scr){};
};
if(scl){
code=code+2;
if(code==6){
code=0;
delay_ms(time);
if(code2){
ml();
};
};
while(scl){};
};
if(scor){
color=color+1;
if(color==3){
color=0;
delay_ms(time);
if(code2){
mr();
};
};
while(scor){};
};
if(scol){
color=color+2;
if(color==6){
color=0;
delay_ms(time);
if(code2){
ml();
};
};
while(scol){};
};
};
while (sl1){
mr();
};
while (sl2){
mr();};
while (sl3){
mr();
};
while (sr1){
mr();
};
while (sr2){
mr();
};
while (sr3){
mr();
};
while (code3){
mf();
};
while (code4){
mf();
};
};
}
برنامه ی خوبیه
ولی اگه جواب نمیده مطمئن شو که مدارش مشکل نداره و با پورتهایی که توی برنامه نوشته شده همخونی داره
بعدشم این برنامه یه مقدار کارو سخت کرده مثلا برای delay متغیر time و تعریف کرده که این کارو سخت می کنه منظورم اینه که اینجور کارا ازادی عملو میگیره
و در کل باید بگم که این برنامه باید برات یه الگو باشه و تو باید خودت برنامتو بنویسی که مشکلاتت کمتر باشه
سلام دوست عزیز .....
دلیل استفاده از متغیر time اینکه باید این سنسور یعد از یک شودن یا به عبارتی خواندن یه مدت به کار قبلی ادامه بده چون این زمان من نمی دونستم یه متغییر تعریف کردم که دوستمون ان متغییر نسبت به اون فاصله تغییر بده که البته این کار من درست نبود باید از یک شرط استفاده می کردم تا زمانی که روبات به دو راهی رسید نسبت به کدی که سنسور خوانده عکس العمل نشون بده
در کل برنامه بالا کامل نیست و از کنترل سرعت استفاده نکردم البته کار زیادیم نداره تقریبا با چند تا تغییر کامل میشه
در مورد ایبنکه این باید یک القو برای انجام کار این دوست ما باشه موافقم چون اولا این برنامه کامل نیست دوم اینکه ما در این انجمن قصد داریم باعث پیشرفت شما دوستان بشیم نه که با انجام دادن کار ای شما باعث بشیم که شما دنبالش نرید در کل سعی ما کمک به شما برای یادگیری بهتره ((البته من توی سطحی نیستم که بخوام به کسی چیزی یاد بدم منظورم از ما دوستان))
با سلام
آفا من با این الگو مشکل دارم برنامه رو نمی فهمم چند تا سوال دارم میشه کمکم کنین؟
1-
#define pwm1 PORTD.4
#define pwm2 PORTD.5
void mf(){ DDRD=0b00000101;}
void mr(){ DDRD=0b00000110;}
void ml(){ DDRD=0b00001001;}
void ms(){ DDRD=0b00000000;}
در توابع حرکت پایه های enable موتور ها رو صفر کردین آیا اینجوری موتور ها حرکت می کنن؟
2-
void sf()
void sl1()
void sl2()
void sl3()
void sr1()
void sr2()
void sr3()
void scr()
void scl()
void scor()
void scol()
void code2()
void code3()
void code4()
کار این توابع چی هست؟
3- در این توابع به هر بیت از پورتها یک بایت نسبت دادید) مثلا PINA.0 = 0xFF ( آیا این کار درست هست؟
4- در این توابع به پورت های ورودی مقدار داده شده مگر این پورتها نباید مقدارشون رو از سنسور ها بگیرن ؟
5-
PORTA=0x00;
DDRA=0x00;
PORTB=0x00;
DDRB=0x00;
PORTC=0x00;
DDRC=0x00;
من یک جا ( کتاب ناقوس avr ) خونده بودم که هر وقت می خوایم از پورتها به عنوان ورودی استفاده کنیم باید pullup ها رو فعال کنیم ولی شما نکردین آیا این گفته درست هست؟
6- تو حلقه while ( 1 ( در قسمت شرط تمام if ها و while ها از توابع فوق استفاده کردین در حالی که این توابع مقداری بر نمی گردانند در این شرط ها چه چیزی مقایسه شده؟
7 - الگوریتم حلقه بی نهایت رو کلا نفهمیدم! میشه توضیح بدید؟
8- ببخشید زیاد سوال پرسیدم