DS3231 – توصيل ساعة الوقت الحقيقي. الساعة - مصممة على شريحة I2C عالية الدقة (دقيقة للغاية) DS3231 SDA ودبابيس SCL على لوحات Arduino المختلفة

💖 هل يعجبك؟شارك الرابط مع أصدقائك

لماذا كل هذا مطلوب؟

60 ثانية * 60 دقيقة * 24 ساعة * 365 يومًا = 31,536,000 ثانية في السنة.

لكل من هذه الملايين، يمكن أن تذهب ثانيتان في اتجاه أو آخر. اقسم 31.5 مليونًا على مليون واضربه في 2: نحصل على 63 ثانية في السنة (الحد الأقصى). خيار مقبول؟ جداً. لكن مرة كل ستة أشهر أقوم بمزامنة الوقت بحيث يتناسب مع دقيقة واحدة.

ما هي الطرق التي يمكنك من خلالها ضبط الوقت بشكل عام على ساعة الوحدة؟

تقليديا، بدءا من وحدة DS3107، تم ضبط الوقت باستخدام رسم Arduino من بين أمثلة استخدام المكتبة. الخوارزمية هي كما يلي: افتح الرسم، وانقر فوق "ترجمة وتحميل"، وعندما يتم تشغيل وحدة التحكم لأول مرة، يتم ضبط الوقت. ويبقى السؤال: متى؟ كيف يمكن لاردوينو معرفة الوقت المناسب بالضبط؟ والأمر بسيط للغاية - وقت تجميع الرسومات. ولكنني أرى عدة عيوب في هذا النهج:
  • يعتمد وقت التجميع على "قوة" الكمبيوتر؛
  • يعتمد وقت التنزيل على السرعة التي يتم بها نقل المخطط المترجم إلى لوحة Arduino؛
  • الرسم الذي تم تحميله "يمكن التخلص منه" (يصبح قديمًا فور تحميله على Arduino).
كيف يمكنك "الالتفاف" للالتفاف على هذه القيود؟ حسنًا، على سبيل المثال، بمعرفة (الإعداد التجريبي) وقت الترجمة، يمكنك "دفع" الساعة الموجودة على الكمبيوتر إلى الأمام حتى هذا الوقت. ثم قم بتشغيل التجميع، وميض اللوحة، وسيتم ضبط الوقت. وميزة هذه الطريقة هي بساطتها النسبية. العيوب - طريقة غير مريحة نسبيًا وغير دقيقة نسبيًا لمرة واحدة.

ماذا يمكن ان يخطر لك؟ يمكنك، على سبيل المثال، ضبط الوقت المطلوب في الرسم يدويًا، وتوفير زر يمكن الضغط عليه اللحظة المناسبةسيتم ضبط الوقت المحدد "يدويًا"، على سبيل المثال، دقيقتين من اللحظة الحالية: بينما يكون الرسم "مملوءًا"، بينما نستعد لتتبع اللحظة الضرورية للغاية للضغط على الزر يدويًا، ستمر بضع دقائق فقط . وبعد ذلك، بالنظر إلى الساعة الموجودة على الكمبيوتر، انتظر "تلك اللحظة" للضغط على الزر. الايجابيات - أكثر صعوبة الطريقة السابقة، ولكنها لا تزال بسيطة نسبيًا، ولكنها أكثر دقة من الطريقة الأولى. العيوب - هذه الطريقة أكثر إزعاجًا، وتستغرق وقتًا أطول، ولا تزال رسمًا تخطيطيًا "لمرة واحدة".

على من يقع اللوم وماذا تفعل؟

بعد أن سألت نفسي هذين السؤالين البلاغيين، ذهبت إلى الإنترنت للبحث عن من كتب بالفعل مزامنة الوقت لوحدة الساعة مع الكمبيوتر. وكما تعلمون، من يسعى يجد دائما. لقد وجدت خيارًا مع . من الناحية النظرية، كل شيء بسيط: يقوم "ملف دفعي" عادي بتحليل الوقت الكامل الحالي الذي تم الحصول عليه بالطريقة "الأولى" (لأنه بالإضافة إلى الوقت نفسه، تحتاج أيضًا إلى تاريخ)، ويزيد الوقت بمقدار ثانيتين، و" "محركات الأقراص" حلقة فارغة حتى اللحظة التي تصل فيها هذه الحلقة الجديدة، "زائد_اثنين_ثانية"، حان الوقت "لرمي" البيانات في منفذ COM. علاوة على ذلك، يتم تتبع الوقت "plus_two_thans الجديد" بطريقة مختلفة (عبر %time%، إذا كان أي شخص مهتمًا). ولكن عن "عضادات" مثل هذا القرار لاحقًا. يتم تحليل البيانات "التي تم طرحها" في منفذ COM بواسطة Arduino ثم تقوم بتعيين الوقت في الوحدة. كل شيء يبدو بسيطًا ومنطقيًا ومريحًا. ولكن هناك كلمة سيئة للغاية "لكن". يبدو أن كل هذا قد كتبه ألماني، ومعاييره الإقليمية في Windows تختلف عن "معاييرنا"، وعلى وجه الخصوص، يتم فصل الجزء الكسري بنقطة، وليس بفاصلة. عند تشغيله باستخدام المعايير الإقليمية المحلية، لا يعمل الملف الدفعي، لأنه يتم وصف وقت الخروج من الحلقة الفارغة من خلال شرط المقارنة مع XX:XX:XX.xxx. حسنًا، أنت بحاجة إلى وضع فاصلة بدلاً من النقطة - وهذا كل شيء، "لقد أصلحت كل شيء". ولكن هذا ليس كل شيء (يمكنك التحقق من من يتذكر أي نوع من الشر هو البرمجة في "الدفاتر المجمعة"). يجب تصحيح ملف الجسم بشكل أكثر جدية. وقمت بإصلاحه باستخدام "حصائر الترجيع" و"دليل" لنظام DOS. قام "باتنيك" بإصلاحه، لكن الرسم ما زال لا يعمل - لم يتم تحديد الوقت. وهذا هو، تم إرسال البيانات إلى المنفذ، ورأى اردوينو ذلك، ولكن "حدث خطأ ما".

دعونا نلقي نظرة على ما يرسله الملف الدفعي إلى Arduino وبأي تنسيق (كمرجع).

الحالة 83: //S = الحالة الثانية 68: //D = الدقيقة (Daghigheh باللغة الفارسية) الحالة 72: //H = الساعة الحالة 84: //T = يوم من الشهر (علامة باللغة الألمانية) الحالة 77: /// M = حالة الشهر 74: /// J = السنة (Jahr باللغة الألمانية)
يتم إرسال البيانات بالتنسيق S**~D**~H**~T*~M**~J****~، حيث يكون ~ 2 بايت من بداية السطر. المجموع، 31 بايت. لا يبدو الأمر كثيرًا، سيتم إرسال البيانات بسرعة.

ومع ذلك، هناك أيضًا إزعاج - كما ترون، لا يتم إرسال يوم الأسبوع. يوم من الشهر فقط . ستكون هناك مشكلة في تنفيذ الساعات ذات المنبهات التي تعتمد على أيام الأسبوع. يجب تحديد يوم الأسبوع "يدويًا" في الرسم، مما يشير مرة أخرى إلى بعض "قابلية التصرف" في الرسم، ودونيته.

بإضافة العوامل - دونية الرسم "من المصنع"، ورفضه العمل بشكل طبيعي، والحاجة إلى تصحيح "الملف الأساسي" لخطوط العرض "الخاصة بنا" - قررت تطوير كل شيء بمفردي. وإذا كان الأمر كذلك، فيمكنني القضاء على أوجه القصور وتحسين تنسيق البيانات.

البرامج و الأجهزه.

لكي يعمل كل شيء، تحتاج إلى مكونين: برنامج لنظام التشغيل Windows ومجموعة برامج أجهزة Arduino.

أولا، بيانات عامة عن بروتوكول التبادل. بمجرد أن أصبحت حرًا في اختيار تنسيق البيانات المراد إرسالها، قررت أن إرسال 31 بايت من المعلومات ليس أمرًا منطقيًا، وقمت بتقليل البيانات المرسلة إلى 4 بايت. فهل كان ذلك كافيا؟ ما الذي يمكنك احتواؤه في 4 بايت؟ نعم، هذا يكفي. كل ما تحتاجه يناسبك. أنا متأكد من أن الكثيرين قد خمنوا ما هي 4 بايت. بالنسبة لأولئك الذين لم يخمنوا، سأقتبس جزءًا من مقال من ويكيبيديا:

وقت UNIX (وقت POSIX) - نظام لوصف اللحظات الزمنية، تم اعتماده في UNIX وغيره من الأنظمة المتوافقة مع POSIX أنظمة التشغيل. تم تعريفه على أنه عدد الثواني التي مرت منذ منتصف الليل (00:00:00 بالتوقيت العالمي) 1 يناير 1970 (الخميس).
يتم تمثيل وقت UNIX كعدد صحيح يزداد مع مرور كل ثانية دون الحاجة إلى حسابات لتحديد السنة أو الشهر أو اليوم أو الساعة أو الدقيقة لسهولة القراءة البشرية. يتوافق وقت UNIX الحديث مع التوقيت العالمي المنسق (UTC)، ويتم العد بالثواني SI.

لذا، فإن العدد الصحيح الذي يخزن وقت UNIX يستغرق 4 بايت، وهو ما يكفي لمدة تصل إلى 2,147,483,648 ثانية. وثم ممكنالمشاكل المحتملة. لماذا المحتملة؟ لأن هذا هو الحد الذي عنده الرقم ربمايمكن تفسيرها على أنها سلبية (كما هو الحال مع أجهزة iPhone الخاصة بالعديد من الرفاق الفضوليين في وقت واحد). ربما، لكن هذا لن يحدث بالضرورة، فالأمر يعتمد على ما إذا كانت أيدي المبرمجين ستنمو من المكان الذي توفره الطبيعة. عدد الثواني المشار إليه يتوافق مع 03:14:08 19 يناير 2038. حتى هذا الوقت، يمكنك التبديل ببطء إلى إصدار 64 بت من نظام التشغيل، حيث سيتم تخزين الوقت في متغير 8 بايت، والذي سيستمر بسهولة لمدة 292 مليار سنة القادمة. هناك احتمال أن يكون هذا كافيا طوال حياتنا. ومن ثم سيتعين عليك الترقية إلى الإصدار 128 بت من UNIX.

ما هي المشاكل التي قمت بحلها من خلال الوصول إلى هذا الخيار؟ أولاً، أدى ذلك إلى تقليل عدد البايتات المنقولة بشكل كبير، مما يزيد من دقة ضبط الوقت بالمللي ثانية. عظيم، أليس كذلك؟ والثاني: (على الأرجح) جعلت التوافق مع Linux أسهل. من المؤسف أنني لا أستطيع التعود على نظام التشغيل Linux وأستخدم Windows فقط في الغالب. يمكنني كتابة برنامج إعادة توجيه لنظام التشغيل Windows هذا، ولكن ليس لنظام التشغيل Linux. لكنني أعتقد أنه في Linux يمكنك الحصول على القيمة الزمنية لـ UNIX بسهولة أكبر بكثير من Windows، وإرسال هذا الرقم إلى منفذ COM.

لا أحد إضافيليست هناك حاجة لنقل البيانات مثل يوم الأسبوع وما إلى ذلك. وقت UNIX فقط. كل شيء آخر يتم في اردوينو.

الآن القليل من التفاصيل مباشرة حول أولاًالمكون - برنامج لنظام التشغيل Windows. البرنامج مكتوب بلغة دلفي القديمة الجيدة. عند التشغيل، تظهر نافذة منبثقة تطلب منك تحديد منفذ COM لإرسال البيانات إليه. دعنا نختار. يجب ترك الإعدادات المتبقية كإعداد افتراضي.

كيف يعمل البرنامج؟ فإنه يعيد الحساب من تنسيق الوقت بيانات ويندوزبالنسبة لتنسيق UNIX، أي عدد الثواني منذ منتصف ليل 1 يناير 1970. ثم تضيف 3 ثوانٍ و"تسقط" في حلقة فارغة (من الواضح أنها تدوم أقل من تلك الثواني الثلاث الإضافية)، ويتم الخروج منها خلال العدد المطلوب من الثواني، وهو ما يقرب من 000 مللي ثانية قدر الإمكان. بمعنى آخر، تتم مراقبة حدوث بداية تلك الثانية الزمنية، ويجب إرسال قيمتها إلى Arduino. أوافق على أن إرسال البيانات، على سبيل المثال، تبلغ الآن XXXXXXXXX5 ثانية بينما هي في الواقع، على سبيل المثال، XXXXXXXXX5 و756 جزء من الألف (على سبيل المثال) من الثانية، لن يكون صحيحًا. لهذا السبب تحتاج إلى تتبع بداية الثانية لبدء نقل البيانات. بعد نقل البيانات، يقوم البرنامج بالإبلاغ عن الحالة "تم :)". وهذا يكمل مهمة البرنامج.


ثانيةالمكون - الأجهزة والبرمجيات - اردوينو. هناك 2 أصنافأجهزة لهذا المشروع: نسخة "كاملة" مع شاشة وزر، ونسخة "مبسطة" لـ تحميل سريعوحدة زمنية، مجمعة من "القرف والعصي". حول خلافاتهم - أدناه. يتكون الإصدار "الكامل" من Arduino Nano، ودرع 1602 مع "محول" من I2C إلى الدرع، وزر إعادة ضبط Arduino اختياري ورأس الدبوس (أنثى) لتوصيل وحدة الساعة. وأيضًا اختياريًا من جسم الجهاز بملصق "لطيف". يتكون الإصدار "المجرد" من Arduino (Uno، Nano، Pro Mini + محول USB "الصحيح" مع DTR) و4 أسلاك لتوصيل وحدة الساعة.



كما يتبين من الرسوم البيانية، فإن الإصدار "الكامل"، بالإضافة إلى الإصدار "المجرد"، يحتوي على زر إعادة الضبط وشاشة 1602 مع "محول". كلا الإصدارين متطابقان تمامًا في الوظيفة الرئيسية - ضبط الوقت. الشاشة مطلوبة فقط لعرض مراحل العملية، وعند الانتهاء من عملية ضبط الوقت، سيتم عرض الوقت والتاريخ واليوم من الأسبوع الذي تم ضبطه حديثًا. علاوة على ذلك، بحلول ذلك الوقت ستكون البيانات بالفعل يمكن قراءتها من وحدة الساعة نفسها. في الإصدار "المجرد"، يتم لعب دور الشاشة بواسطة مؤشر LED المدمج في لوحة Arduino: بعد عملية ضبط الوقت الجديد، سيبدأ في الإضاءة. هذا كل الإشارة.

ما هو زر إعادة الضبط؟ لما فيه النسخة الكاملةبعد ضبط الوقت، سوف يدخل اردوينو دورة لا نهاية لهامن خلال عرض ذلك الوقت الذي تم ضبطه حديثًا جدًا، أي في الواقع، سيصبح ساعة. علاوة على ذلك، فهي ساعات مصنوعة على عجل، وبالتالي لا يمكنها استبدال الساعة العادية لعدة أسباب (يتم اختيار الثواني عن طريق التأخير، وسيختفي عرض الوقت عند إيقاف تشغيل الطاقة). بعد كل شيء، الهدف هو التأكد من مزامنة الوقت بشكل صحيح، لا أكثر. لذلك، لمزامنة وحدة الساعة التالية، لا يمكنك الاستغناء عن إعادة التعيين (بتعبير أدق، يمكنك القيام بذلك إذا قمت "بتشويه" كابل USB). وبعبارة أخرى، فإن الغرض من الزر هو نفعي بحت. إذا كنت ترغب في ذلك، يمكنك الاستغناء عنها.

كيفية وميض Arduino نظرًا لوجود إصدارين من الأجهزة ولكن رسم واحد فقط؟ لتجميع الإصدار "الصحيح" من البرنامج الثابت، تحتاج إلى تعيين قيمة المعلمة المطلوبة في رأس الرسم النسخة الكاملة: حقيقي للنسخة "الكاملة"، أو خطأ شنيع - لـ "تم تجريده". وبالتالي سيحدد المترجم إصدار الأجهزة الذي سيقوم بتجميع البرنامج الثابت.

لذلك، لدينا مخطط الاتصال، ونحن بحاجة إلى رمز الرسم. يرجى ملاحظة أنه لكي يعمل المخطط بشكل صحيح مع الإصدار "الكامل"، يلزم وجود مكتبة سائل كريستال I2Cبواسطة فرانك دي براباندر(تم تثبيته من المستودع باستخدام مدير المكتبة). نحتاج أيضًا إلى مكتبة لدعم وحدة الساعة، وليس أي مكتبة فقط :). حمل هنا: . لقد قمنا بفرز المكتبات.

إليك رمز الرسم:

//================================================================================================ ====== الإعداد المتاح للتغيير ============================= #define fullVersion صحيح //true = الإصدار "الكامل" مع الشاشة؛ false = إصدار "مجرد" مزود بمصباح LED مدمج //============================ =====================================================================: المكتبات المستخدمة وإعلان المتغيرات ==== #تشمل #يشمل #إذا (النسخة الكاملة) #تتضمن #endif unsigned long t1 = 0; // متغير للوقت المستلم غير الموقع long t2 = 0; // متغير للبايت الوقت المستلم ب؛ // المخزن المؤقت لتلقي البيانات من منفذ COM #if (fullVersion) byte day = 0; #endif DS3231 ساعة؛ RTCDateTime dat1; #if (fullVersion) LiquidCrystal_I2C LCD(0x3F,16,2); // الشعب الصيني يحب العنوان الجديد لـ "المحولات" من i2c إلى الشاشة #endif //================================ ================================================================================================ ====== ====================================== void setup ()) (#if ( !fullVersion) // ذو صلة فقط بالإصدار "المقتطع" - بداية قسم التعليمات البرمجية pinMode(13, OUTPUT); digitalWrite(13,LOW); #endif // ذو صلة فقط بالإصدار "المقتطع" - نهاية قسم التعليمات البرمجية Clock.begin(); Serial.begin(9600); #if (fullVersion) // ذو صلة فقط بالإصدار "الكامل" - بداية قسم التعليمات البرمجية LCD.init(); LCD.backlight(); LCD .setCursor(0,0); lcd.print("COMport 9600 8N1"); // تلميح لمعلمات منفذ COM التي سيتم تحديدها في البرنامج LCD.setCursor(0,1); LCD.print("جاهز للمزامنة") ؛ // رسالة الحالة - جاهزة لتأخير المزامنة (1000)؛ #endif // ذات صلة فقط بالإصدار "الكامل" - نهاية قسم الكود) حلقة باطلة ())( if (Serial.available())( / / إذا كان هناك "بارود في القارورة" لمنفذ COM Serial.readBytes(b,4); // احسب كل البايتات الأربعة (لا نتوقع أي شيء آخر) t1=b; t2=(t1<<24); //поместить значение байта в 4-байтную переменную и передвинуть его на 3 байта влево t1=b; t2+=(t1<<16); //поместить значение байта в 4-байтную переменную и передвинуть его на 2 байта влево t1=b; t2+=(t1<<8); //поместить значение байта в 4-байтную переменную и передвинуть его на 1 байт влево t2+=b; //поместить значение байта в 4-байтную переменную clock.setDateTime(t2); //установить полученное время на DS3231 #if (fullVersion) //актуально только для "полной" версии - начало участка кода lcd.clear(); lcd.setCursor(0,0); lcd.print("Done:) : :"); while (true){ //начало бесконечного цикла по отображению свежеустановленных времени и даты dat1 = clock.getDateTime(); if (dat1.day != day){ day = dat1.day; lcd.setCursor(0,1); if (dat1.day < 10) lcd.print("0"); lcd.print(day); lcd.print("-"); switch (dat1.month){ //выбираем буквенное соответствие месяца по цифре case 1:{ lcd.print("Jan"); break; } case 2:{ lcd.print("Feb"); break; } case 3:{ lcd.print("Mar"); break; } case 4:{ lcd.print("Apr"); break; } case 5:{ lcd.print("May"); break; } case 6:{ lcd.print("Jun"); break; } case 7:{ lcd.print("Jul"); break; } case 8:{ lcd.print("Aug"); break; } case 9:{ lcd.print("Sep"); break; } case 10:{ lcd.print("Oct"); break; } case 11:{ lcd.print("Nov"); break; } case 12:{ lcd.print("Dec"); break; } default:{ lcd.print("???"); break; } }//switch month lcd.print("-"); lcd.print(dat1.year); lcd.print(" "); switch(dat1.dayOfWeek){ //выбираем буквенное соответствие дня недели по цифре case 1:{ lcd.print("Mon"); break; } case 2:{ lcd.print("Tue"); break; } case 3:{ lcd.print("Wed"); break; } case 4:{ lcd.print("Thu"); break; } case 5:{ lcd.print("Fri"); break; } case 6:{ lcd.print("Sat"); break; } case 7:{ lcd.print("Sun"); break; } default:{ lcd.print("???"); break; } }//switch dayOfWeek }//if date changed lcd.setCursor(8,0); if (dat1.hour < 10) lcd.print("0"); lcd.print(dat1.hour); lcd.setCursor(11,0); if (dat1.minute < 10) lcd.print("0"); lcd.print(dat1.minute); lcd.setCursor(14,0); if (dat1.second < 10) lcd.print("0"); lcd.print(dat1.second); delay(995); }//while #else //актуально только для "урезанной" версии - начало участка кода digitalWrite(13, HIGH); delay(3000); digitalWrite(13, LOW); #endif //актуально только для "полной" версии - конец участка кода }//if Serial }//loop


صورتان للنسخة "الكاملة" للجهاز النهائي.


وأخيراً فيديو للجهاز وهو يعمل "في المعركة":

أين يمكنني تنزيل الرسم والبرنامج؟

تنزيل الرسم (Dropbox).
تنزيل البرنامج لنظام التشغيل Windows (Dropbox).

"المميزات والعيوب".

من الصعب صياغة "الإيجابيات" و "السلبيات" في هذه الحالة. وبالتالي، يقرر الجميع بأنفسهم ما هو جيد وما هو سيء.

المجموع.

لقد أحببت حقًا كيفية ضبط الوقت الآن في الوحدات النمطية! عندما أحتاج إلى ضبط الوقت، لا يتعين علي أن أتذكر في كل مرة الرسم الذي أحتاجه وأفكر في مدى دقة ضبط الوقت في الوحدة. علاوة على ذلك، سيكون هناك قريبا مراجعة لساعة محلية الصنع، حيث قمت ببناء طريقة المزامنة هذه - لقد أحببت الطريقة كثيرا. آمل أن يجد بعض القراء أيضًا هذه الطريقة مفيدة.

المشروع مجاني وغير تجاري. يحق لكل شخص استخدام البيانات الواردة في المراجعة لأي غرض آخر غير الأغراض التجارية.

أتمنى لك كل خير.

أخطط لشراء +48 اضافة الى المفضلة اعجبني الاستعراض +60 +114

وحدة DS3231 (RTC، ZS-042) عبارة عن لوحة منخفضة التكلفة مزودة بساعة في الوقت الفعلي دقيقة للغاية (RTC)، مع تعويض درجة الحرارة للمذبذب البلوري والكريستال. تشتمل الوحدة على بطارية ليثيوم تحافظ على التشغيل دون انقطاع حتى عند إيقاف تشغيل مصدر الطاقة. يعمل المولد المتكامل على تحسين دقة الجهاز وتقليل عدد المكونات.

المواصفات الفنية

جهد الإمداد: 3.3 فولت و5 فولت
شريحة الذاكرة: AT24C32 (32 كيلو بايت)
الدقة: ±0.432 ثانية في اليوم
تردد الكوارتز: 32.768 كيلو هرتز
البروتوكول المدعوم: I2C
الأبعاد: 38 مم × 22 مم × 15 مم

معلومات عامة

تستخدم معظم الدوائر الدقيقة، مثل DS1307، مذبذب كوارتز خارجي بتردد 32 كيلو هرتز، لكن لها عيبًا كبيرًا: عندما تتغير درجة الحرارة، يتغير تردد الكوارتز، مما يؤدي إلى خطأ في التوقيت. تم التخلص من هذه المشكلة في شريحة DS3231 التي تحتوي على مذبذب بلوري وجهاز استشعار لدرجة الحرارة يعوض تغيرات درجة الحرارة بحيث يظل الوقت دقيقًا (يمكن قراءة بيانات درجة الحرارة إذا لزم الأمر). تدعم شريحة DS3231 أيضًا معلومات الثواني والدقائق والساعات ويوم الأسبوع والتاريخ والشهر والسنة، كما تراقب أيضًا عدد الأيام في الشهر وتقوم بإجراء تعديلات على السنوات الكبيسة. يدعم الساعات بصيغتين: 24 و 12، كما يمكن برمجة منبهين. تعمل الوحدة على ناقل I2C ذو سلكين.


الآن القليل عن الوحدة نفسها، فهي مبنية على شريحة DS3231N. يلزم تجميع المقاوم RP1 (4.7 كيلو أوم) لسحب خطوط 32K وSQW وSCL وSDA (بالمناسبة، إذا تم استخدام عدة وحدات مع ناقل I2C، فمن الضروري فك مقاومات السحب على الوحدات الأخرى) . التجميع الثاني للمقاومات ضروري لتشديد الخطوط A0 وA1 وA2، وهي ضرورية لتغيير عنوان شريحة الذاكرة AT24C32N. يعمل المقاوم R5 والصمام الثنائي D1 على إعادة شحن البطارية، ومن حيث المبدأ يمكن إزالتهما، نظرًا لأن بطارية SR2032 العادية تدوم لسنوات. تم أيضًا تثبيت شريحة ذاكرة AT24C32N، وهذا بمثابة مكافأة، وليس من الضروري أن تعمل ساعة RTC DS3231N. يشير المقاوم R1 ومؤشر LED للطاقة إلى تشغيل الوحدة. كما ذكرنا سابقًا، تعمل الوحدة على ناقل I2C؛ وللتسهيل، تم توجيه هذه الحافلات إلى موصلين J1 وJ2؛ ويمكن رؤية تخصيص جهات الاتصال المتبقية أدناه. الغرض J1
32 كيلو: الإخراج، التردد 32 كيلو هرتز
SQW: الإخراج
SDA: خط البيانات (المسلسل Dфta)
VCC: مصدر طاقة الوحدة "+".
GND: وحدة إمداد الطاقة "-". الغرض J2
SCL: الساعة التسلسلية
SDA: خط البيانات التسلسلي
VCC: مصدر طاقة الوحدة "+".
GND: وحدة إمداد الطاقة "-".


سأخبرك قليلاً عن شريحة AT24C32N، وهي شريحة ذات ذاكرة 32 كيلو بايت (EEPROM) من الشركة المصنعة Atmel، مجمعة في حزمة SOIC8، تعمل على حافلة I2C ذات سلكين. عنوان الدائرة الدقيقة هو 0x57، وإذا لزم الأمر، يمكن تغييره بسهولة باستخدام وصلات العبور A0 وA1 وA2 (وهذا يسمح لك بزيادة عدد الدوائر الدقيقة المتصلة AT24C32/64). نظرًا لأن شريحة AT24C32N تحتوي على ثلاثة مدخلات عناوين (A0 وA1 وA2)، والتي يمكن أن تكون في حالتين، إما السجل "1" أو السجل "0"، تتوفر ثمانية عناوين للرقاقة. من 0x50 إلى 0x57.

ربط DS3231 بالاردوينو

الأجزاء المطلوبة:
اردوينو UNO R3 × 1 جهاز كمبيوتر.
ساعة الوقت الحقيقي على DS3231، RTC، SPI، AT24C32 × 1 جهاز كمبيوتر.
سلك دوبونت، 2.54 مم، 20 سم، FM (أنثى - ذكر) × 1 قطعة.
كابل USB 2.0 A-B × قطعة واحدة.

اتصال:
في هذا المثال، سأستخدم فقط وحدة DS3231 وArduino UNO R3، وسيتم نقل جميع البيانات إلى "مراقبة المنافذ". الدائرة ليست معقدة، هناك حاجة إلى أربعة أسلاك فقط، أولاً نقوم بتوصيل ناقل I2C، SCL في A4 (Arduino UNO) وSDA في A5 (Arduino UNO)، كل ما تبقى هو توصيل مصدر الطاقة GND بـ GND وVCC بـ 5 فولت (يمكن كتابته من 3.3 فولت)، تم تجميع الدائرة، الآن نحن بحاجة إلى إعداد جزء البرنامج.

لا توجد مكتبة تعمل مع DS3231 في Arduino IDE، تحتاج إلى تنزيل "DS3231" وإضافته إلى بيئة تطوير Arduino.

ضبط الوقت DS3231
عند تشغيله لأول مرة، تحتاج إلى برمجة الوقت، افتح المثال من مكتبة DS3231 "ملف" -> "أمثلة" -> "DS3231" -> "Arduino" -> "DS3231_Serial_Easy"، أو انسخه الكود من الأسفل

/* تم إجراء الاختبار على Arduino IDE 1.8.0 تاريخ الاختبار 31/08/2018. */ #يشمل // قم بتوصيل مكتبة Wire DS3231 rtc(SDA, SCL); // تهيئة DS3231 void setup() ( Serial.begin(115200); // إعداد اتصال تسلسلي rtc.begin(); // تهيئة rtc // ضبط الوقت rtc.setDOW(FRIDAY); // ضبط اليوم الأسبوع rtc.setTime(16, 29, 0); // اضبط الوقت على 16:29:00 (تنسيق 24 ساعة) rtc.setDate(31, 8, 2018); // اضبط التاريخ على 31 أغسطس 2018) حلقة باطلة() (Serial.print(rtc.getDOWStr()); // إرسال يوم في الأسبوع Serial.print(" "); Serial.print(rtc.getDateStr()); // إرسال التاريخ المسلسل .print(" -- "); Serial.println(rtc.getTimeStr()); // إرسال تأخير الوقت (1000); // تأخير ثانية واحدة)

تم إجراء الاختبار على Arduino IDE 1.8.0

تاريخ الاختبار: 31/08/2018

#يشمل // قم بتضمين مكتبة Wire

DS3231 رتك (SDA، SCL)؛ // تهيئة DS3231

الإعداد باطل()

مسلسل. تبدأ (115200)؛ // إنشاء اتصال تسلسلي

rtc. يبدأ()؛ // تهيئة rtc

// ضبط الوقت

rtc. setDOW(FRIDAY); // تعيين يوم من الأسبوع

rtc. setTime(16, 29, 0); // اضبط الوقت على 16:29:00 (تنسيق 24 ساعة)

حلقة فارغة()

مسلسل. طباعة (rtc .getDOWStr () ) ؛ // إرسال يوم في الأسبوع

مسلسل. مطبعة (" " ) ؛

مسلسل. طباعة (rtc .getDateStr () ) ؛ // أرسل التاريخ

مسلسل. مطبعة (" -- " ) ؛

مسلسل. println(rtc.getTimeStr()); // أرسل الوقت

تأخير (1000)؛ // تأخير ثانية واحدة

قم بتحميل المخطط إلى وحدة تحكم Arduino وافتح "مراقبة المنفذ"

شريحة DS3231 عبارة عن ساعة RTC عالية الدقة في الوقت الفعلي تحتوي على مذبذب كوارتز مدمج معوض لدرجة الحرارة، مما يؤدي إلى انحراف زمني قدره ±2 دقيقة فقط في السنة. بالإضافة إلى ذلك، يتم تنفيذ وظيفة التنبيه، ويوجد أيضًا مخرج المقاطعة. يمكن شراء الساعة كوحدة Arduino جاهزة مع عناصر ربط وحجرة بطارية.

لقد طلبت الوحدة هنا . يظهر الرسم البياني في الصورة أدناه:


تستخدم الدائرة الدقيقة المستخدمة على نطاق واسع . يدعم معدلات البيانات القياسية (100 كيلو هرتز) والعالية (400 كيلو هرتز). عنوان الدائرة الدقيقة (7 بتات) على ناقل I2C هو 1101000. بالإضافة إلى ذلك، تحتوي الوحدة على ذاكرة I2C (24C32)، غير موضحة في الرسم التخطيطي.

أوضاع الطاقة

يمكن أن يكون جهد إمداد الدائرة الدقيقة في حدود 2.3...5.5 فولت، ويوجد خطان للطاقة لمصدر خارجي (خط Vcc) وأيضًا للبطارية (Vbat). تتم مراقبة جهد المصدر الخارجي باستمرار، وعندما ينخفض ​​إلى ما دون العتبة Vpf=2.5V، فإنه يتحول إلى خط البطارية. ويوضح الجدول التالي شروط التبديل بين خطوط الكهرباء:

يتم الحفاظ على دقة الساعة من خلال مراقبة درجة الحرارة المحيطة. تبدأ الدائرة الدقيقة إجراءً داخليًا لضبط تردد مولد الساعة، ويتم تحديد مقدار الضبط باستخدام رسم بياني خاص للتردد مقابل درجة الحرارة. يبدأ الإجراء بعد توصيل الطاقة ثم يتم تشغيله كل 64 ثانية.

من أجل الحفاظ على الشحن، عند توصيل البطارية (يتم تطبيق الجهد على خط Vbat)، لا يبدأ مولد الساعة حتى يتجاوز الجهد على خط Vcc قيمة العتبة Vpf، أو يتم إرسال العنوان الصحيح للدائرة الدقيقة عبر واجهة I2C وقت بدء تشغيل مولد الساعة أقل من ثانية واحدة. بعد حوالي ثانيتين من توصيل الطاقة (Vcc)، أو استلام العنوان عبر واجهة I2C، يبدأ إجراء تصحيح التردد. بمجرد بدء تشغيل مولد الساعة، فإنه يستمر في العمل طالما كان Vcc أو Vbat موجودًا. عند تشغيلها لأول مرة، تتم إعادة ضبط سجلات التاريخ والوقت وتكون لها القيم التالية: 01/01/00 – 01 – 00/00/00 (يوم/شهر/سنة/ – يوم من الأسبوع – ساعة/دقائق) /ثواني).

يبلغ الاستهلاك الحالي عند تشغيله ببطارية 3.63 فولت 3 ميكرو أمبير، في حالة عدم وجود نقل البيانات عبر واجهة I2C. يمكن أن يصل الحد الأقصى لاستهلاك التيار إلى 300 ميكرو أمبير عند استخدام مصدر طاقة خارجي 5.5 فولت وسرعة نقل بيانات I2C عالية.

وظيفة إعادة الضبط الخارجية

يمكن استخدام خط RST لإعادة الضبط الخارجي وله أيضًا وظيفة إنذار الجهد المنخفض. يتم سحب الخط عاليًا من خلال مقاومة داخلية، ولا يلزم سحب خارجي. لاستخدام وظيفة إعادة الضبط الخارجية، يمكن توصيل زر بين خط RST والسلك المشترك، حيث تتمتع الدائرة الدقيقة بحماية من ارتداد الاتصال. يتم تنشيط وظيفة الإنذار عندما ينخفض ​​جهد الإمداد Vcc إلى ما دون قيمة العتبة Vpf، بينما يتم ضبط خط RST على مستوى منطقي منخفض.

وصف سجلات DS3231

يوضح الجدول أدناه قائمة بسجلات الساعة في الوقت الفعلي:

عنواند7د6د5د4د3د2د1د0وظيفةحدود
0x000 10 ثوانيثوانيثواني00-59
0x010 10 دقائقدقائقدقائق00-59
0x020 12/24 صباحا مساءا10 ساعاتساعةيشاهد1-12 + صباحًا/مساءً أو 00-23
10 ساعات
0x030 0 0 0 0 يوميوم من أيام الأسبوع1-7
0x040 0 العاشررقمتاريخ01-31
0x05قرن0 0 10 شهرشهرأشهر / قرن01-12 + قرن
0x0610 سنواتسنةسنين00-99
0x07A1M110 ثوانيثوانيثواني، الإنذار الأول00-59
0x08A1M210 دقائقدقائقدقائق، الإنذار الأول00-59
0x09A1M312/24 صباحا مساءا10 ساعاتساعةالساعة، المنبه الأول1-12 + صباحًا/مساءً أو 00-23
10 ساعات
0x0أA1M4دي / دي تيالعاشريوميوم من أيام الأسبوع، المنبه الأول1-7
رقمالتاريخ، التنبيه الأول01-31
0x0BA2M210 دقائقدقائقدقائق، الإنذار الثاني00-59
0x0CA2M312/24 صباحا مساءا10 ساعاتساعةالساعة، المنبه الثاني1-12 + صباحًا/مساءً أو 00-23
10 ساعات
0x0دA2M4دي / دي تيالعاشريوميوم من أيام الأسبوع، المنبه الثاني1-7
رقمالتاريخ، التنبيه الثاني01-31
0x0EEOSCبي بي اس كيو دبليوالتحويلRS2RS1إنتكنA2IEA1IEتسجيل الإعدادات (التحكم)
0x0FOSF.0 0 0 EN32 كيلو هرتزبسيأ2فأ1فسجل الحالة
0x10لافتةبياناتبياناتبياناتبياناتبياناتبياناتبياناتسجل تعويض الشيخوخة
0x11لافتةبياناتبياناتبياناتبياناتبياناتبياناتبياناتسجل درجة الحرارة، بايت عالية
0x12بياناتبيانات0 0 0 0 0 0 سجل درجة الحرارة، بايت منخفض

يتم تخزين معلومات الوقت بتنسيق عشري ثنائي، أي أن كل رقم من الرقم العشري (من 0 إلى 9) يتم تمثيله كمجموعة مكونة من 4 بتات. في حالة البايت الواحد، تحسب القضمة المنخفضة بايت، وتحسب القضمة العالية العشرات، وما إلى ذلك. يتم حساب الوقت في السجلات ذات العناوين 0x00-0x06؛ لحساب الساعات، يمكنك تحديد وضع 12 أو 24 ساعة. يؤدي ضبط البت السادس من سجل الساعة (العنوان 0x02) إلى ضبط وضع 12 ساعة، حيث تشير البتة الخامسة إلى الوقت من اليوم، وتتوافق القيمة 1 مع فترة ما بعد الظهر (PM)، وتتوافق القيمة 0 مع فترة ما بعد الظهر (AM). تتوافق القيمة الصفرية للبت السادس مع وضع 24 ساعة، وهنا تشارك البتة الخامسة في حساب الساعات (القيم 20-23).

تتم زيادة سجل أيام الأسبوع عند منتصف الليل، من 1 إلى 7، ويحتوي سجل الشهر (العنوان 0x05) على بت القرن (البت السابع)، والذي يتحول عندما يفيض سجل عد السنوات (العنوان 0x06)، من 99 إلى 00 .

تنفذ شريحة DS3231 منبهين، يتم تكوين المنبه الأول باستخدام السجلات ذات العناوين 0x07-0x0A، ويتم تكوين المنبه الثاني باستخدام السجلات 0x0B-0x0D. يمكن استخدام البتات A1Mx وA2Mx لتكوين أوضاع مختلفة للإنذارات؛ يؤدي ضبط البت إلى استبعاد السجل المقابل من عملية المقارنة. توضح الجداول أدناه مجموعات البتات لأوضاع التنبيه المختلفة:

مجموعات البت غير المحددة في الجداول تؤدي إلى عمل غير صحيح للإنذارات. إذا تم مسح بت DY/DT، فسيتم مراقبة تطابق التاريخ (يوم من الشهر) لساعة المنبه؛ وعندما يتم ضبط بت DY/DT، يتم التحقق من تطابق يوم من أيام الأسبوع.

يتم تكوين معظم الوظائف في سجل التحكم. تتحكم بتة EOSC في بدء تشغيل مولد الساعة، وتؤدي إعادة ضبط البتة إلى تشغيل مولد الساعة. يؤدي ضبط البت إلى إيقاف المولد، بالنسبة لوضع البطارية (Vbat) فقط. عند تشغيله من مصدر خارجي (Vcc)، يعمل المذبذب دائمًا بغض النظر عن حالة بت EOSC. عند التمكين، تكون قيمة البت الافتراضية هي 0.

يسمح ضبط بت BBSQW لمخرج INT/SQW (الطرف الثالث) بالعمل في وضع طاقة البطارية، في حالة عدم وجود طاقة خارجية. عندما يتم ضبط البت على الصفر، ينتقل خرج INT/SQW إلى الحالة 3 (غير مفعل) إذا انخفض جهد المصدر الخارجي Vcc عن قيمة العتبة Vpf. بعد توصيل الطاقة، تكون قيمة البت الافتراضية هي 0.

إن بت CONV مسؤولة عن قياس درجة الحرارة القسرية؛ يؤدي ضبط البت إلى بدء عملية التحويل، والتي يتم خلالها ضبط تردد مولد الساعة أيضًا؛ وتقع نتيجة القياس في السجلات ذات العناوين 0x11، 0x12. لا يمكن البدء إلا في حالة اكتمال التحويل السابق؛ قبل البدء، تحتاج إلى التحقق من علامة مشغول BSY. لا يؤثر تحويل درجة الحرارة القسري على دورة ضبط التردد الداخلية التي تبلغ 64 ثانية. لا يؤثر تعيين بت CONV على علامة BSY لمدة 2 مللي ثانية. يتم مسح بتات CONV وBSY تلقائيًا بعد اكتمال التحويل.

تقوم البتات RS2 وRS1 بتعيين تردد النبضات المستطيلة (الموجة المربعة) عند خرج INT/SQW. افتراضيًا، عند التمكين، يتم تعيين البتات على 1. ويوضح الجدول أدناه المجموعات المحتملة من البتات:

تتحكم بت INTCN في إخراج INT/SQW. إذا تم إعادة تعيين البت، تظهر نبضات مستطيلة (موجات مربعة) عند الخرج، ويتم ضبط ترددها بواسطة بتات RS2 وRS1. عند تعيين بت INTCN، يتم استخدام الإخراج لإنشاء مقاطعات التنبيه. بشكل افتراضي، قيمة البت هي 1. نوع الإخراج هو INT/SQW - استنزاف مفتوح، لذلك من الضروري سحبه لأعلى من خلال المقاوم إلى مستوى منطقي مرتفع، والمستوى النشط منخفض.

تعمل بتات الإعداد A1IE وA2IE على تمكين المقاطعات في إشارات الإنذار الأولى والثانية على التوالي. إعادة تعيين البتات، وتعطيل المقاطعات. القيمة الافتراضية هي 0.

يحتوي سجل الحالة على أعلام الأحداث ويتحكم في إخراج 32 كيلو هرتز. تعكس علامة OSF حالة مولد الساعة، القيمة 1 تعني أن مولد الساعة متوقف، يمكن أن يحدث هذا الحدث في الحالات التالية:

  • لأول مرة بعد تطبيق الطاقة
  • البطارية أو الجهد الخارجي غير كافي لتشغيل مولد الساعة
  • يتم إيقاف تشغيل المولد عن طريق ضبط بت EOSC في وضع البطارية
  • العوامل الخارجية المؤثرة على المذبذب البلوري (الضوضاء، التسرب، الخ)

بمجرد ضبطها، لا تتغير قيمة البت، ويجب إعادة تعيين البت يدويًا.

يتيح ضبط بت EN32 كيلو هرتز توليد نبضات مستطيلة (موجات مربعة) عند خرج 32 كيلو هرتز (الدبوس الأول)، وتردد النبضة ثابت ويساوي 32.768 كيلو هرتز. تؤدي إعادة تعيين البت إلى تعطيل هذه الوظيفة ونقل الإخراج إلى الحالة الثالثة (مقاومة الإدخال العالية). بشكل افتراضي، قيمة البت هي 1؛ وبعد تطبيق الطاقة، تظهر النبضات عند الإخراج. نوع الإخراج هو 32 كيلو هرتز مفتوح، لذلك يتطلب سحبًا إلى مستوى منطقي عالٍ.

يتم تعيين علامة مشغول BSY أثناء عملية تحويل درجة الحرارة وضبط الساعة. تتم إعادة تعيين العلامة عند اكتمال التحويل.

يتم ضبط أعلام المنبه A1F وA2F عندما تتطابق قيم سجلات عد الوقت وسجلات المنبه. إذا قاطع التنبيه A1IE، وتم تمكين A2IE، وتم تعيين إخراج المقاطعة (تم تعيين بت INTCN)، فستظهر إشارة المقاطعة عند إخراج INT/SQW (الانتقال من المستوى المنطقي الأعلى إلى المستوى الأدنى). يجب إعادة ضبط العلامات يدويًا عن طريق كتابة القيمة 0.

تم تصميم سجل إزاحة الشيخوخة لضبط تردد مولد الساعة. تتم إضافة قيمة التسجيل إلى تردد المذبذب أثناء إجراء الضبط الداخلي، إذا تم اكتشاف تغير في درجة الحرارة، وكذلك عندما يتم تشغيل تحويل درجة الحرارة بواسطة بت CONV. يتم توقيع قيمة الإزاحة، أي أن القيم الموجبة (1-127) تقلل التردد، والقيم السالبة (128-255) تزيده. بالنسبة لنفس الإزاحة، سيكون تغيير التردد مختلفًا اعتمادًا على درجة الحرارة. عند +25 درجة مئوية، سيكون تغيير التردد 0.1 جزء في المليون/LSB.

يتم تخزين قيمة درجة الحرارة الحالية في السجلات ذات العناوين 0x11 و0x12، البايتات العالية والمنخفضة، على التوالي، ويتم تحديث قيمة درجة الحرارة في السجلات بشكل دوري. تم ضبط المحاذاة اليسرى، والدقة هي 10 بتات أو 0.25 درجة مئوية/LSB، أي أن البايت العالي يحتوي على الجزء الصحيح من درجة الحرارة، وتشكل البتات السادسة والسابعة في السجلات المنخفضة الجزء الكسري. في البايت العالي، تشير البتة السابعة إلى علامة درجة الحرارة، على سبيل المثال، القيمة 00011011 01 تقابل درجة حرارة +27.25 درجة مئوية، القيمة 11111110 10 تقابل درجة حرارة -2.5 درجة مئوية.

عند قراءة سجلات الوقت، يوصى باستخدام مخزن مؤقت إضافي، أي قراءة عدة سجلات في وقت واحد، وليس بشكل منفصل، لأنه بين عمليات القراءة الفردية، يمكن لسجلات الوقت تغيير قيمتها. يوصى أيضًا بمراعاة هذه القاعدة عند كتابة بيانات جديدة لسجلات الحساب. تؤدي كتابة قيمة جديدة إلى سجل الثواني إلى إيقاف الساعة مؤقتًا لمدة ثانية واحدة، ويجب إعادة كتابة السجلات المتبقية خلال هذا الوقت.

توصيل DS3231 إلى متحكم صغير

لقد قمت بتوصيل الساعة بالمتحكم الدقيق PIC16F628A واستخدمت . يظهر مخطط الاتصال أدناه:


بعد توصيل الطاقة، يتم عرض الشرطات (– – – – – –) على المؤشرات، ثم يتم تهيئة الساعة، وتظهر قيمة الوقت على المؤشرات مع تأخير قدره ثانية واحدة، وهو أمر مطلوب لبدء تشغيل مولد الساعة. تعرض المؤشرات الساعات والدقائق والثواني، مفصولة بعلامة عشرية، ويكون تنسيق الوقت على مدار 24 ساعة. باستخدام زر "الإشارة" SB1، يمكنك تغيير تنسيق العرض، حيث ستعرض المؤشرات درجة الحرارة، بالإضافة إلى قيمة الساعات والدقائق، مفصولة بفاصلة عشرية، والتي تومض بتردد 2 هرتز. يتم عرض درجة الحرارة بدون جزء كسري، ويقرأ البرنامج فقط البايت العالي لتخزين درجة الحرارة عند العنوان 0x11.

تتم قراءة قيمة الوقت من الساعة عبر مقاطعة على خط SQW/INT، والذي يتم التحكم فيه بواسطة إشارة التنبيه الأولى؛ أثناء تهيئة الساعة، يتم ضبط ساعة المنبه على إشارة كل ثانية. يعمل مصباح LED HL1 كمؤشر ويومض عند إشارة المقاطعة كل ثانية. يضيء مصباح LED HL2 إذا كان هناك خطأ في نقل البيانات عبر واجهة I2C.

بالإضافة إلى ذلك، أضفت إلى البرنامج القدرة على ضبط الساعة باستخدام أزرار SB2 "الإعدادات"، SB3 "التثبيت". يتم الدخول إلى وضع الإعداد بالضغط على زر SB2، حيث تعرض المؤشرات 00 ساعة وشرطات بدلاً من الدقائق والثواني (00 – – – –). باستخدام زر SB3، يمكنك ضبط قيمة الساعة (تزداد مع كل ضغطة)، ثم الضغط على زر SB2 يتحول إلى تحرير الدقائق؛ بدلاً من الشرطة، سيتم عرض 00 دقيقة. يقوم الزر SB3 أيضًا بتعيين القيمة المطلوبة وما إلى ذلك. بعد تحرير الثواني والضغط على زر SB2، تتم إعادة كتابة الوقت في الساعة، ويتم عرض الوقت المحدث على المؤشرات.

يرد أدناه رمز البرنامج الجزئي (يمكن تنزيل الإصدار الكامل في نهاية المقالة):

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; #يشمل LIST p=16F628A __CONFIG H"3F10" ;مستوى خطأ تكوين المتحكم الدقيق -302؛ لا تعرض الرسائل التي تحتوي على الخطأ 302 في القائمة Sec equ 0020h؛ يسجل الحساب المساعد Sec1 equ 0021h؛ Sec2 يساوي 0022h ; scetbit equ 0024h؛ سجل مساعد لحساب عدد البتات perem equ 0025h؛ سجل مساعد لاستقبال/إرسال البايت عبر spi، i2c temp equ 0026h؛ سجل درجة الحرارة perem_1 equ 0027h؛ سجل مساعد للمحول الثنائي العشري. نتيجة المعادلة 0028h ؛ السجل المساعد للمحول الثنائي العشري dat_ind equ 0029h ؛ سجل البيانات للإرسال عبر بروتوكول spi adr_ind equ 002Ah ؛ سجل العناوين للإرسال عبر بروتوكول spi الثاني equ 002Bh ؛ سجل تخزين الثواني لضبط الوقت بالدقيقة equ 002Ch ؛ سجل تخزين الدقائق لضبط الساعة الزمنية equ 002Dh ؛ سجل تخزين الساعة لإعدادات الوقت adr_i2c equ 002Eh ;سجلات الروتين الفرعي لنقل بيانات واجهة i2c tmp_i2c equ 002Fh Slav_adr equ 0030h data_i2c equ 0031h flag equ 007Fh ;سجل العلم #DEFINE int PORTB,0 ;خط المقاطعة INT/SQW DS3231 #DEFINE sda بورتب ,1 ;خط SDA للاتصالات DS3231 #DEFINE scl PORTB,2 ;خط SCL لتوصيل DS3231 #DEFINE sda_io TRISB,1 ;اتجاه خط SDA #DEFINE scl_io TRISB,2 ;اتجاه خط SCL #DEFINE datai PORTB,5 ;خط إدخال البيانات لبرنامج التشغيل MAX7219 #DEFINE cs PORTB ,6 ;خط اختيار السائق MAX7219 #DEFINE clk PORTB,7 ;خط ساعة السائق MAX7219 #DEFINE led PORTB,4 ;مؤشر LED لخطأ i2c #DEFINE led_sec PORTB,3 ;مؤشر تقدم الساعة LED 1 هرتز #DEFINE regim PORTA,2 ;زر الإشارة - تغيير وضع العرض #DEFINE nast PORTA,3 ;زر الإعداد - الدخول إلى وضع ضبط الوقت #DEFINE ust PORTA,4 ;زر الإعداد - ضبط قيمة الساعة؛؛؛؛؛ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; org 0000h ؛ بدء تنفيذ البرنامج من العنوان 0000h انتقل إلى ابدأ ؛ انتقل إلى تسمية البدء ؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛؛ ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ؛ البرنامج الرئيسي يبدأ movlw b"00000000" ؛ ضبط قيم مزالج الإخراج للمنفذ A movwf PORTA ؛ movlw b"01000000" ؛ اضبط قيم مزالج الإخراج للمنفذ B movwf PORTB ؛ movlw b"00000111" ؛ إيقاف تشغيل المقارنات movwf CMCON ؛ حالة bsf، RP0؛ حدد البنك الأول movlw b"00000111"؛ قم بإعداد خطوط الإدخال/الإخراج للمنفذ B movwf TRISB؛ RB0-RB2 - للإدخال، والباقي للإخراج movlw b"11111111"؛ إعداد الإدخال/ خطوط الإخراج للمنفذ A movwf TRISA؛ جميع الخطوط لإدخال bcf STATUS,RP0؛ حدد البنك 0 علامة clrf؛ سجل إعادة تعيين العلامة اتصل بـ init_lcd؛ استدعاء الروتين الفرعي لتهيئة برنامج التشغيل (MAX7219) استدعاء viv_not؛ رموز شرطة الإخراج " ------ " ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ؛؛؛؛؛؛؛ movlw b"11010000" ؛ عنوان الجهاز (DS3231) movwfslave_adr ؛اكتب 4 بايت إلى سجلات الاستقبال/الإرسال عبر i2c؛هنا يتم تكوين المنبه الأول، ويصدر صوت تنبيه كل ثانية movlw data_i2c؛ اضبط أول سجل استقبال/إرسال عبر i2c movwf FSR ; movlw b"10000000" ؛ بيانات تسجيل الثواني للإنذار الأول movwf INDF ؛ المؤتمر الوطني العراقي FSR,F ; movlw b"10000000" ؛ بيانات تسجيل الدقائق للإنذار الأول movwf INDF ؛ المؤتمر الوطني العراقي FSR,F ; movlw b"10000000" ؛ بيانات تسجيل الساعة للمنبه الأول movwf INDF ؛ المؤتمر الوطني العراقي FSR,F ; movlw b"10000000" ؛ بيانات تسجيل التاريخ/اليوم من الأسبوع للإنذار الأول movwf INDF ؛ movlw. 4 ؛ نقل 4 بايت عبر i2c movwf tmp_i2c ؛ movlw 0x07؛ ضبط عنوان تسجيل الثواني للمنبه الأول movwf adr_i2c؛ استدعاء write_i2c ؛ استدعاء روتين الكتابة عبر واجهة i2c استدعاء err_prov ;التحقق من أخطاء الكتابة/القراءة I2C movlw .1 ;نقل البايت الأول عبر i2c movwf tmp_i2c ؛ movlw 0x0E؛ ضبط عنوان سجل التحكم movwf adr_i2c؛ movlw data_i2c؛ ضبط أول سجل إرسال/استقبال عبر i2c movwf FSR؛ movlw b"00000101" ؛ بدء تشغيل مولد الساعة، وحظر تشغيل دبوس INT/SQW لـ movwf INDF؛ وضع طاقة البطارية، تردد النبض عند مخرج INT/SQW هو 1 هرتز،؛ يتم استخدام خرج INT/SQW لتوليد إنذار مقاطعة الساعة، ;تمكين مقاطعة المنبه مكالمة المنبه الأولى write_i2c ;استدعاء روتين التسجيل الفرعي عبر واجهة i2c استدعاء err_prov ;التحقق من أخطاء الكتابة/القراءة لـ I2C met_2 movlw .1 ;نقل البايت الأول عبر i2c movwf tmp_i2c ؛ movlw 0x0F؛ ضبط عنوان سجل الحالة movwf adr_i2c؛ movlw data_i2c؛ ضبط أول سجل إرسال/استقبال عبر i2c movwf FSR؛ movlw b"00000000" ؛ إعادة تعيين بت OSF، حظر توليد نبضات عند مخرج EN32 كيلو هرتز، movwf INDF ؛ إعادة تعيين إشارات مقاطعة التنبيه A2F، A1F استدعاء write_i2c؛ استدعاء روتين التسجيل الفرعي عبر واجهة i2c استدعاء err_prov؛ التحقق من كتابة I2C / قراءة الأخطاء met_1 btfsc int ؛ استقصاء خط مقاطعة التنبيه انتقل إلى met_3 ؛ bsf led_sec؛ قم بتشغيل مؤشر التقدم على مدار الساعة، انتقل إلى met_4؛ met_3 bcf led_sec ; يقوم بإيقاف تشغيل مؤشر التقدم على مدار الساعة LED btfsc nast ; يستقصي زر إعداد الساعة ويذهب إلى met_5 ; اتصل بـ nast_time؛ اتصل بالروتين الفرعي لضبط الوقت، انتقل إلى met_2؛ met_5 btfsc regim ;استطلاع لزر وضع الإشارة انتقل إلى met_1 ; met_6 استدعاء paus_knp ; نظام بتفس ; انتقل إلى met_6 ; علامة btfss,2 ؛ قم بتغيير قيمة علامة وضع الإشارة إلى met_7 ؛ علامة bcf,2 ؛ علامة إعادة تعيين الإشارة ، وضع عرض الساعة انتقل إلى met_1 ؛ علم met_7 bsf,2 ؛ ضبط علامة الإشارة ودرجة الحرارة ووضع عرض الساعة انتقل إلى met_1 ؛ met_4 movlw .1 ؛ إرسال البايت الأول عبر i2c movwf tmp_i2c ؛ movlw 0x11 ؛ ضبط عنوان تسجيل درجة الحرارة المرتفعة movwf adr_i2c ؛ استدعاء read_i2c ؛ استدعاء روتين القراءة الفرعي عبر I2C استدعاء err_prov ;التحقق من أخطاء الكتابة/القراءة I2C movf INDF,W ;نسخ قيمة درجة الحرارة إلى السجل المؤقت movwf temp rd_time movlw .3 ;نقل 3 بايت عبر i2c movwf tmp_i2c ؛ movlw 0x00؛ ضبط عنوان تسجيل الثواني movwf adr_i2c؛ استدعاء read_i2c ;استدعاء روتين القراءة الفرعي عبر I2C استدعاء err_prov ;التحقق من أخطاء الكتابة/القراءة I2C btfsc flag,2 ;استقصاء علامة وضع الإشارة goto met_8 ؛ اتصل بـvivod؛استدعاء الروتين الفرعي لعرض قيمة الساعة على الشاشة الرقمية، انتقل إلى met_2؛ met_8 استدعاء vivod_temp ؛استدعاء الروتين الفرعي لعرض درجة الحرارة والساعة على شاشة العرض الرقمية انتقل إلى met_2 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

#يشمل

التكوين H"3F10" ؛ تكوين وحدة التحكم الدقيقة

مستوى الخطأ -302؛ لا تعرض 302 رسالة خطأ في القائمة

ثانية equ 0020h؛سجلات الحساب المساعد

Sec1 يساوي 0021h ;

Sec2 يساوي 0022h ;

Scetbit equ 0024h؛ حساب عدد البتات في السجل المساعد

Perem equ 0025h؛ تسجيل استقبال/نقل البايت المساعد عبر spi، i2c

درجة الحرارة equ 0026h؛ سجل درجة الحرارة

perem_1 equ 0027h؛السجل المساعد BCD

نتيجة المعادلة 0028h ؛ السجل المساعد للمحول الثنائي العشري

dat_ind equ 0029h؛ تسجيل البيانات للإرسال عبر بروتوكول SPI

adr_ind equ 002Ah؛ سجل العناوين للإرسال عبر بروتوكول spi

المعادل الثاني 002Bh؛ سجل تخزين الثواني لضبط الوقت

minut equ 002Ch؛ سجل تخزين الدقائق لضبط الوقت

ساعة معادلة 002Dh؛ سجل تخزين الساعة لضبط الوقت

adr_i2c equ 002Eh؛ تسجيلات الروتين الفرعي لنقل بيانات واجهة i2c

tmp_i2c معادلة 002Fh

Slave_adr equ 0030h

data_i2c معادلة 0031h

علم يساوي 007Fh ؛ سجل العلم

#DEFINE int PORTB,0؛ خط المقاطعة INT/SQW DS3231

#DEFINE sda PORTB,1؛ خط SDA لتوصيل DS3231

#DEFINE scl PORTB,2؛ خط SCL لتوصيل DS3231

#DEFINE datai PORTB,5 ؛ خط إدخال البيانات لبرنامج التشغيل MAX7219

#DEFINE cs PORTB,6 ؛ خط اختيار السائق MAX7219

#DEFINE clk PORTB,7 ؛ خط الساعة لبرنامج التشغيل MAX7219

#DEFINE led PORTB,4؛ LED خطأ i2c

#DEFINE led_sec PORTB,3؛ مؤشر التقدم على مدار الساعة LED 1 هرتز

#DEFINE regim PORTA,2؛ زر الإشارة - يغير وضع العرض

#DEFINE nast PORTA,3؛ زر الإعدادات - يدخل في وضع ضبط الوقت

#DEFINE ust PORTA,4؛ زر الضبط - اضبط قيمة الساعة

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

org 0000h ؛ ابدأ تنفيذ البرنامج من العنوان 0000h

انتقل إلى "ابدأ" ؛ انتقل إلى علامة "ابدأ".

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

؛البرنامج الرئيسي

ابدأ movlw b"00000000" ؛ اضبط قيم مزالج الإخراج للمنفذ A

movlw b"01000000" ؛ اضبط قيم مزالج الإخراج للمنفذ B

movlw b"00000111" ؛ قم بإيقاف تشغيل المقارنات

حالة bsf، RP0؛ حدد البنك الأول

movlw b"00000111" ؛ تكوين خطوط الإدخال/الإخراج للمنفذ B

movwf TRISB ;RB0-RB2 - للإدخال، والباقي للإخراج

movlw b"11111111"؛ إعداد خطوط الإدخال/الإخراج للمنفذ A

movwf TRISA؛ كافة الأسطر المراد إدخالها

حالة bcf، RP0؛ حدد البنك 0

علامة clrf ؛ إعادة تعيين تسجيل العلم

استدعاء init_lcd؛ استدعاء روتين تهيئة برنامج التشغيل (MAX7219)

استدعاء viv_not؛ رموز شرطة الإخراج "-----" للمؤشرات

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

movlw b"11010000"؛ عنوان الجهاز (DS3231)

؛اكتب 4 بايت إلى سجلات الاستقبال/الإرسال عبر i2c

movlw data_i2c؛ ضبط أول سجل استقبال/إرسال عبر i2c

movlw b"10000000" ؛ بيانات تسجيل الثواني للإنذار الأول

movlw b"10000000" ؛ بيانات تسجيل الدقائق للمنبه الأول

movlw b"10000000" ؛ بيانات سجل المنبه الأول

movlw b"10000000" ؛ بيانات تسجيل التاريخ/اليوم من الأسبوع للإنذار الأول

movlw .4 ؛ نقل 4 بايت عبر i2c

movlw 0x07؛ ضبط عنوان تسجيل الثواني للمنبه الأول

هذه المراجعة مخصصة لهواة الراديو المبتدئين (أولئك الذين يحبون اللحام) ولأولئك المهتمين بالعملية نفسها. يمكنك تقييم مهارتك. شريحة DS3231 عبارة عن ساعة في الوقت الفعلي (RTC) مزودة بمذبذب بلوري مدمج وتعويض درجة الحرارة.

هذا، بالطبع، ليس لحام الذبذبات. المستوى أدناه. لكنه نشاط مثير للاهتمام.
دعنا نراجع بسرعة الشكل الذي وصل به كل شيء.


وكانت المحتويات في حقيبتين. أكياس قياسية مع قفل. كان هناك كيس صغير به أشياء صغيرة داخل كيس كبير.


وشملت المجموعة:
- يوجد بالجسم لوحين مصنوعين من البلاستيك الشفاف (ملون ومحمي بفيلم من الخدوش).
- البورد (جودة عالية جداً).


مصفوفتان.


على الجانب الأمامي فهي محمية بالفيلم. كانت الأرجل محمية بالبولي إيثيلين المسامي.


يبلغ طول كابل USB حوالي متر.


لقد سكبت كل ما تبقى.


قسمت الى جزئين.
مسامير مع المكسرات.


وحقيقة أن لديك لحام.


مقبس لبطارية ليثيوم بتنسيق CR1220 نادر جدًا، ومستشعر موضع الزئبق، وزوج من الترانزستورات، ومكثفات إلكتروليتية، ومثبت AMS1117 (3.3 فولت)، ومكثفات ومقاومات SMD (10 كيلو)، و3 أزرار، وموصل USB، ومقبس صفارة.
الشيء الأكثر أهمية هو وحدة التحكم STC 15w1k24s وشريحة DS3231 عالية الدقة. لقد كانت معبأة في نفطة صلبة جدًا، وكان من الصعب جدًا تجعدها.


لم يكن هناك مخطط. ومع ذلك، لم تنشأ أي أسئلة، وكان كل شيء واضحا.
لا يتم تصنيف جميع التفاصيل الموجودة على اللوحة فحسب، بل يتم رسمها أيضًا (بشكل مشروط).
انه سهل.
ولكن أولا أعددت.


لقد بدأت بلحام الدائرتين الصغيرتين الأكثر تعقيدًا (على ما أعتقد). يتم وضعه وإمساكه في مكانين (متعاكسين تمامًا). وبعد ذلك قمت بلحامه بشكل صحيح. لا تنس الاحتفاظ به حتى لا "يهربوا".


ثم المثبت.


الترانزستور.


أربع مقاومات SMD ومكثفين SMD. لم يكن تحديد المواقع والإمساك من حافة واحدة بهذه السهولة (يتطلب مهارة). وليس لدي ما يكفي منه :).


اثنين من الشوارد.


موصل يو اس بي.


مقبس بطارية الليثيوم.


صرير. لا تنسى الزائد والناقص. بعد اللحام، قمت بقضم ساقي بشكل صحيح، ولا أريدهم أن يتدخلوا لاحقًا عند لحام القوالب.


مستشعر موضع الزئبق.


3 أزرار.


وأخيرا، المصفوفات. انتبه إلى التوجه. هذا هو الجزء العلوي (سيكون مكبر الصوت على اليسار).


هذا ما حدث.


صحيح أنه كانت هناك قطع غيار متبقية (في حالة الفقدان على الأرجح): ترانزستور واحد ومقاومان ومكثف.


أغسله من التدفق.
أنا أتحقق.
هم يعملون!
أقوم بإزالة الأفلام الواقية.


أنا أجمع.

بعد تشغيل الساعة، هنأني بالعام الجديد.


لا عجب أن الساعة في 1 يناير 2000 هي 00 ساعة و 01 دقيقة.


لا تنتبه إلى الألوان المختلفة للمصفوفة. معدل تحديث "الشاشة" يمكن مقارنته بسرعة غالق الكاميرا. ترى العين البشرية كل شيء باللون الأحمر الصحيح. ولهذا السبب قمت بتظليل النوافذ قليلاً عندما كنت أصور الفيديو (لزيادة سرعة الغالق).
الآن نحن بحاجة إلى تكوينه.
تحتوي الساعة على ثلاثة أزرار في الخلف. أنا نفسي أسميهم تقليديًا (من الأعلى إلى الأسفل):
1. القائمة.
2. زائد.
3. ناقص.
انظر خوارزمية الإعداد. إذا كان بين يديك ساعة فحتى ما لم يكن واضحاً سيصبح أكثر وضوحاً 
للدخول، اضغط باستمرار على الزر العلوي (القائمة) لفترة من الوقت. بعد ذلك نعمل مع مكابس قصيرة.

اسمحوا لي أن أشرح شيئا. هناك ستة قوائم في المجموع. يتحولون في دائرة. يمكنك استخدام زر علامة الجمع، ويمكنك استخدام زر ناقص.
الوقت - ضبط الوقت.
التاريخ - تحديد التاريخ.
ALAR – ضبط التنبيه.
FONT – اختيار الخطوط (5 أنواع في المجموع: رقيقة، واسعة، ناعمة...).
DISP – اختيار خوارزمية إخراج المعلومات (يمكنك استخدام الساعة فقط، ويمكنك تغيير المعلومات بشكل تسلسلي: الوقت، ودرجة الحرارة، والتاريخ، والعطلات في خط زاحف...).
MIDP – حدد نوع نقاط التقسيم.


ليس من السهل شرح كل شيء بالكلمات. لقد عرضت ذلك بالتفصيل في الفيديو (الرابط في النهاية).
وفي هذا الفيديو (30 ثانية) يمكنك رؤية خوارزمية عرض المعلومات على المصفوفات (قائمة DISP type2).


ملاحظة مهمة. بدون بطارية الليثيوم، بعد ضبط الوقت والتاريخ يتم فقدانها. تبقى الإعدادات المتبقية في الذاكرة.
قم بتوصيله بشاحن عادي. قمت بقياس استهلاكي.


جهاز USB لا يظهر أي شيء عندما يستهلك أقل من 50 مللي أمبير (هذه ميزة).
الخلاصة: في وضع الساعة، يكون الاستهلاك الحالي أقل من 50 مللي أمبير، وفي وضع المؤشر يكون حوالي 70 مللي أمبير. ليس كثيرا.
قمت بقياس الأبعاد: 105*85 ملم.
الأرقام الموجودة في الشاشة القياسية هي 20*30 مم لكل منها.


لقد وضعته أمام التلفاز.


لقد نسيت تقريبًا أمر مستشعر موضع الزئبق.
ستظهر الساعة دائمًا بشكل صحيح، حتى لو كانت مقلوبة رأسًا على عقب. الكرة الزئبقية إما تغلق أو تفتح نقاط الاتصال. وبناءً على ذلك، تقوم وحدة التحكم بتغيير خوارزمية إخراج المعلومات إلى المصفوفات.
هذا هو الأساس.
حان الوقت للتقييم.
مجموعة DIY جيدة لهواة الراديو المبتدئين لاختبار مهاراتهم. علاوة على ذلك، فهذه ليست مجرد مجموعة للتدريب، ولكن في النهاية تبين أنها ساعة جيدة.
ما كتبته يجب أن يكون كافيا للاستنتاج الصحيح.
إذا كان هناك شيء غير واضح، اطرح الأسئلة. آمل أن يكون قد ساعد شخص ما على الأقل.
حظ سعيد!

تم توفير المنتج لكتابة مراجعة من قبل المتجر. تم نشر المراجعة وفقًا للبند 18 من قواعد الموقع.

أخطط لشراء +61 اضافة الى المفضلة اعجبني الاستعراض +66 +122

السمات المميزة:

  • الدقة ±2 جزء في المليون على مدى درجة الحرارة من 0 درجة مئوية إلى +40 درجة مئوية
  • الدقة ±3.5 جزء في المليون على مدى درجة الحرارة -40 درجة مئوية إلى +85 درجة مئوية
  • مدخل لتوصيل مصدر طاقة مستقل لضمان التشغيل المستمر
  • نطاق درجة حرارة التشغيل تجاري: من 0 درجة مئوية إلى +70 درجة مئوية صناعي: -40 درجة مئوية إلى +85 درجة مئوية
  • الاستهلاك المنخفض
  • ساعة في الوقت الحقيقي تحسب الثواني والدقائق والساعات وأيام الأسبوع وأيام الشهر والشهر والسنة مع تصحيح السنة الكبيسة حتى 2100
  • اثنين من المنبهات اليومية
  • إخراج موجة مربعة مع تردد قابل للبرمجة
  • واجهة سريعة (400 كيلو هرتز) I2C
  • قوة 3.3 فولت
  • مستشعر درجة الحرارة الرقمي بدقة قياس ±3 درجة مئوية
  • سجل يحتوي على بيانات عن التعديل المطلوب
  • غير إعادة ضبط الإدخال/الإخراج

طلب:

  • الخوادم
  • عدادات كهرباء الكترونية
  • معدات الاتصالات عن بعد
  • أنظمة تحديد المواقع

مخطط اتصال نموذجي لـ DS3231:

وصف عام:

DS3231 عبارة عن ساعة في الوقت الحقيقي عالية الدقة (RTC) مع واجهة I 2 C مدمجة ومذبذب بلوري معوض بدرجة الحرارة (TCXO) ومرنان كوارتز. يحتوي الجهاز على مدخل لتوصيل مصدر طاقة احتياطي مستقل، والذي يسمح بحفظ الوقت وقياس درجة الحرارة حتى عند إيقاف تشغيل مصدر الطاقة الرئيسي. يعمل مرنان الكوارتز المدمج على زيادة عمر خدمة الجهاز وتقليل العدد المطلوب من العناصر الخارجية. يتوفر DS3231 في إصدارات درجة الحرارة التجارية والصناعية ويتم تعبئته في عبوة SO سعة 300 مل و16 سنًا.

يوفر RTC حساب الثواني والدقائق والساعات وأيام الأسبوع وأيام الشهر والسنة. يتم تحديد تاريخ نهاية الشهر تلقائيًا مع مراعاة السنوات الكبيسة. تعمل ساعة الوقت الحقيقي بتنسيق 24 أو 12 ساعة مع الإشارة إلى النصف الحالي من اليوم (AM/PM). يحتوي الجهاز على منبهين يوميين وإخراج موجة مربعة بتردد قابل للبرمجة. يتم تبادل البيانات مع الجهاز من خلال الواجهة المتوافقة مع التسلسل I 2 C المدمجة.



أخبر الأصدقاء