في هذا المشروع ، سنقوم بتصميم منبه بسيط باستخدام مؤقتات ATMEGA32. يحتوي متحكم ATmega32A على مؤقت 16 بت ، وسنستخدم هذا المؤقت لعد الثواني وتطوير ساعة رقمية.
تحتوي جميع الساعات الرقمية على بلورة بداخلها وهي قلب الساعة. هذه البلورة ليست موجودة فقط في الساعة ولكنها موجودة في جميع أنظمة الوقت الحقيقي للحوسبة. تولد هذه البلورة نبضات على مدار الساعة ، وهي ضرورية لحسابات التوقيت. على الرغم من وجود بعض الطرق الأخرى للحصول على نبضات الساعة ، إلا أنه من أجل الدقة والتردد العالي ، يفضل معظمهم الساعة القائمة على الكريستال. سنقوم بتوصيل الكريستال بـ ATMEGA32 للحصول على ساعة دقيقة.
المكونات مطلوبة
الأجهزة: متحكم ATmega32 ، كريستال 11.0592MHz ، مكثف 22pF (قطعتان) ، مزود الطاقة (5 فولت) ، AVR-ISP PROGRAMMER ، JHD_162ALCD (شاشة LCD 16 × 2) ، مكثف 100 فائق التوهج (متصل عبر مزود الطاقة) ، أزرار (أربع قطع) ، مقاوم 10KΩ (ست قطع) ، مكثف 100nF r (أربع قطع) ، ثلاثة مفاتيح بدبابيس (قطعتان) ، 2N2222 الترانزستور ، الجرس ، المقاوم 200Ω.
البرنامج: Atmel studio 6.1، progisp or flash magic.
مخطط الدائرة وشرح العمل
للحصول على توقيت دقيق ، قمنا بتوصيل بلورة 11.0592MHz للساعة. الآن لتعطيل الساعة الداخلية لـ ATMEGA ، يتعين علينا تغيير LOW FUSE BITS. تذكر أننا لا نلمس وحدات الصمامات العالية ، لذلك تظل اتصالات JTAG ممكنة.
لإخبار ATMEGA بتعطيل الساعة الداخلية والعمل على الخارج ، نحتاج إلى ضبط:
LOW USE BYTE = 0xFF أو 0b11111111.
في الدائرة PORTB من ATMEGA32 متصل بمنفذ بيانات LCD. هنا يجب على المرء أن يتذكر تعطيل اتصال JTAG في PORTC لـ ATMEGA عن طريق تغيير بايتات الصمامات العالية ، إذا أراد المرء استخدام PORTC كمنفذ اتصال عادي. في 16x2 LCD ، يوجد 16 دبوسًا في الكل إذا كان هناك ضوء أسود ، وإذا لم يكن هناك ضوء خلفي ، فسيكون هناك 14 دبوسًا. يمكن للمرء أن يغادر أو يترك دبابيس الضوء الخلفي. يوجد الآن في 14 دبابيس 8 دبابيس بيانات (7-14 أو D0-D7) ، دبابيس إمداد طاقة (1 & 2 أو VSS & VDD أو gnd & + 5v) ، 3 دبوس rd للتحكم في التباين (يتحكم VEE في مدى سماكة الأحرف معروض) ، و 3 دبابيس تحكم (RS & RW & E)
في الدائرة ، يمكنك ملاحظة أنني أخذت دبابيس تحكم فقط. هذا يعطي مرونة في الفهم الأفضل ، لا يتم استخدام بت التباين والقراءة / الكتابة في كثير من الأحيان حتى يمكن اختصارها على الأرض. هذا يضع LCD في أعلى وضع التباين والقراءة نحتاج فقط إلى التحكم في دبابيس ENABLE و RS لإرسال الأحرف والبيانات وفقًا لذلك.
فيما يلي التوصيلات التي تمت لشاشات الكريستال السائل:
PIN1 أو VSS على الأرض
PIN2 أو VDD أو VCC إلى + 5 فولت
PIN3 أو VEE على الأرض (يعطي أقصى تباين أفضل للمبتدئين)
PIN4 أو RS (اختيار التسجيل) إلى PD6 من uC
PIN5 أو RW (قراءة / كتابة) على الأرض (يؤدي وضع شاشة LCD في وضع القراءة إلى تسهيل الاتصال للمستخدم)
PIN6 أو E (تمكين) إلى PD5 من uC
PIN7 أو D0 إلى PB0 من uC
PIN8 أو D1 إلى PB1 من uC
PIN9 أو D2 إلى PB2 من uC
PIN10 أو D3 إلى PB3 من uC
PIN11 أو D4 إلى PB4 من uC
PIN12 أو D5 إلى PB5 من uC
PIN13 أو D6 إلى PB6 من uC
PIN14 أو D7 إلى PB7 من uC
في الدائرة يمكنك أن ترى أننا استخدمنا اتصال 8 بت (D0-D7) ولكن هذا ليس إلزاميًا ، يمكننا استخدام اتصال 4 بت (D4-D7) ولكن مع برنامج اتصال 4 بت يصبح معقدًا بعض الشيء. لذلك كما هو موضح في الجدول أعلاه ، فإننا نقوم بتوصيل 10 دبابيس من شاشة LCD بوحدة التحكم ، حيث تكون 8 دبابيس عبارة عن دبابيس بيانات و 2 دبابيس للتحكم.
التبديل الأول هو تمكين ميزة الضبط بين التنبيه والوقت. إذا كان رقم التعريف الشخصي منخفضًا ، فيمكننا ضبط وقت التنبيه بالضغط على الأزرار. إذا كانت أزراره العالية لضبط الوقت فقط. هناك أربعة أزرار موجودة هنا ، أولها زيادة MINUTES في التنبيه أو الوقت. الثاني هو إنقاص MINUTES في التنبيه أو الوقت. الثالث هو زيادة HOUR في التنبيه أو الوقت. FOURTH هي لإنقاص HOURS في التنبيه أو الوقت.
المكثفات الموجودة هنا لإبطال تأثير الارتداد للأزرار. إذا تمت إزالتها ، فقد تعد وحدة التحكم أكثر من واحدة في كل مرة يتم فيها الضغط على الزر. المقاومات المتصلة للدبابيس هي للحد من التيار ، عند الضغط على الزر لسحب الدبوس إلى الأرض.
عندما يتم الضغط على زر ، يتم سحب دبوس وحدة التحكم المقابل لأسفل على الأرض وبالتالي تتعرف وحدة التحكم على زر معين مضغوط ويتم اتخاذ الإجراء المقابل.
أولًا ، الساعة التي نختارها هنا هي 11059200 هرتز ، ونقسمها على 1024 نحصل على 10800. لذلك نحصل على 10800 نبضة لكل ثانية. لذلك سنبدأ عدادًا بـ 1024 مقياسًا مسبقًا للحصول على ساعة العداد مثل 10800 هرتز. ثانيًا ، سنستخدم وضع CTC (Clear Timer Counter) الخاص بـ ATMEGA. سيكون هناك سجل 16 بت حيث يمكننا تخزين قيمة (قيمة المقارنة) ، عندما يحسب العداد حتى قيمة المقارنة التي يتم تعيين المقاطعة لتوليدها.
سنقوم بتعيين قيمة المقارنة إلى 10800 ، لذلك سيكون لدينا بشكل أساسي ISR (روتين خدمة المقاطعة في كل مقارنة) لكل ثانية. لذلك سنستخدم روتين التوقيت هذا للحصول على الساعة التي نحتاجها.
BROWN (WGM10-WGM13): هذه البتات مخصصة لاختيار وضع تشغيل المؤقت.
الآن بما أننا نريد وضع CTC مع قيمة مقارنة في OCR1A بايت ، علينا فقط ضبط WGM12 على واحد ، تبقى المتبقية لأنها صفر افتراضيًا.
RED (CS10، CS11، CS12): هذه البتات الثلاثة مخصصة لاختيار ما قبل السكالار وبالتالي الحصول على ساعة مضادة مناسبة.
نظرًا لأننا نريد 1024 كتحديد مسبق ، يتعين علينا تعيين كل من CS12 و CS10.
يوجد الآن سجل آخر يجب أن نأخذ في الاعتبار:
أخضر (OCIE1A): يجب ضبط هذا البت للحصول على مقاطعة عند تطابق المقارنة بين قيمة العداد وقيمة OCR1A (10800) التي قمنا بتعيينها.
قيمة OCR1A (قيمة مقارنة العداد) ، مكتوبة في السجل أعلاه.
شرح البرمجة
يتم شرح عمل المنبه خطوة بخطوة في الكود أدناه:
# تضمين // رأس لتمكين التحكم في تدفق البيانات على المسامير # تعريف F_CPU 1000000 // إخبار وحدة التحكم بتردد الكريستال المرفق # تضمين