في هذا البرنامج التعليمي ، سنقوم بإنشاء اتصال تسلسلي بين متحكمات ATMEGA8. الاتصال الذي تم إنشاؤه هنا هو نوع UART (جهاز استقبال غير متزامن عالمي). من خلال هذا الاتصال التسلسلي ، يمكن مشاركة بيانات الاتصال بين اثنين من وحدات التحكم الدقيقة ، وهو أمر مطلوب في أنظمة مضمنة مختلفة.
المكونات مطلوبة
الأجهزة: ATMEGA8 (قطعتان) ، مصدر طاقة (5 فولت) ، مبرمج AVR-ISP ، مكثف 100 فائق التوهج (متصل عبر مزود الطاقة) ، مقاوم 1KΩ (قطعتان) ، LED ، زر.
البرنامج: Atmel studio 6.1، progisp or flash magic.
مخطط الدائرة وشرحها
دعونا نفهم الاتصال التسلسلي في ميكروكنترولر AVR. هنا ترسل ATMEGA البيانات إلى ATMEGA الأخرى بالتسلسل. لديها طريقة اتصال أخرى ولكن لسهولة الاتصال نحن نختار RS232. يتم توصيل دبوس RS232 الخاص بأول ATMEGA8 بدبوس RXD الخاص بـ ATMEGA8 الثاني.
تمت برمجة اتصالات البيانات المنشأة بحيث تحتوي على:
- ثماني بتات بيانات
- بتات توقف
- لا بت تحقق التكافؤ
- معدل الباود 2400 BPS (بت في الثانية)
- اتصال غير متزامن (لا توجد مشاركة على مدار الساعة بين جهازي ATMEGA8)
لذلك لدينا اثنين من السجلات المحددة لاثنين من ATMEGA8 بشكل مختلف ، حيث يعمل أحدهما بمثابة TRANSMITTER ويعمل الآخر كمستقبل.
الآن بالنسبة لواجهة RS232 بين اثنين من وحدات التحكم الدقيقة ATmega ، يجب أن تكون الميزات التالية راضية عن جهاز الإرسال والاستقبال:
1. يجب تمكين دبوس TXD (ميزة استقبال البيانات) لوحدة التحكم الأولى من أجل جهاز الإرسال ويجب تمكين دبوس RXD الخاص بوحدة التحكم الثانية لجهاز الاستقبال.
2. نظرًا لأن الاتصال تسلسلي ، نحتاج إلى معرفة متى يتم استلام بايت البيانات ، حتى نتمكن من إيقاف البرنامج حتى يتم استلام البايت الكامل. يتم ذلك عن طريق تمكين تلقي البيانات مقاطعة كاملة.
3. يتم إرسال البيانات واستلامها إلى وحدة التحكم في وضع 8 بت. لذلك سيتم إرسال حرفين إلى وحدة التحكم في كل مرة.
4. لا توجد بتات تعادل ، بت توقف واحد في البيانات المرسلة بواسطة الوحدة.
يتم تعيين الميزات المذكورة أعلاه في سجلات وحدة التحكم ؛ سنناقشها بإيجاز ،
رمادي داكن (UDRE): (TRASMITTER SIDE) لم يتم ضبط هذا البت أثناء بدء التشغيل ولكنه يُستخدم أثناء العمل للتحقق مما إذا كان جهاز الإرسال جاهزًا للإرسال أم لا. انظر البرنامج على TRASMITTER SIDE لمزيد من التفاصيل.
رمادي فاتح (RXC): (RECEIVING SIDE) لم يتم ضبط هذا البت أثناء بدء التشغيل ولكنه يُستخدم أثناء العمل للتحقق مما إذا كان جهاز الاستقبال جاهزًا لاستقبال البيانات أم لا. انظر البرنامج على RECEIVING SIDE لمزيد من التفاصيل.
VOILET (TXEN): (TRASMITTER SIDE) تم ضبط هذا البت لتمكين دبوس جهاز الإرسال على جانب TRASMITTER.
RED (RXEN): (RECEIVING SIDE) يمثل هذا البت ميزة استلام البيانات ، ويجب تعيين هذا البت للبيانات من الوحدة التي سيتم استلامها بواسطة وحدة التحكم ، كما أنها تتيح دبوس RXD لوحدة التحكم.
BROWN (RXCIE): يجب تعيين هذا البت للحصول على مقاطعة بعد استقبال البيانات بنجاح. من خلال تمكين هذا الشيء ، نتعرف بعد تلقي بيانات 8 بت مباشرة. لن نستخدم هذه القطعة هنا لذا تُترك وحدها.
PINK (URSEL): يجب تعيين هذا البت قبل تمكين وحدات البت الأخرى في UCSRC ، بعد تعيين البتات الأخرى المطلوبة في UCSRC ؛ يجب تعطيل URSEL أو وضعه على الصفر. لن نستخدم هذه القطعة هنا لذا تُترك وحدها.
الأصفر (UCSZ0، UCSZ1، UCSZ2): (RECEIVING SIDE & TRASMITTER SIDE) تُستخدم هذه البتات الثلاثة لاختيار عدد بتات البيانات التي نستقبلها أو نرسلها دفعة واحدة.
يتم إنشاء الاتصال بين جهازي ATMEGA كاتصال ثماني بت. من خلال مطابقة الاتصال مع الجدول لدينا ، UCSZ0 و UCSZ1 إلى واحد و UCSZ2 إلى الصفر.
يجب أن نضع هذه على كل من جانبي الاستقبال والإرسال.
ORANGE (UMSEL): (RECEIVING SIDE & TRASMITTER SIDE) يتم ضبط هذا البت بناءً على ما إذا كان النظام يتصل بشكل غير متزامن (كلاهما يستخدم ساعة مختلفة) أو بشكل متزامن (كلاهما يستخدم نفس الساعة).
كلا وحدات التحكم لا تشترك في أي ساعة. لأن كلاهما يستخدم ساعة داخلية خاصة بهما. لذلك نحن بحاجة إلى ضبط UMSEL على 0 في كلا وحدتي التحكم.
GREEN (UPM1، UPM0): (تلقي الجانب وجانب جهاز التوجيه) يتم ضبط هاتين البتتين بناءً على تكافؤ البت الذي نستخدمه في الاتصال.
تمت برمجة ATMEGA لإرسال البيانات بدون تكافؤ ، نظرًا لأن طول نقل البيانات صغير ، يمكننا بوضوح توقع عدم فقدان البيانات أو الخطأ. لذلك نحن لا نضع أي تكافؤ هنا. لذلك قمنا بتعيين كل من UPM1 و UPM0 على الصفر أو تركهما ، لأن كل البتات تساوي 0 افتراضيًا..
BLUE (USBS): (RECEIVING SIDE & TRASMITTER SIDE) يستخدم هذا البت لاختيار عدد بتات التوقف التي نستخدمها أثناء الاتصال.
الاتصال الذي تم إنشاؤه هنا هو من النوع غير المتزامن ، لذلك للحصول على نقل واستقبال بيانات أكثر دقة ، نحتاج إلى استخدام بتات توقف ، ومن ثم قمنا بتعيين USBS على "1" في كلا وحدتي التحكم.
يتم تعيين معدل البث بالباود في وحدة التحكم عن طريق اختيار UBRRH المناسب.
يتم اختيار قيمة UBRRH عن طريق معدل الباود المرجعي المتقاطع وتردد بلورة وحدة المعالجة المركزية.
لذلك من خلال المرجع التبادلي ، يُنظر إلى قيمة UBRR على أنها "25" ، وبالتالي يتم تعيين معدل البث بالباود.
كما هو موضح في الدائرة ، يتم توصيل زر على جانب جهاز الإرسال. عند الضغط على هذا الزر ، يتم إرسال بيانات ثمانية بت بواسطة TRANSMITTER ويتم استلام هذه البيانات بواسطة جهاز الاستقبال. عند تلقي هذه البيانات بنجاح ، يقوم بتبديل مؤشر LED المتصل بها في وضع التشغيل والإيقاف ، مما يدل على نقل البيانات بنجاح بين جهازي تحكم.