ملحوظة: تم نشر هذا المنشور في الأصل على موقع المؤلف مستودع جيثب لأجل هذا المشروع.
كما هو موضح في المرفق الأيدي على المادةهذا المشروع عبارة عن ساعة رقمية تستخدم مذبذبًا عالي الثبات بقدرة 10 ميجاهرتز كمرجع للتوقيت. المذبذب عبارة عن مذبذب بلوري للتحكم في الفرن، أو OCXO، وهي تقنية شهدت تحسينات كبيرة في السنوات الأخيرة، حيث تستهلك طاقة أقل بكثير وبسعر أقل بكثير.
النظام الأساسي هنا هو OCXO مدمج مع Arduino Nano. يوفر Nano قوة معالجة أكبر بكثير مما هو ضروري لأداء ساعة بسيطة من نوع الساعات والدقائق والثواني ولكنه رخيص الثمن وسهل الاستخدام. ومع ذلك، لا يمكن استخدام إشارة الساعة الأولية البالغة 10 ميجاهرتز الصادرة من OCXO لقيادة Nano مباشرة. يستخدم Nano مرنانًا سيراميكيًا بتردد 16 ميجاهرتز لساعة نظامه وليس من السهل تغيير التردد، على سبيل المثال 10 ميجاهرتز، دون تعديل كبير على البرامج الثابتة لـ Nano لأن إشارة الساعة 16 ميجاهرتز تُستخدم لاشتقاق إشارة التوقيت لـ Nano. اتصال USB اللازم لتحميل البرامج على وحدة التحكم الدقيقة. كان التبديل الفعلي للتبديل بين 16 ميجا هرتز و10 ميجا هرتز بعد تحميل البرنامج خيارًا، ولكنه ليس عمليًا للغاية.
وبدلاً من ذلك، كان النهج هو استخدام المقاطعات. كما هو الحال مع جميع المعالجات الدقيقة، يدعم Nano المقاطعات، والتي، عند تشغيلها، يمكنها إيقاف تشغيل رمز البرنامج قيد التشغيل حاليًا، ونقل سجلات وحدة المعالجة المركزية إلى موقع الذاكرة، وتنفيذ روتين خدمة المقاطعة ثم إعادة وحدة التحكم إلى التشغيل العادي عن طريق استعادة السجلات. يمكن عادةً تشغيل المقاطعات بواسطة مؤقت يعمل بالساعة أو إدخال على طرف خارجي مخصص. يتضمن Nano ثلاثة مؤقتات للمقاطعة، ويمكن أيضًا تشغيل Timer0 وTimer1 بواسطة مصدر ساعة خارجي من خلال دبابيس T0 وT1. تعمل أجهزة ضبط الوقت عن طريق تحميلها برقم ثنائي، والذي يتناقص بعد ذلك في كل مرة يتم فيها اكتشاف نبضة عند الدبوس المقابل لها. عندما يصل الموقت إلى الصفر، يتم تشغيل المقاطعة. يؤدي تغيير الرقم الذي تم تحميله في جهاز ضبط الوقت إلى تغيير الفاصل الزمني بين المقاطعات. Timer0 هو 8 بت بينما Timer1 هو 16 بت.
ومع ذلك، لا يزال من غير الممكن تشغيل الموقتات مباشرة باستخدام إشارة 10 ميجاهرتز من OCXO. عند استخدامها مع ساعة خارجية على T0 أو T1، يتم أخذ عينة من الإشارة الموجودة في الدبوس بالنسبة لساعة النظام ذات التردد 16 ميجاهرتز. باستخدام الحد الأقصى لعامل أخذ العينات Nyquist وهو 2.5، فإن الحد الأقصى الواقعي لتردد الإدخال الخارجي هو 6.4 ميجاهرتز – سيتم تفويت أي نبضات أعلى أو واردة عند الدبوس. تؤدي إضافة عداد ثنائي 4 بت بعد إخراج OCXO إلى انبعاث نبضة واحدة من العداد لكل 16 نبضة يتلقاها، حيث يقوم العداد بالعد من 0000 ل 1111. مع تشغيل OCXO عند 10 ميجا هرتز، يكون تردد إشارة خرج العداد 625 كيلو هرتز. وبالتالي، فإن إجراء العد التنازلي للمؤقت من 62500 سيؤدي إلى انقطاع كل عُشر ثانية. يتم بعد ذلك تحديث الثواني والدقائق والساعات بشكل مناسب.
عناصر
اخترت ان اردوينو نانو مثل المتحكم الدقيق على مدار الساعة لأنه يوفر نفس الإمكانيات التي توفرها وحدات التحكم الأكبر حجمًا من Arduino ولكنه في شكل أكثر إحكاما ورخيص جدًا. على وجه الخصوص، فهو يشتمل على واجهات SPI وI2C المعتادة التي تجعل من السهل التعامل مع شاشات العرض الحديثة من خلال برامج التشغيل المدمجة الخاصة بها. OCXO هو رالترون للإلكترونيات OX4120A-D3-5-10.000-3.3. يمكن استخدام أي OCXO مناسب، حتى لو كان ذو تردد مختلف عن طريق تغيير نسبة المقسم. ويأتي أيضًا في تكوين حزمة قياسي مزدوج الحزمة (DIP) مكون من 14 سنًا، على الرغم من استخدام 4 دبابيس فقط بالفعل. إن OCXO عبارة عن جزء بجهد 3.3 فولت، لذا أ LD1117V33C يستمد منظم الجهد الخطي منخفض التسرب (LDO) هذا الجهد من جهد النظام 5 فولت الذي يوفره اتصال USB-C المستخدم لتشغيل الساعة. يوفر المنظم الثاني المطابق 3.3 فولت للشاشة. نوع المنظم ليس بالغ الأهمية، ويمكن استخدام أنواع LDO أو تبديل بديلة. العداد 4 بت هو 74HC191. على الرغم من أن العداد يتم تشغيله بجهد النظام 5 فولت، إلا أن دخله متوافق مع المستوى المنطقي 3.3 فولت الخاص بـ OCXO، لذا ليس من الضروري استخدام محول الجهد.
تتكون الشاشة من ستة أجنحة الريش Adafruit CharliePlex. يتكون كل جهاز CharliePlex من مجموعة من مصابيح LED مقاس 7 × 15 بكسل والتي يمكن تشغيلها بشكل فردي في الوضع الرسومي أو باستخدام الخطوط المضمنة في ادافروت_IS31FL3731 مكتبة. يتم التواصل معهم عبر اتصال I2C. يمكن تعيين عنوان كل CharliePlex على إحدى القيمتين: بشكل افتراضي 0x74 ولكن يمكن تغييره إلى 0x77 عن طريق سد الرابط باستخدام اللحام. لقيادة شاشات متعددة استخدمت مجلس الاختراق مع ال TCA9548A شريحة توسيع I2C، والتي تتيح لي توصيل العديد من أجهزة CharliePlex ومعالجة كل منها على ناقل I2C منفصل، وتجنب تضارب العناوين.
يتم استخدام جهاز تشفير دوار واحد مع مفتاح ضغط لحظي كواجهة مستخدم. وهذا يمنح الساعة إحساسًا بسيطًا عصريًا. يمكن بالطبع استخدام مفاتيح الضغط المنفصلة مع الحد الأدنى من التغييرات على الأجهزة و/أو البرامج.
تحتوي جميع المكونات المستخدمة في هذا المشروع على عبوات مثقوبة لسهولة البناء. تتوفر قائمة المواد التي تحتوي على الأرقام المرجعية لمنتج Digikey في موقع Github الخاص بي مخزن.
لوحة الدوائر المطبوعة
تم تصميم لوحة الدوائر المطبوعة في KiCad. يتم توفير تصميم ثنائي الفينيل متعدد الكلور في المستودع كملفات KiCad وبتنسيق Gerber ليتمكن الآخرون من تصنيعه أو تعديله بموجب ترخيص المشاع الإبداعي.
اللوحة النهائية ليست معقدة ومصممة على شكل لوحة مزدوجة الجوانب يسهل لحامها. يمكن تقسيمها بسهولة إلى قسمين عبر قطعتين، إما بالمنشار أو بالتسجيل والقطع. إذا تم تقسيمها إلى قسم، يتم توفير منصات بحيث يمكن لحام الرؤوس لتوصيل لوحة واحدة خلف الأخرى، مما يجعل شكلًا أكثر إحكاما يناسب ساعة المكتب. في هذا الشكل، تحمل اللوحة “العلوية” شاشة العرض وجهاز التشفير الدوار، مع كل شيء آخر على اللوحة الخلفية. يتم تركيب جهاز التشفير الدوار في وسط اللوحة، ولكن يمكن بالطبع نقله إلى مكان آخر وإرفاقه عبر الخيوط الطائرة. تم طلب النموذج الأولي لثنائي الفينيل متعدد الكلور من خلال شركة JCL في الصين، ولكن أي دار لتصنيع ثنائي الفينيل متعدد الكلور ستفي بالغرض. يحتوي الجزء السفلي من اللوحة على Arduino وموسع I2C وOCXO وسلسلة المقسم ومنظمات الجهد. يتم تركيب منظمات الجهد الكهربي بحيث تكون الألسنة متجهة للخارج بحيث يمكن تركيب المبددات الحرارية إذا لزم الأمر. لم يكن هذا ضروريًا في النموذج الأولي، ولكن إذا كانت شاشات العرض، على سبيل المثال، يتم تشغيلها بسطوع إجمالي عالٍ، فقد يكون ذلك ضروريًا. إذا تم تركيب الألواح خلف بعضها البعض، فيجب وضعها في الخلف، بحيث يمكن الوصول إلى جميع المكونات من الجزء الخلفي من الساعة. سيؤدي ذلك إلى تسهيل اختراق الساعة لاحقًا إذا لزم الأمر. يتم تركيب فتحات M3 في اللوحة لسهولة التركيب، وتتوافق هذه الفتحات مع الأجزاء العلوية والسفلية من اللوحة إذا تم تركيبها من الخلف إلى الخلف. يمكن تركيب الفواصل المعدنية لتوفير الخلوص الصحيح والاستقرار الميكانيكي. يتم أيضًا تركيب فتحتين للتركيب أعلى وأسفل OCXO. هذا لتوفير الاستقرار الميكانيكي. يعد OCXO مكونًا ثقيلًا نسبيًا ويتم تثبيته في اللوحة ببساطة عن طريق أربعة دبابيس في مقبس DIP. يتم تثبيت هذا أيضًا عموديًا، لذا فهو غير مستقر بشكل خاص. يمكن تمرير قطعة من السلك من خلال الفتحتين مع لف طرفيها معًا لتثبيت OCXO في مكانه. يمكن أيضًا استخدام روابط الكابلات أو المشبك إذا كان ذلك متاحًا. هناك مجموعتان من المخططات وملفات ثنائي الفينيل متعدد الكلور وملفات جربر. وذلك لأن وحدات TCA9548A تأتي بنكهتين. يحتوي Adafruit one على تباعد قدره 0.6 بوصة بين الصفوف (الإصدار “N”) بينما تحتوي بعض الوحدات المتوفرة على موقع eBay على تباعد 0.7 بوصة. تحقق جيدًا من النوع الذي تستخدمه قبل تصنيع مركبات ثنائي الفينيل متعدد الكلور.
برمجة
البرنامج متاح أيضًا في مستودع Github الخاص بي. يعتمد كود المصدر على مكتبتين إضافيتين فقط، Adafruit_IS31FL3731 المذكورة أعلاه والمكتبة الشائعة مكتبة الأسلاك والتي تتيح الاتصال التسلسلي، وهو أمر ضروري لاتصال I2C بالشاشة. تتطلب قيادة شاشات العرض برمجة فردية لكل من مصابيح LED الـ 105 الموجودة في كل جهاز CharliePlex. يتم ذلك باستخدام مجموعة من جداول البحث (LUTs) التي يتم تحديدها مباشرة بعد تضمين المكتبة في الكود المصدري. يوجد جدول بحثي واحد لكل رقم. من الواضح من خلال النظر إليها ما هي الأرقام المخزنة في جدول LUT، ومن السهل استبدال جداول البحث LUT بمجموعة جديدة تمثل خطًا مختلفًا. بعد ذلك، يتحقق رمز الإعداد من أن جميع أجهزة CharliePlexes تعمل بشكل صحيح وسيرسل رسالة تصحيح إلى أي كمبيوتر متصل عبر واجهة USB التسلسلية إذا لم يكن الأمر كذلك. تم تكوين Next Timer1 لقبول النبضات من ساعة خارجية والعد التنازلي من 62499. هذا هو 62499 وليس 62500 لحساب الوقت اللازم لإعادة ضبط العداد في كل مرة يصل فيها إلى الصفر ويؤدي إلى مقاطعة الحلقة الرئيسية للبرنامج. وتتمثل الوظيفة الأساسية للحلقة الرئيسية في استدعاء الروتين الفرعي الذي يقرأ جهاز التشفير الدوار. يحاول الروتين الفرعي لجهاز التشفير التخلص من ارتداد المحول كما أنه قابل للتعديل بسهولة. تقوم الحلقة الرئيسية أيضًا بتحديث العرض، ولكن فقط عندما يتم تعيين بتة العلم بواسطة مؤقت المقاطعة. يوجد أيضًا متغير سطوع هنا يمكن للمستخدم تعيينه كما هو الحال مع المتغير لزيادة سطوع الرقم بشكل مؤقت عند ضبطه. يتبع رمز روتين خدمة المقاطعة Timer1 الحلقة الرئيسية. يتم استدعاء ذلك عشر مرات في الثانية، ويهتم بزيادة الثواني والدقائق والساعات حسب الحاجة. يتم هنا أيضًا وميض زوج من مصابيح LED بين الثواني والدقائق، وزوج آخر من مصابيح LED بين الدقائق والساعات، حيث يتم التشغيل والإيقاف كل نصف ثانية. يمكن تغيير وظيفتها بسهولة إذا رغبت في ذلك. يعالج الروتين الفرعي النهائي إرسال التحديث إلى الشاشة عبر شريحة الموسع TCA9548A I2C.
دقة
إن OX4120A-D3-5-10.000-3.3 المستخدم في هذا المشروع هو OCXO ثابت – ولا يمكن تعديل تردده. تسمح OCXOs الأخرى بإجراء التعديلات من خلال تطبيق جهد تحكم على أحد الأطراف، لكنني اخترت المذبذب الأبسط الذي يُعتقد أن استقراره مرتفع بما يكفي حتى لا يتطلب هذا المشروع التعديل. للتحقق من دقة الساعة يتطلب ساعة مرجعية ذات دقة أعلى. أفضل ما كان لدى المؤلف في مختبره هو أ عداد التردد HP 53150A مع مرجع OCXO الخاص به. تمت معايرته آخر مرة في عام 2013. عند قياس مرجع OCXO، تراوح التردد على العداد بين 10,000,000 و9,999,999. يشير هذا إلى اتفاق، وبالتالي دقة، أفضل من جزء واحد في 10,000,000. كونها أحدث، فمن المحتمل أن يكون OCXO في هذه الساعة أفضل من عداد HP!