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

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

الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:94
قديم 06-09-2009, 12:52 PM المشاركة 1   
Thumbs up التحكم فى 80 جهاز(اكثر من جهاز فى نفس الوقت) بميكرو واحد من الكمبيوتر Twitter FaceBook Google+



الحمد لله رب العالمين
بعد عرض الاخ الفاضل المهندس احمد سمير لموضوع زيادة مخارج الميكرو
وباتفاق معه تم تصميم هذا البرنامج بواسطتى
فبهذا البرنامج يمكنك التحكم فى اكثر من 80 جهاز(ريليه) فى نفس الوقت
بمعنى انك يمكنك التحكم فى بيتك بالكامل من هذا البرنامج
وهذة هى صور البرنامج







قريبا باذن الله شرح للبرنامج وكود الميكرو سى وكود السى شارب
شرح فديو للدائرة ومشاهدة البرنامج يعمل ويتحكم بها
http://www.teradepot.com/d3xxkedl7m8...oller.rar.html
مهندس احمد عبدالكريم

كود الميكروسى
كود:
char text[80];
char x,i;
void main()
{
trisb=0;
portb=0;
UART1_Init(9600);
i=0;
while(1){
      if(UART1_Data_Ready()){
      text[i]= UART1_Read();
      i++;
      if(i==80){
          i=0;
for(x=0;x<80;x++)
                 {
                 portb.f0=text[x];
                 portb.f1=0;portb.f1=1;
                 }
                 
portb.f2=0;portb.f2=1;}
}
}
}
كود السى شارب
كود:
using NationalInstruments;
using NationalInstruments.UI;
using NationalInstruments.UI.WindowsForms;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO.Ports;

namespace WindowsApplication6
{
    public partial class Form1 : DevComponents.DotNetBar.Office2007Form
    {
        System.IO.StreamWriter ob;
        System.IO.StreamReader rd;
        delegate void SetTextCallback(string text);
        string InputData = String.Empty;
        SerialPort port;
        public Form1()
        { 
            InitializeComponent();
            Switche.Enabled = false;
            string[] ports = SerialPort.GetPortNames();
            foreach (string port1 in ports)
            {
                coms.Items.Add(port1);
            }
           
        }
//==========================================================================
        //Convert bool To String
//==========================================================================
        public String convBoolToString(bool[] a ,bool[] b,bool [] c,bool[] d,bool[] e)
        {
            string s = null;
            foreach (bool l in a)
            {
                if (l == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool m in b)
            {
                if (m == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool n in c)
            {
                if (n == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool o in d)
            {
                if (o == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool p in e)
            {
                if (p == true) { s = 1+s; }
                else s = 0+s;

            }
            
            return s;
        }
//============================================================================
        //Convert String to Bool
//============================================================================
        public bool[] convStringToBool(string k)
        {
            char[] f = k.ToCharArray();
            bool[] p=new bool[8];
            int a=0;
            foreach (char l in f)
            {
                if (l == '0')
                {
                    p[a] =false;
                }
                else
                {
                    p[a] = true;
                }
                a++;
            }
            return p;
        }
/*//==============================================================================
        //Convert byte to Array of bits
//==============================================================================
        public string convByteToBits(byte b)
        {
            int t;
            string g=String.Empty;
            for (t = 128; t > 0; t = t / 2) 
            {
                if ((b & t) != 0) g += "1";
                if ((b & t) == 0) g += "0";
            }
            return g;
        }*/
/*//==============================================================================
        //Recive Data From Serial
//==============================================================================

        private void SetText(string text)
        {
            rvalue.Clear();
            // InvokeRequired required compares the thread ID of the
            // calling thread to the thread ID of the creating thread.
            // If these threads are different, it returns true.
            if (this.rvalue.InvokeRequired)
            {
                SetTextCallback d = new SetTextCallback(SetText);
                this.Invoke(d, new object[] { text });

            }

            else

                try
                {
                    //int  r = int.Parse(text);
                    byte o = byte.Parse(text);
                    this.rvalue.Text = text;
                    
                }
                catch (System.Exception ex)
                {
                    Reaceiv();
                }
        }

        private void Reaceiv()
        {
            InputData = "";
            InputData = port.ReadExisting();
            if (InputData != String.Empty)
            {
                SetText(InputData);
            }

        }
//==================================================================================================*/
        private void s_ValuesChanged(object sender, EventArgs e)
        {
            //Console.Write("" + convStringToBool(convBoolToString(s.GetValues())));
         port.Write(convBoolToString(s.GetValues(), s1.GetValues(), s2.GetValues(), s3.GetValues(), s4.GetValues()));
          //  Console.WriteLine(convBoolToString(s.GetValues(), s1.GetValues(), s2.GetValues(), s3.GetValues(), s4.GetValues(), s5.GetValues()));
           // port.Write("111111111111111111111111");
        }

       private void timer1_Tick(object sender, EventArgs e)
        {
            //port.Write(convBoolToString(s.GetValues()));
           
        }

        private void buttonX1_Click(object sender, EventArgs e)
        {
            port = new SerialPort(coms.Text, 9600, Parity.None, 8, StopBits.One);
            if (port.IsOpen) port.Close();
            try
            {
                //open serial port
                port.Open();
            }
            catch (System.Exception ex)
            {
                if (port.IsOpen) port.Close();
            }
       
            Switche.Enabled = true;
            timer1.Start();
        }

        private void buttonItem1_Click(object sender, EventArgs e)
        {
            port = new SerialPort(coms.Text, 9600, Parity.None, 8, StopBits.One);
            if (port.IsOpen) port.Close();
            try
            {
                //open serial port
                port.Open();
            }
            catch (System.Exception ex)
            {
                if (port.IsOpen) port.Close();
            }
           
            Switche.Enabled = true;
            timer1.Start();
        }

        private void s1_ValuesChanged(object sender, EventArgs e)
        {
           port.Write(convBoolToString(s.GetValues(), s1.GetValues(), s2.GetValues(), s3.GetValues(), s4.GetValues()));
          
        }

        private void s2_ValuesChanged(object sender, EventArgs e)
        {
           port.Write(convBoolToString(s.GetValues(), s1.GetValues(), s2.GetValues(), s3.GetValues(), s4.GetValues()));
        }

        private void s3_ValuesChanged(object sender, EventArgs e)
        {
           port.Write(convBoolToString(s.GetValues(), s1.GetValues(), s2.GetValues(), s3.GetValues(), s4.GetValues()));
        }

        private void s4_ValuesChanged(object sender, EventArgs e)
        {
           port.Write(convBoolToString(s.GetValues(), s1.GetValues(), s2.GetValues(), s3.GetValues(), s4.GetValues()));
        }

        private void s5_ValuesChanged(object sender, EventArgs e)
        {
          
        }
    }
}


التعديل الأخير تم بواسطة : sheimy بتاريخ 07-09-2009 الساعة 05:25 PM
اعلانات

الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:94
قديم 06-09-2009, 10:33 PM المشاركة 2   
Thumbs up شرح كود الربط بين السى شارب والميكروكنترولر


بسم الله الرحمن الرحيم
بداية لعمل اتصال بالسريال بورت نعمل الاتى
نعرف بورت جديد
كود:
SerialPort port;
ثم
كود:
string[] ports = SerialPort.GetPortNames();
            foreach (string port1 in ports)
            {
                coms.Items.Add(port1);
            }
وذلك لاكتشاف جميع السريال بورت الموجودة فى الجهاز ووضعها فى قائمة منسدلة تسمى coms

والان لفتح بورت معين (طبعا البورت اللى متوصل بيه الميكرو)
نستخدم هذا الامر
كود:
private void buttonX1_Click(object sender, EventArgs e)
        {
            port = new SerialPort(coms.Text, 9600, Parity.None, 8, StopBits.One);
            if (port.IsOpen) port.Close();
            try
            {
                //open serial port
                port.Open();
            }
            catch (System.Exception ex)
            {
                if (port.IsOpen) port.Close();
            }
       
            Switche.Enabled = true;
            timer1.Start();
        }
والان لننظر الى ما يعنيه الكود
coms.Text
هو اسم البورت الذى يحدده المستخدم للاتصال بالميكرو من القائمة coms

9600
معدل نقل الداتا ولابد ان يكون معدل استلام الميكرو هو نفس الرقم حتى يتم استلام الداتا

الباقى Parity.None, 8, StopBits.One
هى اشياء ثابتة ولكن لابد ان تكون هكذا لان الميكرو يستلم بها

بعد عمل هذا يتم فتح البورت من الامر
كود:
 port.Open();
بعد فتح البورت ناتى لعملية نقل الداتا

كما هو واضح فى الصورة ان هناك عدد من السوتشات(المفاتيح) والتى اما ان تكون On او تكون Off بمعنى ان المفتاح اما ان يكون true او false


ولكن يتم ارسال البيانات الى الميكرو ك String لذلك لابد من تحويل من
boolean
الى String ولعمل ذلك نستخدم هذة ال Method
كود:
//==========================================================================
        //Convert bool To String
//==========================================================================
        public String convBoolToString(bool[] a ,bool[] b,bool [] c,bool[] d,bool[] e)
        {
            string s = null;
            foreach (bool l in a)
            {
                if (l == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool m in b)
            {
                if (m == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool n in c)
            {
                if (n == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool o in d)
            {
                if (o == true) { s = 1+s; }
                else s = 0+s;

            }
            foreach (bool p in e)
            {
                if (p == true) { s = 1+s; }
                else s = 0+s;

            }
            
            return s;
        }
بعد اتمام عملية التحويل التى نستدعيها من هذا الامر والذى ينفذ عند الضغط على اى مفتاح من المفاتيح
كود:
private void s1_ValuesChanged(object sender, EventArgs e)
        {
           port.Write(convBoolToString(s.GetValues(), s1.GetValues(), s2.GetValues(), s3.GetValues(), s4.GetValues()));
          
        }
يتم ارسال البيانات الى الميكرو باستخدام الامر

port.Write
قريبا باذن الله نكمل الموضوع

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

http://www.teradepot.com/bzc78xxsx3l...roject.7z.html

مهندس احمد عبدالكريم


التعديل الأخير تم بواسطة : sheimy بتاريخ 08-09-2009 الساعة 04:08 PM
اعلانات اضافية ( قم بتسجيل الدخول لاخفائها )
  

أشرف الخطيب
:: مهندس متواجد ::
تاريخ التسجيل: Mar 2009
الدولة: مصــــــــــــــــــــــــــــــر
المشاركات: 195
نشاط [ أشرف الخطيب ]
قوة السمعة:0
قديم 06-09-2009, 10:53 PM المشاركة 3   
افتراضي


جزاك الله خيرا أخى الكريم المهندس الشيمى.... جهد مشكور وشرح مهم بارك الله فيك


الصورة الرمزية mohamedse
mohamedse
:: عضو ذهبي ::
تاريخ التسجيل: Aug 2008
الدولة: مصر الأسكندرية
المشاركات: 681
نشاط [ mohamedse ]
قوة السمعة:118
قديم 06-09-2009, 11:27 PM المشاركة 4   
افتراضي


السلام عليكم

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


الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:94
قديم 07-09-2009, 01:28 AM المشاركة 5   
افتراضي


السلام عليكم

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

جزاك الله خيرا على مرورك الطيب


الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:94
قديم 07-09-2009, 01:31 AM المشاركة 6   
افتراضي


جزاك الله خيرا أخى الكريم المهندس الشيمى.... جهد مشكور وشرح مهم بارك الله فيك
شكرا لك اخى

اللهم انفعنا بما علمتنا


الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:94
قديم 07-09-2009, 02:41 AM المشاركة 7   
افتراضي


شرح فديو للدائرة ومشاهدة البرنامج يعمل ويتحكم بها
http://www.teradepot.com/d3xxkedl7m8...oller.rar.html


الصورة الرمزية sheimy
sheimy
:: عضو ذهبي ::
تاريخ التسجيل: Jul 2009
الدولة: Egypt
المشاركات: 789
نشاط [ sheimy ]
قوة السمعة:94
قديم 08-09-2009, 04:06 PM المشاركة 8   
افتراضي



إضافة رد

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

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

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


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

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