الشرقاوي وافق
ربط متحكمات PIC مع شبكة Ethernet  613623
عزيزي الزائر / عزيزتي الزائرة يرجي التكرم بتسجبل الدخول اذا كنت عضو معنا
او التسجيل ان لم تكن عضو وترغب في الانضمام الي اسرة المنتدي
سنتشرف بتسجيلك
شكرا ربط متحكمات PIC مع شبكة Ethernet  829894
ادارة المنتدي ربط متحكمات PIC مع شبكة Ethernet  103798
الشرقاوي وافق
ربط متحكمات PIC مع شبكة Ethernet  613623
عزيزي الزائر / عزيزتي الزائرة يرجي التكرم بتسجبل الدخول اذا كنت عضو معنا
او التسجيل ان لم تكن عضو وترغب في الانضمام الي اسرة المنتدي
سنتشرف بتسجيلك
شكرا ربط متحكمات PIC مع شبكة Ethernet  829894
ادارة المنتدي ربط متحكمات PIC مع شبكة Ethernet  103798
الشرقاوي وافق
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.



 
الرئيسيةأحدث الصورالتسجيلدخول

 

 ربط متحكمات PIC مع شبكة Ethernet

اذهب الى الأسفل 
كاتب الموضوعرسالة
Admin
Admin
Admin
Admin


ذكر عدد المساهمات : 34923
نقاط : 158879
السٌّمعَة : 1074
تاريخ التسجيل : 14/05/2009
الموقع : http://www.autoformer.net/

ربط متحكمات PIC مع شبكة Ethernet  Empty
مُساهمةموضوع: ربط متحكمات PIC مع شبكة Ethernet    ربط متحكمات PIC مع شبكة Ethernet  Dc3srhibiyuaw8ppyxj6السبت يونيو 04 2011, 20:03

توجهت الأنظار مؤخرا إلى شبكات Ethernet بشكل كبير من قبل مصممي أنظمة التحكم و الأتمتة ، وذلك بسبب انتشارها على نطاق واسع ، فلا يكاد يخلو بناء منها (بالطبع في الدول المتقدمة) ، و استخدامها في هذه التطبيقات سيغني عن إنشاء شبكات كهربائية لأنظمة التحكم ..
سنتعلم في هذه الجولة طريقة ربط المتحكم PIC18F252 مع شبكة محلية LAN ، كما سنتعرف على كيفية استخدام أساليب التخاطب المختلفة UDP و TCP و غيرها لاستخدامها في تصميم الأنظمة الخاصة بنا ، أو تطوير الأنظمة الحالية ...
المسألة ليس فيها سوى سر واحد هو اختيار متحكم Ethernet مناسب ، لأن هذا المتحكم هو المسؤول عن استلام رزم المعطيات من الشبكة وتسليمها بشكلها الرقمي المجرد للمتحكم الصغري و بالعكس من المتحكم إلى الشبكة ، لذا فهو المسؤول عن سرعة الاتصال وبالتالي على تصميم المشروع بشكل عام .
في الحقيقة توجد الكثير من هذه المتحكمات ( أرجو التفريق بين متحكم Ethernet و المتحكم الذي يدير النظام PIC18F252 ) سأتحدث عن اثنين منهما جربتهما ثم فضلت أحدهم على الآخر وهما : المتحكم RTL8019AS من شركة Realtek و المتحكم ENC28J60 من شركة ربط متحكمات PIC مع شبكة Ethernet  -1 Microchip .
لن أخوض في المقارنة الفنية بين المتحكمين ، فقراءة الصفحات الأولى من النشرة الفنية لكل منهما ستعطي صورة واضحة عن ميزاتهما ، و بما أن المتحكمين يعملان بسرعة 10Mbps ، فالمقارنة ليست مجدية كثيرا ، وما سأفعله هو إجراء مقارنة تجريبية لما واجهته أثناء العمل على كل منهما من صعوبات و ما دعاني لتفضيل أحدهما على الآخر ، فلنبدأ ..
بدأت مشوار التخاطب مع الشبكات مع المتحكم RTL8019AS لأنه كان الوحيد الذي استطعت الحصول عليه ، فصممت دارة مطبوعة ونفذتها و أنجزت الاتصال مع المتحكم PIC16F877A ، لكنني واجهت صعوبات في الحصول على مكتبة للتخاطب مع هذا المتحكم ، فالمكتبة الموجودة في المترجم mikroC لم تعمل إطلاقا ، وتأكدت من ذلك من خلال منتدى الدعم الفني للشركة فانتقلت للمترجم C18 و استخدمت TCP/IP Stack الذي توفره ربط متحكمات PIC مع شبكة Ethernet  -1 Microchip بشكل مجاني ، فنجح العمل لكن ذاكرة البرنامج ذهب نصفها لإنجاز روتين اتصال عبر UDP فقط ، والقشة التي قصمت ظهر البعير بعد ذلك هي عدم توفر أقطاب كافية لإنجاز أي مشروع حقيقي لأن المتحكم RTL8019AS يحتاج إلى 16 قطب على الأقل ليعمل (8 للبيانات و 5 للعنونة و 3 للتحكم) فأوقفت العمل بعد هذه الصعوبات بالرغم من نجاح التجربة ، و هذه بعض الصور من بقايا هذه التجربة الدامية :


  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_realtek1.jpg_84daa1d19ecbc1a0066f5f9a900e65c1_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_realtek2.jpg_7ed8a12df7763e701082c237451029fe_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_realtek3.jpg_d4a7e76f5c22b844c461907e9a5bac50_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_realtek4.png_2fab5e481d7dfcbd7f4d5e9526b32c25_100x100_wm-1






تمكنت بعد ذلك من الحصول على المتحكم ENC28J60 بعد عناء طويل ، فأعدت الكرة و رسمت دارة مطبوعة وأنجزت العمل مرة أخرى لكن مع المتحكم PIC18F252 الذي يتمتع بذاكرة كبيرة نسبيا ، وجربت جميع البروتوكولات المتاحة UDP و TCP و ARP و ICMP ، وجربت الـ Web Server ، و تم العمل بشكل جيد هذه المرة دون صعوبات تذكر ، و إليكم بعض الصور :


  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_enc1.jpg_b3150d1930d24b485a3e51cf59ec3355_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_enc2.png_878bb442893ee177535ad2d66852b59c_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_enc3.jpg_30bbba3134791ef1e03d490eeb51e6ee_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_enc4.jpg_708804cb8c1ed34e5797e4ff964b3ac5_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_enc28j60.jpg_cfeecf96f85bf992f0efb2304ecb3d94_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_enc-pcb.png_87c3d3a836c15fb12b29c757907e94f9_100x100_wm-1
  • ربط متحكمات PIC مع شبكة Ethernet  Thumb_enc-sch.png_a5eac17a5038d65a48b539974e4b2180_100x100_wm-1






قبل أن أشرح عملية البرمجة ، أرجو ممن يقرأ هذه المقالة أن يشاهد المخطط النظري الموجود بالأعلى ، و هذه بعض الملاحظات التي قد توضح عمل الدارة بشكل أكبر :

  • الدارة المتكاملة ENC28J60 : هي محور هذه المقالة ، و هي عبارة عن متحكم Ethernet ، و هي بالمناسبة أصغر متحكم Ethernet في العالم حتى تاريخ كتابة هذه السطور ، يتم التخاطب مع هذه المتكاملة تسلسليا عبر مسرى ربط متحكمات PIC مع شبكة Ethernet  -1 SPI ، وهي تحتاج جهد تغذية مقداره 3.3 فولت و هزاز كريستالي تردده 25MHz ،و مداخلها متوافقة تماما مع سوية TTL المنطقية ( 5 فولت ) .
  • J0026D21E : ليست مجرد منفذ RJ-45 كما يلاحظ البعض ، فهي تحتوي إلى جانب ذلك على مرشحات خاصة للتعامل مع شبكات Ethernet ، و ثمنها يصل لعشرة أضعاف منفذ RJ-45 العادي !
  • الدارة المتكاملة 74HCT244 تعمل على تحويل مستوى الجهد لمخارج المتحكم ENC28J60 من 3.3 فولت إلى 5 فولت المناسب للمتحكم PIC18F252 .
  • منظم الجهد LM1117 لتأمين جهد التغذية 3.3 فولت للمتحكم ENC28J60 .

لندخل الآن في صلب الموضوع بعد هذه المقدمة المملة ، قد يتفاجأ البعض بمدى سهولة كتابة برنامج المتحكم PIC18F252 للتخاطب مع المتحكم ENC28J60 في mikroC ، و الهدف هذه المقالة هو شرح هذه العملية .
الجزء الأول من البرنامج هو تعريف بعض الثوابت :

  1. // duplex config flags
  2. #define Spi_Ethernet_HALFDUPLEX 0x00 // half duplex
  3. #define Spi_Ethernet_FULLDUPLEX 0x01 // full duplex

  4. const char httpHeader[] = "HTTP/1.1 200 OK\nContent-type: "; // HTTP header
  5. const char httpMimeTypeHTML[] = "text/html\n\n"; // HTML MIME type
  6. const char httpMimeTypeScript[] = "text/plain\n\n"; // TEXT MIME type


هذه الثوابت قد لا يعرفها سوى المختصون بالشبكات ، لذلك أرجو ألا تكون عقبة لمن ليس مختصا ، و باختصار ، أول تعريفين (Spi_Ethernet_HALFDUPLEX و Spi_Ethernet_FULLDUPLEX ) يخصان المكتبة ، و الثابت []httpHeader يحتوي على ترويسة HTTP اللازمة لعملية توليد الصفحات ، والثابتان التاليان يستخدمان لإخبار المتصفح عن نوع الملف الذي يستقبله ( html أو text ) .
الجزء التالي هو تعريف الصفحة التي سيتم توليدها من قبل المتحكم ، و هي مكتوبة بالطبع بلغة HTML ، و من لا يعرف هذه اللغة نهائيا أرجو منه تعلم أساسياتها ( قد لا تستغرق أكثر من يومين ) قبل إنجاز المشروع لأن العمل على هذه المشاريع بدون تعلم هذه اللغة كمن يخوض البحر بلا سفينة .

  1. // default html page
  2. char indexPage[] =
  3. "NoorTronics.net\
  4. NoorTronics Webserver

    \
  5. \
  6. \
  7. Heat Control\
  8. type="submit" value="ON">
  9. \
  10. \
  11. ";


هنا يتم تعريف بارامترات الشبكة : عنوان MAC و عنوان IP للمتحكم وللعبارة و لمزود DNS ، و قناع الشبكة الفرعية .

  1. // network parameters
  2. char myMacAddr[6] = {0x00, 0x14, 0xA5, 0x76, 0x19, 0x3f}; // my MAC address
  3. char myIpAddr[4] = {192, 168, 20, 60}; // my IP address
  4. char gwIpAddr[4] = {192, 168, 20, 6}; // gateway IP address
  5. char dnsIpAddr[4] = {192, 168, 20, 1}; // dns IP address
  6. char ipMask[4] = {255, 255, 255, 0}; // subnet mask
  7. // end network parameters
  8. unsigned char getRequest[20]; // HTTP request buffer


صار كل شيء جاهزا الآن ، سنستخدم التابع SPI_Ethernet_UserTCP لمعالجة رزم TCP ، و هذا التابع سيتم استدعاؤه بشكل آلي من قبل المكتبة عند اللزوم .
الجزء الأول من التابع يتم فيه تجاهل جميع الطلبات الموجهة إلى غير المنفذ 80 ، ثم تتم قراءة أول 15 محرف من الطلب ، ثم يتم اختبار نوع الطلب ورفض الجميع ما عدا طلبات GET ، يتم بعد ذلك إجراء عملية التحكم إن كانت موجودة ( في حالتنا هذه يتم التحكم بالطرف RB0 ) ، و من ثم التعديل على محتويات الصفحة و ألوانها و يعيد التابع القيمة len التي تعبر عن طول الرد ( عدد محارف الرزمة ) و الذي يحتوي على الصفحة التي ستظهر للمستخدم .

  1. unsigned int SPI_Ethernet_UserTCP( char *remoteHost, unsigned int remotePort,
  2. unsigned int localPort, unsigned int reqLength)
  3. {
  4. unsigned int len; // my reply length
  5. if(localPort != 80) return(0); // I listen only to web request on port 80

  6. // get 10 first bytes only of the request, the rest does not matter here
  7. for(len = 0 ; len < 15 ; len++) getRequest[len] = SPI_Ethernet_getByte();
  8. getRequest[len] = 0;

  9. if(memcmp(getRequest, "GET /", 5)) return(0); // only GET method

  10. if(!memcmp(getRequest+11, "ON", 2)) // do we have ON command
  11. PORTB.F0 = 1; // set PORTB bit0
  12. else
  13. if(!memcmp(getRequest+11, "OFF", 3)) // do we have OFF command
  14. PORTB.F0 = 0; // clear PORTB bit0

  15. if (PORTB.F0)
  16. {
  17. memcpy(indexPage+340, "#FFFF00", 6); // highlight (yellow) ON
  18. memcpy(indexPage+431, "#4974E2", 6); // clear OFF
  19. }
  20. else
  21. {
  22. memcpy(indexPage+340, "#4974E2", 6); // clear ON
  23. memcpy(indexPage+431, "#FFFF00", 6); // highlight (yellow) OFF
  24. }

  25. len = SPI_Ethernet_putConstString(httpHeader); // HTTP header
  26. len += SPI_Ethernet_putConstString(httpMimeTypeHTML); // with HTML MIME type
  27. len += SPI_Ethernet_putString(indexPage); // HTML page first part
  28. return len; // return to the library with the number of bytes to transmit
  29. }


هذا التابع مماثل للتابع السابق ، و يتم استدعاؤه عند استقبال رسائل عبر UDP من قبل المكتبة , لكننا لن نستخدمه الآن ، و كما تلاحظون فإنه يجيب على جميع رسائل UDP بالقيمة 0 ، أي أنه لا يجيب عمليا .

  1. unsigned int SPI_Ethernet_UserUDP( char *remoteHost, unsigned int remotePort,
  2. unsigned int destPort, unsigned int reqLength)
  3. {
  4. return 0; // back to the library with the length of the UDP reply
  5. }


هذا هو جسم البرنامج ، يتم فيه تهيئة المتحكم للعمل المناسب ، و هنا يتم إطفاء المبدل ADC و المقارنات Comparators و تهيئة الطرف RB0 كمخرج ، ثم تتم تهيئة منفذ ربط متحكمات PIC مع شبكة Ethernet  -1 SPI و تهيئة الاتصال بالمتحكم ENC28J60 ، ومن ثم إدخال إعدادات الشبكة للمتحكم ENC28J60 . كل هذ القسم سينفذ مرة واحدة فقط ، ثم سيدخل المتحكم في حلقة لا نهائية يتم خلالها استدعاء التابع SPI_Ethernet_doPacket الذي تولى المهمة برمتها .

  1. void main()
  2. {
  3. ADCON1 |= 0x0F ; // no analog inputs
  4. CMCON |= 0x07 ; // turn off comparators

  5. PORTB.F0 = 0;
  6. TRISB.F0 = 0; // set PORTB.B0 as output (rele control pin)

  7. // starts ENC28J60 with: reset bit on PORTC.F0, CS bit on PORTC.F1,
  8. // my MAC & IP address, full duplex
  9. Spi_Init();
  10. // full duplex, CRC + MAC Unicast + MAC Broadcast filtering
  11. Spi_Ethernet_Init (&PORTC, 0, &PORTC, 1,
  12. myMacAddr, myIpAddr, Spi_Ethernet_FULLDUPLEX) ;

  13. // dhcp will not be used here, so use preconfigured addresses
  14. SPI_Ethernet_confNetwork(ipMask, gwIpAddr, dnsIpAddr);

  15. while(1) { // do forever
  16. SPI_Ethernet_doPacket(); // process incoming Ethernet packets
  17. }
  18. }


صار بإمكاننا الآن التحكم بالطرف RB0 عن طريق المتصفح :

ربط متحكمات PIC مع شبكة Ethernet  Webserver
أرجو أن تكون هذه المقالة واضحة بما يكفي لفتح الباب أمام من يريد التعلم ، و أرجو ممن لديه أسئلة أن يطرحها و لايبخل بها علينا ، وتقبل الله منا ومنكم ..


المصدر
/www.noortronics.net
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://mathematiquecher.forumactif.com
 
ربط متحكمات PIC مع شبكة Ethernet
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» ربط متحكمات PIC مع شبكة Ethernet
» ربط متحكمات PIC مع شبكة Ethernet
» تخطيط المراحل الأربعة+كراسة الوضعيات+دليل الوضعيات +شبكة التمرير+شبكة التحقق+شبكة التصحيح
» تخطيط المراحل الأربعة+كراسة الوضعيات+دليل الوضعيات +شبكة التمرير+شبكة التحقق+شبكة التصحيح
» تخطيط المراحل الأربعة+كراسة الوضعيات+دليل الوضعيات +شبكة التمرير+شبكة التحقق+شبكة التصحيح

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
الشرقاوي وافق :: منتدى الرجل :: تعلم الاليكترونيك و الكهرباء-
انتقل الى: