سنقوم هنا بإنشاء اتصال بين متحكم ATmega8 و Arduino Uno. الاتصال الذي تم إنشاؤه هنا هو نوع UART (جهاز استقبال غير متزامن عالمي). إنه اتصال تسلسلي. من خلال هذا الاتصال التسلسلي ، يمكن مشاركة بيانات الاتصال بين وحدتي تحكم ، وهو أمر مطلوب في العديد من تطبيقات النظام المضمنة.
في الأنظمة المضمنة ، يجب أن يكون لدينا معرفة أساسية حول اتصالات النظام ، لذلك نقوم بهذا المشروع. سنناقش في هذا المشروع نظام الاتصال الأساسي وسنرسل بعض البيانات من المرسل إلى المستقبل بالتسلسل.
في هذا المشروع ، يعمل ATMEGA8 بمثابة جهاز إرسال ويعمل ARDUINO UNO كجهاز استقبال. في الاتصال التسلسلي ، سنرسل البيانات BIT BY BIT ، حتى يتم نقل BYTE من البيانات بالكامل. يمكن أن تكون البيانات بحجم 10 بت ولكننا سنحتفظ بـ 8 بت في الوقت الحالي.
المكونات مطلوبة
الأجهزة: ATMEGA8 ، ARDUINO UNO ، مزود الطاقة (5 فولت) ، مبرمج AVR-ISP ، مكثف 100 فائق التوهج (متصل عبر مزود الطاقة) ، مقاوم 1KΩ (قطعتان) ، LED ، زر.
البرنامج: Atmel studio 6.1، progisp or flash magic، ARDUINO NIGHTLY.
مخطط الدائرة وشرحها
قبل أن نناقش مخطط الدائرة والبرمجة لجهاز الإرسال والاستقبال ، نحتاج إلى فهم الاتصال التسلسلي. يرسل ATMEGA هنا البيانات إلى UNO في المسلسل كما تمت مناقشته سابقًا.
لديها طرق اتصال أخرى مثل اتصال MASTER SLAVE ، واتصال JTAG ولكن لسهولة الاتصال ، نختار RS232. هنا سنقوم بتوصيل رقم التعريف الشخصي TXD (المرسل) الخاص بـ ATMEGA8 بـ RXD (جهاز الاستقبال) PIN الخاص بـ ARDUINO UNO
تمت برمجة اتصالات البيانات المنشأة بحيث تحتوي على:
- ثماني بتات بيانات
- بتات توقف
- لا بت تحقق التكافؤ
- معدل الباود 9600 BPS (بت في الثانية)
- اتصال غير متزامن (لا توجد مشاركة على مدار الساعة بين ATMEGA8 و UNO (كلاهما لهما وحدات ساعة مختلفة))
لإنشاء UART بين Arduino Uno و ATMEGA8 ، نحتاج إلى برمجة الإعداد بدقة. لهذا نحتاج إلى الحفاظ على المعلمات المذكورة أعلاه كما هي في كلا الطرفين. في هذا واحد يعمل كإرسال وأعمال أخرى كجهاز استقبال. سنناقش كل إعدادات جانبية أدناه.
الآن بالنسبة لواجهة RS232 ، يجب استيفاء الميزات التالية لجانب جهاز الإرسال (ATMEGA8):
1. يجب تمكين دبوس TXD (ميزة استقبال البيانات) لجهاز التحكم الأول من أجل جهاز الإرسال.
2. نظرًا لأن الاتصال تسلسلي ، نحتاج إلى معرفة متى يتم استلام البيانات ، حتى نتمكن من إيقاف البرنامج حتى يتم استلام البايت الكامل. يتم ذلك عن طريق تمكين تلقي البيانات مقاطعة كاملة.
3. يتم إرسال البيانات واستلامها إلى وحدة التحكم في وضع 8 بت. لذلك سيتم إرسال حرفين إلى وحدة التحكم في كل مرة.
4. لا توجد بتات تعادل ، بت توقف واحد في البيانات المرسلة بواسطة الوحدة.
يتم تعيين الميزات المذكورة أعلاه في سجلات وحدة التحكم ؛ سنناقشها بإيجاز:
الرمادي الداكن (UDRE): لم يتم ضبط هذا البت أثناء بدء التشغيل ولكنه يُستخدم أثناء العمل للتحقق مما إذا كان جهاز الإرسال جاهزًا للإرسال أم لا. انظر البرنامج على TRASMITTER SIDE لمزيد من التفاصيل.
VOILET (TXEN): تم تعيين هذا البت لتمكين دبوس جهاز الإرسال على TRASMITTER SIDE.
الأصفر (UCSZ0 و UCSZ1 و UCSZ2): تُستخدم هذه البتات الثلاثة لاختيار عدد بتات البيانات التي نتلقاها أو نرسلها دفعة واحدة.
يتم إنشاء الاتصال بين جهازي SIDES كاتصال ثماني بت. من خلال مطابقة الاتصال مع الجدول لدينا ، UCSZ0 و UCSZ1 إلى واحد و UCSZ2 إلى الصفر.
ORANGE (UMSEL): يتم تعيين هذا البت بناءً على ما إذا كان النظام يتصل بشكل غير متزامن (كلاهما يستخدم ساعة مختلفة) أو بشكل متزامن (كلاهما يستخدم نفس الساعة).
كلا النظامين لا تشارك أي ساعة. لأن كلاهما يستخدم ساعة داخلية خاصة بهما. لذلك نحن بحاجة إلى ضبط UMSEL على 0 في كلا وحدتي التحكم.
GREEN (UPM1، UPM0): يتم ضبط هاتين البتتين بناءً على تكافؤ البت الذي نستخدمه في الاتصال.
تمت برمجة بيانات ATMEGA هنا لإرسال البيانات بدون تكافؤ ، نظرًا لأن طول نقل البيانات صغير ، يمكننا أن نتوقع بوضوح عدم فقدان البيانات أو الخطأ. لذلك نحن لا نضع أي تكافؤ هنا. لذلك قمنا بتعيين كل من UPM1 و UPM0 على الصفر أو تركهما ، لأن كل البتات تساوي 0 افتراضيًا.
BLUE (USBS): يستخدم هذا البت لاختيار عدد بتات التوقف التي نستخدمها أثناء الاتصال.
لقد أثبت الاتصال أنها من النوع غير المتزامن ، لذلك للحصول على نقل واستقبال بيانات أكثر دقة ، نحتاج إلى استخدام بتات توقف ، ومن ثم قمنا بتعيين USBS على "1" في جانب الإرسال.
يتم ضبط معدل البث بالباود في وحدة التحكم عن طريق اختيار UBRRH المناسب:
يتم اختيار قيمة UBRRH عن طريق معدل الباود المرجعي المتقاطع وتردد بلورة وحدة المعالجة المركزية:
لذلك من خلال المرجع التبادلي ، يُنظر إلى قيمة UBRR على أنها "6" ، وبالتالي يتم تعيين معدل الباود.
مع هذا أنشأنا إعدادات على جانب الإرسال ؛ سنتحدث عن تلقي الجانب الآن.
يمكن أن يتم تمكين الاتصال التسلسلي في UNO باستخدام أمر واحد.
|
يتم إجراء الاتصال الذي افترضنا إنشاءه بمعدل BAUD يبلغ 9600 بت في الثانية. لذلك لكي تنشئ UNO معدل البث بالباود هذا وبدء الاتصال التسلسلي ، نستخدم الأمر "Serial.begin (9600)؛". هنا 9600 هو معدل الباود وقابل للتغيير.
الآن كل شيء متروك في حالة تلقي البيانات ، أحدها يتم استلام البيانات بواسطة UNO ، وستكون متاحة لأخذها. يتم التقاط هذه البيانات عن طريق الأمر "Receiveddata = Serial.read ()؛". بواسطة هذا الأمر ، يتم نقل البيانات التسلسلية إلى عدد صحيح مسمى "البيانات المستلمة".
كما هو موضح في الدائرة ، يوجد زر متصل على جانب جهاز الإرسال ، عندما يتم الضغط على هذا الزر ، يتم إرسال بيانات ثمانية بت بواسطة TRANSMITTER (ATMEGA8) ويتم استلام هذه البيانات بواسطة RECEIVER (ARDUINO UNO). عند تلقي هذه البيانات بنجاح ، يقوم بتبديل مؤشر LED المتصل بها في وضع التشغيل والإيقاف ، لإظهار نقل البيانات بنجاح بين جهازي تحكم.
من خلال هذا الاتصال UART بين وحدة تحكم ATMEGA8 و ARDUINO UNO تم بنجاح.