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

   

مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 04-11-2016, 08:47 PM المشاركة 425   
sun



بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته
توكل على الحى الذى لا يموت و جرب :

يمكنك تغيير قيمة الرقم الموجود بالسطر الاحمر بالزيادة و النقصان

كود:
 char i = 0 ;
char stepdelay = 0;
unsigned int  numbofturns = 0;

void step_Move(char step){
 for (i=0; i< step; i++){
     delay_us(300);       //  غير هذه القيمة لتغيير المسافة التى يتحركها الحرف ان شاء الله
 }
}
char letter_M[] = {0xfe,0xfe,0x60,0x30,0x60,0xfe,0xfe};
char letter_i[] = { 0x00,0x82,0xfe,0xfe,0x82,0x00,0x00};
char letter_c[] = { 0x38,0x7c,0xc6,0x82,0x82,0xc6,0x44};
char letter_R[] = {0x82,0xfe,0xfe,0x98,0x9c,0xf6,0x62};
char letter_O[] = {0X38,0X7C,0XC6,0X82,0XC6,0X7C,0X38};
char letter_p[] = { 0x82,0xfe,0xfe,0x92,0x90,0xf0,0x60};
char letter_Rr[] = { 0x82,0xfe,0xfe,0x98,0x9c,0xf6,0x62};

void main() {
DDRD = 0XFF;
PORTD = 0;
DDRB = 0XFD;
PORTB = 2;
while(1){
          while(PINB & 0x02){}
          numbofturns++;
          if (numbofturns > 10) {   // غير هذه القيمة لتغيير الزمن بين الحركات
             numbofturns = 0;
             step_Move(++stepdelay);
          }

          for(i=0; i<7; i++){PORTD=letter_M[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_i[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_c[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_R[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_O [i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_P[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_Rr[i]; delay_us(300);}
          PORTD=0;

        }
}

و ما توفيقى الا بالله

و لا حول و لا قوة الا بالله

اعلانات

hassan.pic
:: مهندس متميز ::
تاريخ التسجيل: Aug 2016
المشاركات: 300
نشاط [ hassan.pic ]
قوة السمعة:
قديم 05-11-2016, 03:36 PM المشاركة 426   
افتراضي


السلام عليكم اخي العزيز ، قمت بتجريب الكود والنتيجة كانت ، الحرف يقفز عمود واحد ثم يعود مكانة فورا وهكذا بدون اي حركة يشبه flipfop ، وكلما قلت عن 10 زادت سرعة القفز، حياك الله

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

hassan.pic
:: مهندس متميز ::
تاريخ التسجيل: Aug 2016
المشاركات: 300
نشاط [ hassan.pic ]
قوة السمعة:
قديم 05-11-2016, 05:01 PM المشاركة 427   
افتراضي


حياك الله اخي العزيز، بعدما جربت الكود وبعثتلك الكود ، قمت وتفحصت الكود علي حسب امكانياتي البسيطة وقمت بحذف numbofturns=0 اللتي في الاسفل وجربت الكود والنتيجة ههههههه تحركت الاحرف بطريقة رائعة ولو انها بطيئة قليلا وعند اكتمال الدائرة وبداية دورة جديدة بدأت بالوميض وتدور نصف دائرة وتعود لحركتها الطبيعية وهنا انقطعت الكهرباء واوقفت العمل ، والباقي عليك استاذي العظيم ، بارك الله فيك فلولاك لما وصلت الي هنا ، حياك الله ياطيب


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 05-11-2016, 09:06 PM المشاركة 428   
sun


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته
فتح الله عليك ما لاحظته و ما غيرته بفضل الله نبهنى لتغيير جزء , عذرا ليس عندى مشروع لاجربه .

توكل على الحى الذى لا يموت و جرب :
يمكنك تغيير قيمة الرقم الموجود بالسطر الاحمر بالزيادة و النقصان

كود:
char i = 0 ;
char stepdelay = 0;
unsigned int  numbofturns = 0;

void step_Move(char step){
 for (i=0; i< step; i++){
     delay_us(300);       //  غير هذه القيمة لتغيير المسافة التى يتحركها الحرف ان شاء الله
 }
}
char letter_M[] = {0xfe,0xfe,0x60,0x30,0x60,0xfe,0xfe};
char letter_i[] = { 0x00,0x82,0xfe,0xfe,0x82,0x00,0x00};
char letter_c[] = { 0x38,0x7c,0xc6,0x82,0x82,0xc6,0x44};
char letter_R[] = {0x82,0xfe,0xfe,0x98,0x9c,0xf6,0x62};
char letter_O[] = {0X38,0X7C,0XC6,0X82,0XC6,0X7C,0X38};
char letter_p[] = { 0x82,0xfe,0xfe,0x92,0x90,0xf0,0x60};
char letter_Rr[] = { 0x82,0xfe,0xfe,0x98,0x9c,0xf6,0x62};

void main() {
DDRD = 0XFF;
PORTD = 0;
DDRB = 0XFD;
PORTB = 2;
while(1){
          while(PINB & 0x02){}
          numbofturns++;
          if (numbofturns > 10) {   // غير هذه القيمة لتغيير الزمن بين الحركات
             numbofturns = 0;
             stepdelay++;
          }
          step_Move(stepdelay);
          
          for(i=0; i<7; i++){PORTD=letter_M[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_i[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_c[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_R[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_O [i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_P[i]; delay_us(300);}
          PORTD=0; delay_us(1200);

          for(i=0;i<7;i++){PORTD=letter_Rr[i]; delay_us(300);}
          PORTD=0;

        }
}
اذا حدث ومضات فى الدورة الثانية , فارجو ان تحسب زمن الدورة الواحدة , او عدد الاعمدة فيها .
و اذا عدلت قيم الاسطر بالاحمر ارجو ان ترسل لى قيم التعديل المناسبة .

و ما توفيقى الا بالله

و لا حول و لا قوة الا بالله




hassan.pic
:: مهندس متميز ::
تاريخ التسجيل: Aug 2016
المشاركات: 300
نشاط [ hassan.pic ]
قوة السمعة:
قديم 05-11-2016, 10:32 PM المشاركة 429   
افتراضي


السلام عليكم اخي العزيز مشتاق الله ، ساشرح لك بالتفصيل هاذا الكود المكتوب باللون الاحمر بين معي بالتجربة له علاقة بطول المسار الدائري كلما نقصت اdelay يقصر طول المسار الدائري وكلما زاد القيمة فوق 1000يتشوه شكل المسار ،وبالنسبة للكود التاني الذي في الاسفل مهمته سرعة حركة الحروف فكلما نقصت القميمة زادت السرعة والمطلوب من حضرتك لو سمحت ان تزكز عبقريتك وخبرتك في موضوع لماذا في اول دورة تكون الحروف رائعة وفي الدورة الثانية تومض الحروف وفي الدورة الثالثة تعود ممتازة ، ماهو هذا السر في الوميض ومن اين ياتي ومن المسوول عنه في هذا المشروع والمشروع السابق نفس المشكلة وبانتضار الرد الكريم من حضرتك لو تكرمت وانا كثير بتاسف علي الازعاج بدك تتحملني هههههه وكما يقال وصلت اللقمة للثم ، بارك الله في ودمت بالف خير


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 05-11-2016, 10:53 PM المشاركة 430   
افتراضي


السلام عليكم اخي العزيز مشتاق الله ، ساشرح لك بالتفصيل هاذا الكود المكتوب باللون الاحمر بين معي بالتجربة له علاقة بطول المسار الدائري كلما نقصت اdelay يقصر طول المسار الدائري وكلما زاد القيمة فوق 1000يتشوه شكل المسار ،وبالنسبة للكود التاني الذي في الاسفل مهمته سرعة حركة الحروف فكلما نقصت القميمة زادت السرعة والمطلوب من حضرتك لو سمحت ان تزكز عبقريتك وخبرتك في موضوع لماذا في اول دورة تكون الحروف رائعة وفي الدورة الثانية تومض الحروف وفي الدورة الثالثة تعود ممتازة ، ماهو هذا السر في الوميض ومن اين ياتي ومن المسوول عنه في هذا المشروع والمشروع السابق نفس المشكلة وبانتضار الرد الكريم من حضرتك لو تكرمت وانا كثير بتاسف علي الازعاج بدك تتحملني هههههه وكما يقال وصلت اللقمة للثم ، بارك الله في ودمت بالف خير
اذا حدث ومضات فى الدورة الثانية , فارجو ان تحسب زمن الدورة الواحدة , او عدد الاعمدة فيها .
و اذا عدلت قيم الاسطر بالاحمر ارجو ان ترسل لى قيم التعديل المناسبة .


hassan.pic
:: مهندس متميز ::
تاريخ التسجيل: Aug 2016
المشاركات: 300
نشاط [ hassan.pic ]
قوة السمعة:
قديم 05-11-2016, 11:01 PM المشاركة 431   
افتراضي


بارك الله فيك اخي العزيز ،علي سرعة الرد ، افضل قيم وضعتها الdelay في الاعلي وضعته 600 والدdelay في الاسفل وضعته 4 والحركة رائعة جدا في اول دوزة مع هذه القيم ونسيت انوه حضرتك الي نقطة اخري في الدورة الثانية تقل سرعة الاحرف اثناء الوميض ثم يعود كل شي تمام في الدورة الثالثة، ودمت بامان الله


مشتاق الله
:: مهندس متميز ::
تاريخ التسجيل: Oct 2015
المشاركات: 619
نشاط [ مشتاق الله ]
قوة السمعة:
قديم 06-11-2016, 12:49 AM المشاركة 432   
sun


بسم الله الرحمن الرحيم

السلام عليكم و رحمة الله و بركاته
توكل على الله :

كود:
void step_Move(char step);
char i = 0 , START_flag = 0 , RELOAD_flag = 0 ;
char stepdelay = 0;
unsigned int  numbofturns = 0;

char letter_M[] = {0xfe,0xfe,0x60,0x30,0x60,0xfe,0xfe};
char letter_i[] = { 0x00,0x82,0xfe,0xfe,0x82,0x00,0x00};
char letter_c[] = { 0x38,0x7c,0xc6,0x82,0x82,0xc6,0x44};
char letter_R[] = {0x82,0xfe,0xfe,0x98,0x9c,0xf6,0x62};
char letter_O[] = {0X38,0X7C,0XC6,0X82,0XC6,0X7C,0X38};
char letter_p[] = { 0x82,0xfe,0xfe,0x92,0x90,0xf0,0x60};
char letter_Rr[] = { 0x82,0xfe,0xfe,0x98,0x9c,0xf6,0x62};

void interrup() iv IVT_ADDR_PCINT0 ics ICS_AUTO {
 PCIFR.PCIF0 = 1;
 if ((PINB & 0X02) && (START_flag == 0) ) {START_flag = 1;}
 if ((PINB & 0X02) && (START_flag == 1) ) {RELOAD_flag = 1;}
}

void step_Move(char step){
 for (i=0; i< step; i++){
     delay_us(600);       //
 }
}

void main() {
DDRD = 0XFF;
PORTD = 0;
DDRB = 0XFD;
PORTB = 2;

SREG_I_bit = 1;
PCICR |= 1<<PCIE0;
PCMSK0 |= 1<<PCINT1;
while(1){ 
 if (START_flag == 1){
          numbofturns++;
          if (numbofturns == 4 ) {   //
             numbofturns = 0;
             stepdelay++;
          }
          step_Move(stepdelay);

          for(i=0; i<7; i++){PORTD=letter_M[i]; if (RELOAD_flag == 1) {PORTD = 0; break ;} delay_us(300);}
          if (RELOAD_flag == 1) {RELOAD_flag = 0; continue;}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_I[i]; if (RELOAD_flag == 1) {PORTD = 0; break ;} delay_us(300);}
          if (RELOAD_flag == 1) {RELOAD_flag = 0; continue;}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_C[i]; if (RELOAD_flag == 1) {PORTD = 0; break ;} delay_us(300);}
          if (RELOAD_flag == 1) {RELOAD_flag = 0; continue;}
          PORTD=0; delay_us(1200);

         for(i=0; i<7; i++){PORTD=letter_R[i]; if (RELOAD_flag == 1) {PORTD = 0; break ;} delay_us(300);}
          if (RELOAD_flag == 1) {RELOAD_flag = 0; continue;}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_O[i]; if (RELOAD_flag == 1) {PORTD = 0; break ;} delay_us(300);}
          if (RELOAD_flag == 1) {RELOAD_flag = 0; continue;}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_P[i]; if (RELOAD_flag == 1) {PORTD = 0; break ;} delay_us(300);}
          if (RELOAD_flag == 1) {RELOAD_flag = 0; continue;}
          PORTD=0; delay_us(1200);

          for(i=0; i<7; i++){PORTD=letter_Rr[i]; if (RELOAD_flag == 1) {PORTD = 0; break ;} delay_us(300);}
          if (RELOAD_flag == 1) {RELOAD_flag = 0; continue;}
          PORTD=0; delay_us(1200);
          
          START_flag = 0;

    }
 }
}
و ما توفيقى الا بالله


و لا حول و لا قوة الا بالله






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