قسم الميكروكنترولر والروبوت ودوائر الاتصال بالحاسب الالي قسم المتحكمات الـ microcontroller و المعالجات microprocessor و التحكم الرقمي بالكمبيوتر CNC والانظمة الآلية والروبوت Robots

أدوات الموضوع

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 31-07-2013, 03:10 PM المشاركة 1   
افتراضي مشروع المصعد كهربائي Twitter FaceBook Google+



سلام عليكم
قمت ببرمجه مصعد كهربائي بكود بسيط علما اني قمت بتحميل ملف مصعد من منتداكم واستخدمت الرسم وغيرت الكود بكود ان شالله يكون صحيح وبسيط
http://arabsh.com/files/0d3f424c6cfb/مصعد-rar.html

اعلانات

abdallamousa16
:: مهندس متواجد ::
تاريخ التسجيل: Jul 2013
المشاركات: 60
نشاط [ abdallamousa16 ]
قوة السمعة:0
قديم 31-07-2013, 04:31 PM المشاركة 2   
افتراضي


كود جميل اخي ولا كننا نريد ملف التصميم المرئي proteus لنرى الملف وهو يعمل تحياتي

اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 31-07-2013, 05:37 PM المشاركة 3   
افتراضي


كود جميل اخي ولا كننا نريد ملف التصميم المرئي proteus لنرى الملف وهو يعمل تحياتي
سلام عليكم
اخي كريم لقد ارفقت ملف كامل مع رسم على بروتيس ستجد ملف اسمه
ELEVETOR .pdsprj


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 31-07-2013, 07:11 PM المشاركة 4   
افتراضي


سلام عليكم
اضفت صوت عند الضغط على مفتاح او عند ايقاف المصعد
ولكني لاحظت شي انه بمجرد اضفت كود خاص بالصوت زاد حجم كود بالنسبه الى رام زاد بمقدار 17 بايت لانه كان 17 وزاد الى 34
ام حجم كود بالروم 443 الى 1192 بايت لماذا زاد كود علما اني استخدمت داله فرعيه ومن معروف ان استدعاء الداله لايزيد من حجم ذاكره الا جزء بسيط
ليس هذا فحسب هناك كواد تاخذ من ذاكره حجم كبير مثلا امر مسح الشاشه ياخذ 4 بايت هل ياترى في لغه سي هذا يحصل فقط ام في كل لغات
ملف في رابط التالي
http://arabsh.com/files/0d3f424d60fa/مصعد-rar.html
كود:
#define led             portc
#define segment        portd
#define segment_dir     trisd
#define input           1
#define output          0
#define up           portc.f0
#define up_dir      trisc.f0
#define down           portc.f1
#define down_dir      trisc.f1
#define is              ==
#define on              1
#define off             0
#define set_bit(var,pos)  (var|=1<<pos)

////////////////// varable ////////////////////////
char x=0 , cont=0, dd=0   ,k1=255 , bb=0;
char y=0;
void motor_up();
void motor_down();
void direction(char mm);
void floor_check();
char floor_switch[6];
void sound();

/////////////////// init////////////////////////////
void init()
{
adcon1=6;
trisc= output;// or led=output;
trisb=input;
portb=0;
segment_dir=output;
portc=0;
up=down=off;// off motor
segment=0; // portd =0  
cont=eeprom_read(0);
Sound_Init(&PORTe, 0);// connect buzzer in portb at bin 6
}
void main()
{
init();


while(1)
   {
      direction(1);// check floor down to up
      if( k1 is 1 )motor_up();// runing  motor
      direction(0);
      if( k1 is 0 ) motor_down();

   }
}
void sound()
{
     Sound_Play(1500, 50);
}
 void floors_check()
 {
    if(portb.b0==1) {floor_switch[0]=1;sound();} // if press putton for floor 0
    if(portb.b1==1) {floor_switch[1]=1;sound();} // if press putton for floor 1
    if(portb.b2==1) {floor_switch[2]=1;}  // if press putton for floor 2
    if(portb.b3==1) {floor_switch[3]=1;sound();} // if press putton for floor 3
    if(portb.b4==1) {floor_switch[4]=1;sound();} // if press putton for floor 4
    if(portb.b5==1) {floor_switch[5]=1;sound();} // if press putton for floor 5


}
void direction(char mm)
{
 for(x=0;x<=5;x++)
     {  floors_check(); //  check switch for all floors
      if( (floor_switch[x] is 1) )
          {
           if((x-cont)>0 && mm==1)
               {k1=1;
                if((x-y)>0) y=x;
               }
            if((cont-x)>0 && mm==0)
               {k1=0;
                if((y-x)>=0) y=x;
               }
          }
     }
}
void motor_up()
{
 if(k1 is 1)
     {
              for(dd=cont;dd<=y;dd++) // cont mean poistion for lift and y mean last floor can be arrived
               {
                up=on; down=off;
               led &=3;// led=portc==> mean portc =portc & 0000 0011 // this clear all leds and no effect for bit 0 and bit 1
                for( bb=0;bb<=100;bb++) // delay= 30x100=3000ms
                    {
                     delay_ms(30);
                     direction(1); // check again if any switch is pressed
                    }
                 segment=dd;// display number floor
                  if( floor_switch[dd] is 1)
                           { sound();
                           up=off; down=off;
                            set_bit( portc,dd+2); // operation leds// why d+2 because bit0 and bit1 using for motor tnen start from bit3
                            floor_switch[dd]=0;
                            for( bb=0;bb<=100;bb++)
                                      {
                                       delay_ms(10);
                                       direction(1);
                                       }
                           }
                           

                }
             cont=y;
           eeprom_write(0,cont); // store value for position elevator
           k1=255;//randam value
     }
 }
void motor_down()
 
{
 if(k1 is 0){
              for(dd=cont;dd>=y && dd!=255;dd--)
               {
                up=off; down=on;
                portc&=3;// mean portc =portc & 0000 0011 // this clear all leds and no effect for bit 0 and bit 1
                for( bb=0;bb<=100;bb++)
                    {
                     delay_ms(30);
                     direction(0);
                    }
                 segment=dd;
                  if( floor_switch[dd] is 1)
                           { sound();
                            up=off; down=off;
                             set_bit( portc,dd+2);
                             floor_switch[dd]=0;
                            for( bb=0;bb<=100;bb++)
                                      {
                                       delay_ms(10);
                                       direction(0);
                                       }
                           }


                }
              cont=y;
              eeprom_write(0,cont); // store value for position elevator

           k1=255;
     }
}


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 02-08-2013, 01:49 PM المشاركة 5   
افتراضي


سلام عليكم
ارفق لكم مشروع مصعد متكون من 16 طابق وقابل للزياده بكود بسيط
ارجوا اعطائي اراكم حول مشروع
http://arabsh.com/files/0d3f434865f3...inal1-rar.html
ملاحظه // لم اقم ببرمجه المصابيح حاليا ولكن اريد رايكم وبعدها ابرمج الاشارات


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 02-08-2013, 01:58 PM المشاركة 6   
افتراضي


سلام عليكم
اخواني راح اعطيكم كودين لنفس المشروع الاول استخدمت فيه ايبروم لخزن الاشارات الداخله اي خزن سويج عندما يتم ضغط عليها لان بدون خزنها سوف افقدها لكون سويج عباره عن نبضه واحده فلابد من مكان لخزنها
الكود الاول خزنتها في ايبروم كود صحيح لم يظهر لي اي خطأ ولكن في برنامج بروتيس الاصدار 8 ظهرت لي رساله خطأ كما اوضحتها سابقا على هذا رابط
http://www.qariya.com/vb/showthread....648#post775648
ام كود ثاني استخدمت فيه مصفوفه اخرى هذه مره لم يظهر لي اي خطـا في برنامج بروتيس الاصدار 8
الكود الاول باستخدام ذاكره ايبروم
كود:
#define so_165                 portb.f0
#define so_165_dir             trisb.f0
#define sh_165                 portb.f1
#define sh_165_dir             trisb.f1
#define clk_165                portb.f2
#define clk_165_dir           trisb.f2

#define ds_595                 portc.f2
#define ds_595_dir             trisc.f2
#define st_cp_595              portc.f3
#define st_cp_595_dir          trisc.f3
#define sh_cp_595              portc.f4
#define sh_cp_595_dir          trisc.f4

#define segment                portd
#define segment_dir            trisd
#define en_seg1                portd.f4
#define en_seg1_dir            trisd.f4
#define en_seg2                portd.f5
#define en_seg2_dir            trisd.f5
#define input                  1
#define output                 0
#define up                     portc.f0
#define up_dir                 trisc.f0
#define down                   portc.f1
#define down_dir               trisc.f1
#define is                      ==
#define on                     1
#define off                     0
#define set_bit(var,pos)      (var|=1<<pos)

////////////////// varable ////////////////////////
char x=0 , cont=0, dd=0   ,k1=255 , bb=0;
char y=0 , i=0 ,n=0;
void motor_up();
void motor_down();
void direction(char mm);
void floor_check();
char floor_switch[16];
void show_number(char number);

/////////////////// init////////////////////////////
void init()
{
adcon1=6;
eecon1=0b10000111;
so_165_dir= input;
clk_165_dir=sh_165_dir=output;
ds_595_dir= st_cp_595_dir=sh_cp_595_dir=output;

up=down=off;// off motor
up_dir =down_dir=output;

segment_dir=output;
segment=0x0f;// portd =0
en_seg1 =en_seg2 =off;
cont=eeprom_read(16);// cont mean the position now for eevaloter
dd=eeprom_read(17); // dd mean the number floor to show 7 seg
}
void main()
{
init();


while(1)
   {  show_number(dd);
      direction(1);// check floor down to up
      if( k1 is 1 )motor_up();// runing  motor
      direction(0);
      if( k1 is 0 ) motor_down();

   }
}
void show_number(char number)
{
 en_seg1=on; en_seg2=off;
 segment=(segment & 0xf0)+(number/10);
 delay_ms(1);
 segment=(segment & 0xf0)+0x0f; // turn off  segment
  en_seg1=off; en_seg2=on;
 segment=(segment & 0xf0)+(number%10);
 delay_ms(1);
 segment=(segment & 0xf0)+0x0f; // turn off  segment
}
 void floor_check()
 {
  clk_165 =0;
  sh_165=0; sh_165=1;// puls from 0 to 1
  for(i=0;i<16;i++)
       {
        floor_switch[i]=so_165;
        clk_165 =0;    clk_165 =1;// puls for clock from 0 to 1
       }
 for(i=0;i<16;i++)
       {

        if( floor_switch[i] is 1 || eeprom_read(i) is 1)eeprom_write(i,1);
       }
}
void direction(char mm)
{
 for(x=0;x<=15;x++)
     {  floor_check(); //  check switch for all flowers
      if( (floor_switch[x] is 1) )
          {
           if((x-cont)>0 && mm==1)
               {k1=1;
                if((x-y)>0) y=x;
               }
            if((cont-x)>0 && mm==0)
               {k1=0;
                if((y-x)>=0) y=x;
               }
          }
     }
}
void motor_up()
{
 if(k1 is 1)
     {
              for(dd=cont;dd<=y;dd++) // cont mean poistion for lift and y mean last flower can be arrived
               {
                up=on; down=off;
                for( bb=0;bb<=200;bb++)
                    {
                     delay_ms(10);
                     show_number(dd);
                     direction(1);
                    }

                  if( eeprom_read(dd) is 1)
                           { up=off; down=off;
                           // set_bit( portc,dd+2); // operation leds// why d+2 because bit0 and bit1 using for motor tnen start from bit3
                            eeprom_write(dd,0);
                            for( bb=0;bb<=100;bb++)
                                      {
                                       delay_ms(10);
                                       show_number(dd);
                                       direction(1);
                                       }
                           }


                }
             cont=y;
           eeprom_write(16,cont); // store value for position elevator
           EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
           k1=255;//randam value
     }
 }
void motor_down()

{
 if(k1 is 0){
              for(dd=cont;dd>=y && dd!=255;dd--)
               {
                up=off; down=on;
                portc&=3;// mean portc =portc & 0000 0011 // this clear all leds and no effect for bit 0 and bit 1
                for( bb=0;bb<=200;bb++)
                    {
                     delay_ms(10);
                     show_number(dd);
                     direction(0);
                    }

                  if( eeprom_read(dd) is 1)
                           { up=off; down=off;
                             set_bit( portc,dd+2);
                             eeprom_write(dd,0);
                            for( bb=0;bb<=100;bb++)
                                      {
                                       delay_ms(10);
                                       show_number(dd);
                                       direction(0);
                                       }
                           }


                }
              cont=y;
              eeprom_write(16,cont); // store value for position elevator
              EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
           k1=255;
     }
}
الكود الثاني باستخدام مصفوفه لخزن البيانات بدلا من ايبروم
كود:
#define so_165                 portb.f0
#define so_165_dir             trisb.f0
#define sh_165                 portb.f1
#define sh_165_dir             trisb.f1
#define clk_165                portb.f2
#define clk_165_dir           trisb.f2

#define ds_595                 portc.f2
#define ds_595_dir             trisc.f2
#define st_cp_595              portc.f3
#define st_cp_595_dir          trisc.f3
#define sh_cp_595              portc.f4
#define sh_cp_595_dir          trisc.f4

#define segment                portd
#define segment_dir            trisd
#define en_seg1                portd.f4
#define en_seg1_dir            trisd.f4
#define en_seg2                portd.f5
#define en_seg2_dir            trisd.f5
#define input                  1
#define output                 0
#define up                     portc.f0
#define up_dir                 trisc.f0
#define down                   portc.f1
#define down_dir               trisc.f1
#define is                      ==
#define on                     1
#define off                     0
#define set_bit(var,pos)      (var|=1<<pos)

////////////////// varable ////////////////////////
char x=0 , cont=0, dd=0   ,k1=255 , bb=0;
char y=0 , i=0 ,n=0;
void motor_up();
void motor_down();
void direction(char mm);
void floor_check();
char floor_switch[16];
input_switch[16];
void show_number(char number);

/////////////////// init////////////////////////////
void init()
{
adcon1=6;
//eecon1=0b10000111;
so_165_dir= input;
clk_165_dir=sh_165_dir=output;
ds_595_dir= st_cp_595_dir=sh_cp_595_dir=output;

up=down=off;// off motor
up_dir =down_dir=output;

segment_dir=output;
segment=0x0f;// portd =0
en_seg1 =en_seg2 =off;
cont=eeprom_read(16);// cont mean the position now for eevaloter
dd=eeprom_read(17); // dd mean the number floor to show 7 seg
}
void main()
{
init();


while(1)

   {  
      show_number(dd);
      direction(1);// check floor down to up
      if( k1 is 1 )motor_up();// runing  motor
      direction(0);
      if( k1 is 0 ) motor_down();

   }
}
void show_number(char number)
{
 en_seg1=on; en_seg2=off;
 segment=(segment & 0xf0)+(number/10);
 delay_ms(1);
 segment=(segment & 0xf0)+0x0f; // turn off  segment
  en_seg1=off; en_seg2=on;
 segment=(segment & 0xf0)+(number%10);
 delay_ms(1);
 segment=(segment & 0xf0)+0x0f; // turn off  segment
}
 void floor_check()
 {
  clk_165 =0;
  sh_165=0; sh_165=1;// puls from 0 to 1
  for(i=0;i<16;i++)
       {
        floor_switch[i]=so_165;
        clk_165 =0;    clk_165 =1;// puls for clock from 0 to 1
       }
  /*for(i=0;i<16;i++)
       {

        if( floor_switch[i] is 1 )eeprom_write(i,1);// give me error in eeprom i dont know
       }*/
for(i=0;i<16;i++)
       {

        //input_switch[i]=eeprom_read(i);
         if( floor_switch[i] is 1)input_switch[i]=1;// store value for ani switch is pressed
       }
}
void direction(char mm)
{
 for(x=0;x<=15;x++)
     {  floor_check(); //  check switch for all flowers
      if( (input_switch[x] is 1) )
          {
           if((x-cont)>0 && mm==1)
               {k1=1;
                if((x-y)>0) y=x;   // choice max. floor
               }
            if((cont-x)>0 && mm==0)
               {k1=0;
                if((y-x)>=0) y=x;// choice mim floor
               }
          }
     }
}
void motor_up()
{
 if(k1 is 1)
     {
              for(dd=cont+1;dd<=y;dd++) // cont mean poistion for lift and y mean last flower can be arrived
               {
                up=on; down=off;
                for( bb=0;bb<=250;bb++)// equivalent delay_ms(2000);
                    {
                     delay_ms(10);
                     show_number(dd-1);// for example for(dd=cont+1;dd<=y;dd++) cont=0; y=1; ==> for(dd=1;dd<=1;dd++) this mean the eevaloter
                                       // in floor 0 and must be up to floor 1 need for this project 2.5 second now if write show_number(dd)
                                       // what show direct no floor 1 this not correct must be show no floor 0 this mean write show_number( dd-1)
                     direction(1);
                    }

                  if( input_switch[dd] is 1)
                           { up=off; down=off;
                           // set_bit( portc,dd+2); // operation leds// why d+2 because bit0 and bit1 using for motor tnen start from bit3
                            input_switch[dd]=0;
                            for( bb=0;bb<=150;bb++) // this mean time delay 1.5 second
                                      {
                                       delay_ms(10);
                                       show_number(dd);
                                       direction(1);
                                       }
                           }


                }
             cont=y;
             dd-=1;// this using show example for(dd=cont+1;dd<=y;dd++) , cont=0 y=1 ==> for(dd=1;dd<=1;dd++) this mean floor no 1 after that dd++
                     // equal 2 but dd<=1 this mean exit from for , now in void main() write show_number(dd) now without write dd-=1; the 7 seg
                     // will show no floor 2 this no true also show EEPROM_Write(17,dd); this mean without dd-=1; store no floor 2
           eeprom_write(16,cont); // store value for position elevator
           EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
           k1=255;//randam value
     }
 }
void motor_down()

{
 if(k1 is 0){
              for(dd=cont-1;dd>=y && dd!=255;dd--)
               {
                up=off; down=on;
                portc&=3;// mean portc =portc & 0000 0011 // this clear all leds and no effect for bit 0 and bit 1
                for( bb=0;bb<=200;bb++)
                    {
                     delay_ms(10);
                     show_number(dd+1);
                     direction(0);
                    }

                  if( input_switch[dd] is 1)
                           { up=off; down=off;
                             //set_bit( portc,dd+2);
                             input_switch[dd]=0;
                             //eeprom_write(dd,0);
                            for( bb=0;bb<=100;bb++)
                                      {
                                       delay_ms(10);
                                       show_number(dd);
                                       direction(0);
                                       }
                           }


                }
              cont=y;
              dd+=1;
              eeprom_write(16,cont); // store value for position elevator
              EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
           k1=255;
     }
}


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 03-08-2013, 12:10 PM المشاركة 7   
افتراضي


سلام عليكم
ارفق لكم مشروع مصعد 16 طابق ولكن رسمت دائره على بروتيس الاصدار سابع لاني لاحظت دائره سابقه لاتظهر على بروتيس 7 لان امتداد ملف مختلف مع علم ان الاصدار 8 فيه متيازات حلوه
http://arabsh.com/files/0d3f434e64f1...floor-rar.html

إضافة رد

العلامات المرجعية

«     الموضوع السابق       الموضوع التالي    »
أدوات الموضوع

الانتقال السريع إلى


الساعة معتمدة بتوقيت جرينتش +3 الساعة الآن: 06:56 PM
موقع القرية الالكترونية غير مسؤول عن أي اتفاق تجاري أو تعاوني بين الأعضاء
فعلى كل شخص تحمل مسئولية نفسه إتجاه مايقوم به من بيع وشراء وإتفاق وأعطاء معلومات موقعه
التعليقات المنشورة لا تعبر عن رأي موقع القرية الالكترونية ولايتحمل الموقع أي مسؤولية قانونية حيال ذلك (ويتحمل كاتبها مسؤولية النشر)

Powered by vBulletin® Version 3.8.6, Copyright ©2000 - 2025