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

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

فيصل الريامي
:: مهندس ::
تاريخ التسجيل: Dec 2018
المشاركات: 36
نشاط [ فيصل الريامي ]
قوة السمعة:0
قديم 04-05-2020, 12:46 AM المشاركة 1   
افتراضي مساعدة في التحكم ب DC Motor Twitter FaceBook Google+



مساء الخير اخواني الأعزاء..
كيف ممكن اعمل كنترول لل DC Motor بحيث اخليه يشتغل كل ساعتين لمدة 10 ثواني وبعدها يبند عن طريق الميكروكنترولر باستخدام ميكروسي ولكم جزيل الشكر..

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب مسلم11 ( أعجبته المشاركة )
اعلانات

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 08-05-2020, 04:06 AM المشاركة 2   
افتراضي


مساء الخير اخواني الأعزاء..
كيف ممكن اعمل كنترول لل DC Motor بحيث اخليه يشتغل كل ساعتين لمدة 10 ثواني وبعدها يبند عن طريق الميكروكنترولر باستخدام ميكروسي ولكم جزيل الشكر..
السلام عليكم ورحمه الله

مساء الخير عليك
اخي لم تحدد رقم الميكرو عموما اخترت لك ميكرو كنترولر مناسب

تفضل اخي الكريم اليك الكود والدائرة


كود:
  int X=0;

         void init_ports(void) 
       {
           TRISIO = 0; // set as output

       }

               void main() 
         {
              init_ports();
              GPIO = 0;
              delay_ms(1000);
         
            while(1) // infinite loop
          {

            for(X=0; X<120; X++ ){ delay_ms(60000); } 

            GPIO = 1;
            delay_ms(10000);

            GPIO = 0;
            delay_ms(1);

          }
        }



احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب مسلم11 ( أعجبته المشاركة )
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

فيصل الريامي
:: مهندس ::
تاريخ التسجيل: Dec 2018
المشاركات: 36
نشاط [ فيصل الريامي ]
قوة السمعة:0
قديم 08-05-2020, 09:02 AM المشاركة 3   
افتراضي


السلام عليكم ورحمه الله

مساء الخير عليك
اخي لم تحدد رقم الميكرو عموما اخترت لك ميكرو كنترولر مناسب

تفضل اخي الكريم اليك الكود والدائرة


كود:
  int X=0;

         void init_ports(void) 
       {
           TRISIO = 0; // set as output

       }

               void main() 
         {
              init_ports();
              GPIO = 0;
              delay_ms(1000);
         
            while(1) // infinite loop
          {

            for(X=0; X<120; X++ ){ delay_ms(60000); } 

            GPIO = 1;
            delay_ms(10000);

            GPIO = 0;
            delay_ms(1);

          }
        }



وعليكم السلام اخي العزيز مهندس عبدلله..
شكرا جزيلا طريقه جيده..
انا كنت أريد طريقه أخرى اذا ممكن بدون مايأثر زمن التأخير على البرنامج الرئيسي للميكروكنترولر اي باستخدام المقاطعات اذا ممكن وبدون التعليمه delay_ms.

شكرا لوقتك اخي الكريم وفي ميزان حسناتك في هذا الشهر الفضيل

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب مسلم11 ( أعجبته المشاركة )

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 08-05-2020, 08:27 PM المشاركة 4   
افتراضي


وعليكم السلام اخي العزيز مهندس عبدلله..
شكرا جزيلا طريقه جيده..
انا كنت أريد طريقه أخرى اذا ممكن بدون مايأثر زمن التأخير على البرنامج الرئيسي للميكروكنترولر اي باستخدام المقاطعات اذا ممكن وبدون التعليمه delay_ms.

شكرا لوقتك اخي الكريم وفي ميزان حسناتك في هذا الشهر الفضيل
تمام معني كلامك انك تريد كود الإنتظار يكون فرعي لأن هناك مهام أخري للميكرو..
حسنا سوف انشئ كود جديد

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب مسلم11 ( أعجبته المشاركة )

فيصل الريامي
:: مهندس ::
تاريخ التسجيل: Dec 2018
المشاركات: 36
نشاط [ فيصل الريامي ]
قوة السمعة:0
قديم 08-05-2020, 08:37 PM المشاركة 5   
افتراضي


تمام معني كلامك انك تريد كود الإنتظار يكون فرعي لأن هناك مهام أخري للميكرو..
حسنا سوف انشئ كود جديد
نعم استاذ عبدلله بالضبط شكرا جزيلا

احصائية الشكر والاعجاب - 0 شكراً, 0 عدم اعجاب, 1 اعجاب
اعجاب مسلم11 ( أعجبته المشاركة )

الصورة الرمزية عبدالله حجازى
عبدالله حجازى
:: عضو ذهبي ::
تاريخ التسجيل: Apr 2011
الدولة: مصر .. محافظة دمياط
المشاركات: 1,688
نشاط [ عبدالله حجازى ]
قوة السمعة:111
قديم 10-05-2020, 11:44 PM المشاركة 6   
افتراضي


السلام عليكم ورحمه الله

اولا أخي هذا كود لتفعيل التايمر الداخلي للميكرو اللذي جاء في المشاركه اعلاه وهوا

Pic12f675

كود:
  
            unsigned int ADC_LUX, ADC_ADJ;
unsigned long int TCOUNT;
unsigned short int var1,var2,var3;

// Interrupt Handler
void interrupt()
{
  // Timer0 Interrupt - Freq = 15.26 Hz - Period = 0.065536 seconds
  if (INTCON.TMR0IF == 1) // timer 0 interrupt flag
  {
    TCOUNT = TCOUNT + 1;
    if (TCOUNT == 100000) //332300 COUNT EQUALS TO 8 HOURS
    TCOUNT = 0;
   // GPIO.GP4 = ~GPIO.GP4; // Toggle PORTB bit0 LED
    INTCON.TMR0IF = 0; // clear the flag
    INTCON.TMR0IE = 1; // reenable the interrupt
    TMR0 = 0; // reset the timer preset count
  }



}


void main() {
ADC_Init();
ADCON0 = 0x00;
ANSEL = 0X03; // AN0 & AN1 CONFIGURED AS ANALOGUE INPUT
TRISIO = 0b00000011;
//GPIO = 0X00;
CMCON = 0x07;
var1 = 0;
var2 = 0;
var3 = 0;

//Timer0 Registers Prescaler= 256 - TMR0 Preset = 0 - Freq = 15.26 Hz - Period = 0.065536 seconds
OPTION_REG.T0CS = 0; // bit 5 TMR0 Clock Source Select bit...0 = Internal Clock (CLKO) 1 = Transition on T0CKI pin
OPTION_REG.T0SE = 0; // bit 4 TMR0 Source Edge Select bit 0 = low/high 1 = high/low
OPTION_REG.PSA = 0; // bit 3 Prescaler Assignment bit...0 = Prescaler is assigned to the Timer0
OPTION_REG.PS2 = 1; // bits 2-0 PS2:PS0: Prescaler Rate Select bits
OPTION_REG.PS1 = 1;
OPTION_REG.PS0 = 1;
TMR0 = 0; // preset for timer register


// Interrupt Registers
  INTCON = 0; // clear the interrpt control register
  INTCON.TMR0IE = 1; // bit5 TMR0 Overflow Interrupt Enable bit...1 = Enables the TMR0 interrupt
  INTCON.TMR0IF = 0; // bit2 clear timer 0 interrupt flag
  INTCON.GIE = 1; // bit7 global interrupt enable


while(1)
{

ADC_ADJ = ADC_READ(0);
ADC_ADJ = ADC_ADJ/1; // divide by 1 for maximum sensitivity * 10 bit resolution
ADC_LUX = ADC_Read(1);
ADC_LUX = ADC_LUX/1;



if (ADC_LUX <= 540 && var1 == 0)
{
GPIO.GP5 = 1;
TCOUNT = 0;
}

if (TCOUNT >= 980 || ADC_LUX >= 710)
{
GPIO.GP5 = 0;
var1 = 1;
}

if (ADC_LUX >= 710)
{
var1 = 0;
}




}
}
ان احببت اكمل علي هذا الميكرو
ولكن انت تقول أن توجد مهام أخري للميكرو لذالك سوف اختار ميكرو أقوي لكي يقوم بالمهمه
وهوا pic16f877a
ايضا لو انت ملتزم برقم ميكرو معين اخبرني به


تفضل اخي هذا طلبك


كود:
 
unsigned int X,A,DATA1,DATA2; //Timer0 //Prescaler 1:4; TMR0 Preload = 6; Actual Interrupt Time : 1 ms //Place/Copy this part in declaration section void InitTimer0(){ OPTION_REG = 0x81; TMR0 = 6; INTCON = 0xA0; } void Interrupt(){ if (TMR0IF_bit){ TMR0IF_bit = 0; TMR0 = 6; X++; if( X==60000 && A==0){ DATA1++; X=0; } if( DATA1==120 ){PORTB.F0=1; DATA2++; A=1; } if( DATA2==10000 ){PORTB.F0=0; DATA1=0; DATA2=0; X=0; A=0; } } } void main() { TRISB=0; PORTB=0; InitTimer0(); while(1){ //Enter your code here } }






في هذا الكود تم استخدام التايمر الداخلي دون أن يتعارض مع مهام البرنامج الأساسي

بالتوفيق أخي الكريم



فيصل الريامي
:: مهندس ::
تاريخ التسجيل: Dec 2018
المشاركات: 36
نشاط [ فيصل الريامي ]
قوة السمعة:0
قديم 11-05-2020, 02:31 AM المشاركة 7   
افتراضي


السلام عليكم ورحمه الله

اولا أخي هذا كود لتفعيل التايمر الداخلي للميكرو اللذي جاء في المشاركه اعلاه وهوا

Pic12f675

كود:
  
            unsigned int ADC_LUX, ADC_ADJ;
unsigned long int TCOUNT;
unsigned short int var1,var2,var3;

// Interrupt Handler
void interrupt()
{
  // Timer0 Interrupt - Freq = 15.26 Hz - Period = 0.065536 seconds
  if (INTCON.TMR0IF == 1) // timer 0 interrupt flag
  {
    TCOUNT = TCOUNT + 1;
    if (TCOUNT == 100000) //332300 COUNT EQUALS TO 8 HOURS
    TCOUNT = 0;
   // GPIO.GP4 = ~GPIO.GP4; // Toggle PORTB bit0 LED
    INTCON.TMR0IF = 0; // clear the flag
    INTCON.TMR0IE = 1; // reenable the interrupt
    TMR0 = 0; // reset the timer preset count
  }



}


void main() {
ADC_Init();
ADCON0 = 0x00;
ANSEL = 0X03; // AN0 & AN1 CONFIGURED AS ANALOGUE INPUT
TRISIO = 0b00000011;
//GPIO = 0X00;
CMCON = 0x07;
var1 = 0;
var2 = 0;
var3 = 0;

//Timer0 Registers Prescaler= 256 - TMR0 Preset = 0 - Freq = 15.26 Hz - Period = 0.065536 seconds
OPTION_REG.T0CS = 0; // bit 5 TMR0 Clock Source Select bit...0 = Internal Clock (CLKO) 1 = Transition on T0CKI pin
OPTION_REG.T0SE = 0; // bit 4 TMR0 Source Edge Select bit 0 = low/high 1 = high/low
OPTION_REG.PSA = 0; // bit 3 Prescaler Assignment bit...0 = Prescaler is assigned to the Timer0
OPTION_REG.PS2 = 1; // bits 2-0 PS2:PS0: Prescaler Rate Select bits
OPTION_REG.PS1 = 1;
OPTION_REG.PS0 = 1;
TMR0 = 0; // preset for timer register


// Interrupt Registers
  INTCON = 0; // clear the interrpt control register
  INTCON.TMR0IE = 1; // bit5 TMR0 Overflow Interrupt Enable bit...1 = Enables the TMR0 interrupt
  INTCON.TMR0IF = 0; // bit2 clear timer 0 interrupt flag
  INTCON.GIE = 1; // bit7 global interrupt enable


while(1)
{

ADC_ADJ = ADC_READ(0);
ADC_ADJ = ADC_ADJ/1; // divide by 1 for maximum sensitivity * 10 bit resolution
ADC_LUX = ADC_Read(1);
ADC_LUX = ADC_LUX/1;



if (ADC_LUX <= 540 && var1 == 0)
{
GPIO.GP5 = 1;
TCOUNT = 0;
}

if (TCOUNT >= 980 || ADC_LUX >= 710)
{
GPIO.GP5 = 0;
var1 = 1;
}

if (ADC_LUX >= 710)
{
var1 = 0;
}




}
}
ان احببت اكمل علي هذا الميكرو
ولكن انت تقول أن توجد مهام أخري للميكرو لذالك سوف اختار ميكرو أقوي لكي يقوم بالمهمه
وهوا pic16f877a
ايضا لو انت ملتزم برقم ميكرو معين اخبرني به


تفضل اخي هذا طلبك


كود:
 
unsigned int X,A,DATA1,DATA2; //Timer0 //Prescaler 1:4; TMR0 Preload = 6; Actual Interrupt Time : 1 ms //Place/Copy this part in declaration section void InitTimer0(){ OPTION_REG = 0x81; TMR0 = 6; INTCON = 0xA0; } void Interrupt(){ if (TMR0IF_bit){ TMR0IF_bit = 0; TMR0 = 6; X++; if( X==60000 && A==0){ DATA1++; X=0; } if( DATA1==120 ){PORTB.F0=1; DATA2++; A=1; } if( DATA2==10000 ){PORTB.F0=0; DATA1=0; DATA2=0; X=0; A=0; } } } void main() { TRISB=0; PORTB=0; InitTimer0(); while(1){ //Enter your code here } }






في هذا الكود تم استخدام التايمر الداخلي دون أن يتعارض مع مهام البرنامج الأساسي

بالتوفيق أخي الكريم


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

احصائية الشكر والاعجاب - 1 شكراً, 0 عدم اعجاب, 1 اعجاب
شكراً عبدالله حجازى ( شكر العضو على هذه المشاركة )
اعجاب عبدالله حجازى ( أعجبته المشاركة )
إضافة رد

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

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

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


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

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