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

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

الصورة الرمزية حسن هادي محمود
حسن هادي محمود
:: عضو ذهبي ::
تاريخ التسجيل: Sep 2012
الدولة: العراق /البصره
المشاركات: 2,688
نشاط [ حسن هادي محمود ]
قوة السمعة:135
قديم 14-10-2013, 04:11 PM المشاركة 1   
افتراضي control for speed mptor by RS485 Twitter FaceBook Google+



سلام عليكم
يطيب لي بمناسبة حلول عيد الاضحى المبارك
ان ازف لكم اطيب التهاني واجمل التبريكات داعيا الله العزيز الرحيم ان يحفظكم وعوائلكم من كل مكروه ، وان يعيد هذا العيد علينا وعليكم ، بالخير واليمن والبركات


وكل عام وانتم بالف خير


اليكم هذا مشروع البسيط يوضح فيها كيف تعمل مكتبه RS485
اذا تم ضغط على سويج تزداد سرعه ماطور
سويج موجود عند master وماطور موجود عند slave
ملاحظه لم اربط مع ماطور ترانزستور انما فقط لغرض محاكاه
علما ان الاتصال من نوع RS485 أتعبني كثير وأخير وجدت مشكله ولكن لحد الان انا لاأعرف سر كود (( موجود بلون أحمر)) يكون هذا مع ماستر فقط وبدونه لايرسل ولايستقبل أطلاقا
كود ماستر
كود:
#define sw               porta.f0
#define sw_dir          trisa.f0
#define error           portb.f4
#define error_dir       trisb.f4
#define led              portb.f3
#define led_dir         trisb.f3
#define led_recive      portb.f5
#define led_recive_dir  trisb.f5
#define pressed         0
#define off             0
#define on              1
#define is              ==
sbit  rs485_rxtx_pin  at Rb0_bit;               // set transcieve pin
sbit  rs485_rxtx_pin_direction at TRISb0_bit;   // set transcieve pin direction
//************************************************************************////
char dat[7];// buffer for receving/sending messages
char kk=0;
unsigned int cnt=0;
////***********************************************************************////
void send_data();
void init_pic()
{
  cmcon=7;
  UART1_Init(9600);                  // initialize UART1 module
  Delay_ms(100);
  RS485Master_Init();// initialize MCU as Maste
  dat[4] = 0;                        // ensure that message received flag is 0
  dat[5] = 0;                        // ensure that message received flag is 0
  dat[6] = 0;                        // ensure that error flag is 0
  RCIE_bit = 1;                      // enable interrupt on UART1 receive
  TXIE_bit = 0;                      // disable interrupt on UART1 transmit
  PEIE_bit = 1;                      // enable peripheral interrupts
  GIE_bit = 1;                       // enable all interrupts
  sw_dir=1;
  led_dir=0;
  led=0;
}
void main()
{
 init_pic();
 delay_ms(100);
 trisb=2;
 while(1)
    {
     if( sw is pressed)
        {
         delay_ms(250);
         dat[0]=dat[0]+5;
         if (dat[0]>250)dat[0]=0;
         kk=0;
         send_data();
        
        }
    
    }
}
void send_data()
{
 while (1)
   {
    cnt++;
    led=on;
    delay_us(100);
    led=off;
    if (dat[5]==255)  // if an error detected, signal it
         {
         error=on;
         return;
         }
    if (dat[4]==255)
        {                      // if message received successfully
          dat[4] = 0;  // clear message received flag
          cnt=0;
          error=~error;
          kk=1;
          delay_ms(1);
           RS485Master_Send(dat,1,10);     // send back to master
           return;
        }
    if(cnt>1000&&kk==0)
       {
        cnt=0;
       RS485Master_Send(dat,1,10);
       return;
       }
  }

}
**********************************************
كود خادم slave
كود:
#define error       portb.f4
#define error_dir  trisb.f4
#define led_recive  portb.f5
#define led_recive_dir  trisb.f5
#define off         0
#define on          1
#define is          ==

sbit  rs485_rxtx_pin  at Rb0_bit;               // set transcieve pin
sbit  rs485_rxtx_pin_direction at TRISb0_bit;   // set transcieve pin direction
//************************************************************************////
char dat[6];// buffer for receving/sending messages
char select=0;
////***********************************************************************////
void RS485(char slave);
void init_pic()
{
  cmcon=7;
  UART1_Init(9600);                  // initialize UART1 module
  Delay_ms(100);
 RS485Slave_Init(10);              // Intialize MCU as slave, address 10
  PWM1_Init(1000);
  dat[4] = 0;                        // ensure that message received flag is 0
  dat[5] = 0;                        // ensure that message received flag is 0
  dat[6] = 0;                        // ensure that error flag is 0

  RCIE_bit = 1;                      // enable interrupt on UART1 receive
  TXIE_bit = 0;                      // disable interrupt on UART1 transmit
  PEIE_bit = 1;                      // enable peripheral interrupts
  GIE_bit = 1;                       // enable all interrupts

 error_dir=0;
 error=off;
}
//***************************************************************************//
void interrupt()
{
 RS485Slave_Receive(dat);
}
void main() 
{
 init_pic();
 delay_ms(100);
 while(1)
   {
    PWM1_Start();
    PWM1_Set_Duty(dat[0]);
   }
}

http://arabsh.com/files/0c374d4e65fa...rs485-rar.html


التعديل الأخير تم بواسطة : حسن هادي محمود بتاريخ 14-10-2013 الساعة 04:15 PM
اعلانات
إضافة رد

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

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

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


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

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