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

   

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 25-05-2014, 10:09 PM المشاركة 49   
افتراضي



اخي الحبيب حسن هادي
السلام عليكم ورحمة الله وبركاته
وجدت فكرة لزيادة مداخل البيك باستخدام مسجلات الإزاحة وكان قد شرح فكرتها اخونا الحبيب ريبوتا رسمت نموذج كما هو بالشكل.....


والغرض منه ان اضغط علي الزر يظهر لي اسم علي شاشة ال سي دي ولكن لايظهر شئ
مرفق الملف كامل من خلال الرابط

اخي ارجو المراجعة واظهار الأخطاء بارك الله لك
السلام عليكم
كلامك صحيح اخي متكامله 74hc165 تعمل على زياده مداخل البيك بمضاعفات 8
تحياتي

اعلانات

hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 585
نشاط [ hamadalla31 ]
قوة السمعة:
قديم 26-05-2014, 10:30 AM المشاركة 50   
افتراضي


اخي الحبيب حسن انتظر منك تصحيح الخطأ الموجود بالكود
وجزاكم الله عني بكل خير

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

الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 26-05-2014, 12:19 PM المشاركة 51   
افتراضي


السلام

اخ هادي

3 ايام و انا اراجع الكود و اتعلم و 1000 شكر

اخي طيب الان قمنا بحساب السرعة

هل ممكن عمل كود عن الضغط على سويتش يعرض مبلغ 125 و بعد 10 ثواني يزيد المبلغ 30 ليصبح 155

و هكذا ان امكن ان يبدء بكلمة StAr


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 26-05-2014, 03:00 PM المشاركة 52   
افتراضي


السلام

اخ هادي

3 ايام و انا اراجع الكود و اتعلم و 1000 شكر

اخي طيب الان قمنا بحساب السرعة

هل ممكن عمل كود عن الضغط على سويتش يعرض مبلغ 125 و بعد 10 ثواني يزيد المبلغ 30 ليصبح 155

و هكذا ان امكن ان يبدء بكلمة StAr
السلام عليكم
اخي بخدمتك ولكني اريد أفهم ماذا تعني "مبلغ 125 و بعد 10 ثواني يزيد المبلغ 30 ليصبح 155" الكود ليس صعب وانما اود اعرف فكرتك
اما اذا تريد عرض رقم فلا يوجد مشكله
تحياتي


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 26-05-2014, 03:59 PM المشاركة 53   
افتراضي


اخي الحبيب حسن انتظر منك تصحيح الخطأ الموجود بالكود
وجزاكم الله عني بكل خير
السلام عليكم
نعم أخي يوجد أخطاء وسقوم بتعديل عليه فيما بعد
ارجو اطلاع على هذا مشروع لمصعد 16 طابق (( مشروع غيركامل )) مهم منه هو استفاده من استخدام متكامله 74hc165
http://arabsh.com/files/0c32444c67f6...floor-rar.html

كود:
#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;

}
void main()
{
init();
if( eeprom_read(16) !=0xff)cont=eeprom_read(16);// cont mean the position now for eevaloter
if(eeprom_read(17) !=0xff)dd=eeprom_read(17); // dd mean the number floor to show 7 seg
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( (EEPROM_Read(x) is 1) )
     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;
                            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);
                                       }
                           }

                  eeprom_write(16,cont); // store value for position elevator
                  EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
                }
        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);
                                       }
                           }

                 eeprom_write(16,cont); // store value for position elevator
                 EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
                }
              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;
     }
}


hamadalla31
:: مهندس متميز ::
تاريخ التسجيل: Mar 2009
المشاركات: 585
نشاط [ hamadalla31 ]
قوة السمعة:
قديم 26-05-2014, 04:21 PM المشاركة 54   
افتراضي بارك الله لك اخي الكريم واعزك وفتح لك كل ابواب الخير


السلام عليكم
نعم أخي يوجد أخطاء وسقوم بتعديل عليه فيما بعد
ارجو اطلاع على هذا مشروع لمصعد 16 طابق (( مشروع غيركامل )) مهم منه هو استفاده من استخدام متكامله 74hc165
http://arabsh.com/files/0c32444c67f6...floor-rar.html

كود:
#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;

}
void main()
{
init();
if( eeprom_read(16) !=0xff)cont=eeprom_read(16);// cont mean the position now for eevaloter
if(eeprom_read(17) !=0xff)dd=eeprom_read(17); // dd mean the number floor to show 7 seg
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( (EEPROM_Read(x) is 1) )
     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;
                            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);
                                       }
                           }

                  eeprom_write(16,cont); // store value for position elevator
                  EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
                }
        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);
                                       }
                           }

                 eeprom_write(16,cont); // store value for position elevator
                 EEPROM_Write(17,dd);   // store number for last floor for show in 7 seg
                }
              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;
     }
}
بسم الله ماشاء الله عليك
دائما تتحفنا بخيرات وخبرات كبيرة بارك الله لك اخي الحبيب



الصورة الرمزية المخترع01
المخترع01
:: مهندس متميز ::
تاريخ التسجيل: Dec 2009
المشاركات: 397
نشاط [ المخترع01 ]
قوة السمعة:
قديم 26-05-2014, 05:42 PM المشاركة 55   
افتراضي


السلام عليكم
اخي بخدمتك ولكني اريد أفهم ماذا تعني "مبلغ 125 و بعد 10 ثواني يزيد المبلغ 30 ليصبح 155" الكود ليس صعب وانما اود اعرف فكرتك
اما اذا تريد عرض رقم فلا يوجد مشكله
تحياتي
المشروع هو عداد للاجرة

يتم الضغط على سويتش فيعرض العداد مبلغ 0.125

و بعد مدة 10 ثواني نزيد 30 ليصبح 155 و بعد 10 ثواني 185

طيب و ان ادخلنا نبضات من المدخل RA4

يحسب لنا النبضات مثلا - ان دخل عدد 100 نبضة فيقوم بزيادة 30

النبضات هنا --- السيارة في وضع الحركة

مثلا مواطن ركب سيارة اجرة

فعند البدئ يعرض المبلغ الاول 0.125

و المواطن سيذهب من اسطون الى الجيزة
فكل 100 متر يزيد المبلغ 30 و عند وقف السيارة هنا يصبح في وضع الانتضار و يزيد 30 كل مرور 10 ثواني
اخي شكرا لكم


الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,673
نشاط [ حسن هادي محمود ]
قوة السمعة:
قديم 26-05-2014, 09:50 PM المشاركة 56   
افتراضي


بسم الله ماشاء الله عليك
دائما تتحفنا بخيرات وخبرات كبيرة بارك الله لك اخي الحبيب

السلام عليكم
تم التعديل على مشروع
http://arabsh.com/files/0c32444c63f4...lla31-rar.html

ملاحظه كتبت كود لايسي 74hc165
كود:
void check_switch()
{
 clk =0;
  sh=0; sh=1;// puls from 0 to 1
  for(i=7;i>=0 && i!=255 ;i--)
       {
        switch1[i]=so;
        if(so==1)check=1;

        clk =0;    clk=1;// puls for clock from 0 to 1
       }

}
تلاحظ بلون احمر جعلته داله for تكرر i من 7 الى 0 لماذا لسبب بسيط وهو متكامله 74hc165 تشفت البيانات بشكل معكوس يعني بهذه طريقه سوف اسجل بالمصفوفه الاول هو s1 , والثامن هو S8
ولكن لو رتبتها داله for تكرر i من 0 الى 7 هنا لازم تخلي بالك انه مخزون بعنصر الاول من مصفوفه هو S8 وليس S1 والعنصر اخير هو S1 وليس S8
وهنا انت مخير بأستخدام اي طريقه طالما انت تعرف موقع سويج مراد استخدامه يعني لو أستخدمت for تكرر i من 0 الى 7 وردت سويج رقم 1 فبتاكيد موقعه هو عنصر الثامن من مصفوفه طبعا ثامن [switch[7

تحياتي



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