نحن لا نبحث عن طرق بسيطة.

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

نظرًا لأن طريقة نقل المعلومات من المستشعر إلى وحدة التحكم سهلة الخزي ، فإن ATtiny13 يتكيف مع هذا بسهولة. ثم كان من الضروري عرض المعلومات على مؤشر من سبعة أجزاء باستخدام سجلات التحول. وهذا يعني أن مخطط جزء العرض أكبر عدة مرات من وحدة التحكم نفسها. في تلك اللحظة لعبت حولها وانتقلت.
في الآونة الأخيرة ، اعتقدت ، ماذا سيكون مهمة ساحقة لتعيين تينكا؟ ما كانت لا تزال غير قادرة على التعامل مع الأمثلة الموضحة. أول شيء تذكرت عن دلالة. منذ بعض الوقت كنت أبحث بالفعل عن معلومات حول موضوع مماثل. ثم وجدت مثل هذا
الخيار المثير للاهتمام .21 قطعة من 5 أقدام من وحدة تحكم. عظيم! أنا لست بحاجة إلى الكثير ، علامتان كافيتان ، بالإضافة إلى نقطة ، أي ما مجموعه 15 مقطعًا. وإذا كان مع أربعة أرجل؟ ثم احصل على 13 مقطعًا كحد أقصى ، لا يكفي. عند رؤية الدائرة ، نشأت الرغبة فورًا في التجميع والمحاولة ، رغم أنه ليس من السهل وضع خوارزمية تشغيل. ولكن من خلال إلقاء نظرة فاحصة ، أنت تفهم أنه لن ينجح في التجميع ، فهذه الحيوانات المكونة من سبعة قطاعات غير موجودة في الطبيعة (على الأرجح). يمكنك بالطبع ، ولكن هذا مستوى مختلف. ثم تم تأجيل الفكرة حتى أوقات أفضل.
Offtopic: لماذا لا توجد مؤشرات من سبعة أجزاء ذات منطق متكامل؟ أين المطورين تبحث؟ ما مدى ملاءمة التثبيت والتحكم - ساقان طاقة و 3 (1 ، 2) أرجل بيانات. وبعد كل شيء ، كانوا حتى في الاتحاد السوفياتي: 490IP1 ، 490IP2. يوجد داخل المؤشر الأكثر شيوعًا المكون من 2 ... 4 أرقام مساحة كبيرة لوضع الدائرة الدقيقة للرقاقة ، وسعر سجل الإزاحة هو 0.064 متر مكعب مع العلبة. حسنا
وهكذا فكرت مرة أخرى ، كيف يمكن تقليل عدد الأرجل للعمل مع مؤشر السبعة أجزاء؟ يمكن أن تأخذ مخرجات جهاز التحكم ثلاث حالات (في الواقع 4 ، ولكن الآن لا يهم). هل هناك أي طريقة لاستخدام هذا؟ إذا كان من الممكن تفسير حالتين فيما يتعلق بمصباح LED على أنهما ساطعان ، لا ساطعان ، فثمة ثلاث حالات أكثر إثارة للاهتمام. لم أكن قد اكتشفت بعد كيفية استخدامها ، ولكن المخطط التالي جاء في خاطري:

إذا كان خرج وحدة التحكم في حالة الصفر ، فإن مصابيح LED لا تضيء (وهو أمر واضح).
إذا كان الإخراج في حالة الوحدة ، فسيتم إضاءة المصابيح ، وهو أمر مفهوم أيضًا.
ولكن إذا لم يكن الإخراج هو الناتج على الإطلاق ، ولكنه متصل بالإدخال ، فإن التيار يتدفق عبر دائرة من مقاومين ومصباح HL1 ، مما يؤدي إلى انخفاض الجهد عند نقطة اتصال المقاومات من حوالي (5-1.7) / (2.2 + 1.5) * 1.5 + 1.7 = 3.0 V. هذا لا يكفي لتدفق التيار عبر الدائرة VD1_R3_HL2 (يلزم حوالي 3.4 فولت). VD1 هو مصباح إضافي يستخدم كصمام ثنائي زينر (المثبت أكثر صحة) ، وبالتالي فإننا لن نعتبره مؤشر ضوئي ، حتى لا نتشوش. لا يهم إذا تم تشغيل المقاوم للسحب داخل متحكم ، مقاومته (20 كيلو أوم) عمليا لا يؤثر على الموقف. لم أحصل على مثل هذه التصنيفات على الفور ، قبل ذلك حاولت مع الصمام الثنائي العادي مثل VD1 ، كما أنها تعمل بشكل جيد مع نفس المقاومات R1 و R2. لكن من الأفضل أن يكون حجم R2 حوالي مرة ونصف أكبر من حجم R1. لقد نسيت الشيء الأكثر أهمية تقريبًا: كل شيء تم وصفه ممكن فقط باستخدام مصابيح LED
حمراء في المؤشر ومصابيح إضافية. في الحالات القصوى ، يمكن تطبيق المؤشر
أو المصابيح الإضافية باللون الأخضر. ومع امدادات التيار الكهربائي من 4.5 فولت إلى 5 فولت.
ماذا لدينا في النهاية؟ ثلاث حالات: لا يوجد لمبات LED (0) ، أو HL1 (1) ، أو HL1 و HL2 (2). تشبه الى حد بعيد النظام الثلاثي. لكن لا يمكننا إضاءة HL2 بدون HL1 ، يجب تذكر ذلك. ولكن الآن بمساعدة الأرجل الأربعة للتحكم الدقيق ، يمكننا التحكم في ثمانية مصابيح (أردت أن أعتقد ذلك).
ثم حاولت تقسيم المقاطع المؤشر إلى أزواج (تمامًا كما هو الحال في رياض الأطفال: فتى صغير). الشرط الرئيسي هو أنه في كل زوج لا يستطيع أحد الشرائح أن يلمع من تلقاء نفسه ، مثل هذا التمييز. إليك ما حصلت عليه:

يشار إلى أربعة أزواج من القطع ، في كل حرف كبير ، الجزء السائد ، والذي يمكن أن يعمل بمفرده ، أما الثاني فيمكنه فقط. قد تلاحظ أن المقطع "a" يثير اثنتين معًا في وقت واحد ، ولم يصل أي شخص إلى نقطة الضعف على الإطلاق. كيف تبدو الحياة!
ولكن مع هذه الأزواج ، يمكنك عرض (تقريبًا) جميع الأرقام:
تم رسم كل زوج بلونه الخاص. لاحظ أحد المشاهدين اليقظين أن هناك خطأ ما في الشيطان. لن نركز على هذا الآن. لقد جربت بعض الخيارات الإضافية لتجميع الشرائح ، من الأفضل عدم الخروج. ربما سيقترح شخص ما. ربما يمكن للشبكة العصبية التعامل معها.
في المرحلة الثانية من التجارب ، اضطررت إلى استخدام مؤشر مع أنود مشترك. لذلك ، المخطط النهائي هو كما يلي:
قد يسأل أحدهم: أين ذهبت مقاومات 100 أوم؟ من المعروف منذ فترة طويلة (والمستخدمة بنشاط) أنه مع وجود مؤشرات ديناميكية مصنوعة بشكل صحيح ، يمكن الاستغناء عن المقاومات التي تحد من التيار. حتى إذا تم تطبيق الجهد باستمرار من إخراج وحدة التحكم إلى اثنين من المصابيح المتصلة في سلسلة عن طريق الخطأ ، متحكم دقيق ومصابيح LED عادة تحمل هذا ، فإن التيار محدود بسبب المقاومة الانتقالية داخل MC. وأكثر عن المقاومات. أقصى تيار خلال HL1 وفقًا للمخطط السابق هو حوالي 2 مللي أمبير ، ومن خلال HL2 يصل إلى 25 ... 40 مللي أمبير (من المفترض ، فيما بعد ، سأقول من أين أتت هذه الأرقام). هذا يعني أن ناتج الضوء لشرائح مختلفة سيكون مختلفًا. ولكن بما أنه سيتم استخدام الإشارة الديناميكية ، فيمكن حلها بسهولة بسبب اختلاف وقت العرض للقطاعات.
جميع التجارب التي أجريتها على Arduino Nano في Arduino IDE. لوحة نماذج أولية ممتازة ، إنها جيدة في اللوح ، يتم وميضها عبر USB دون مشاكل. هل فشل شيء ما؟ لقد أصلحت الرسم وفي غضون دقيقة قمت بتحميل برنامج ثابت جديد. وعندما تقوم بتصحيح الأخطاء في الكود ، يمكنك الانتقال إلى البرامج الثابتة في ATtiny13 ، إلا أنه لا يزال يتطلب بعض الإيماءات.
بالمناسبة ، أنا أيضاً أوميض مع Arduino في بيئة Arduino ، وهذا يلغي عملياً إمكانية قفل MK مع الصمامات الخاطئة ، وأسهل بكثير.
فيما يلي مثال لعرض الرقم 4 في الكود:
pinMode(f_a, INPUT);
من حيث المبدأ ، يجب أن يكون كل شيء واضحًا حتى بالنسبة لأولئك الذين ليسوا على دراية بأردوينو ، ولكن فهم القليل عن وحدات التحكم. يتم تحديد أشكال 150 ميكروثانية و 2 مللي ثانية تجريبياً بواسطة سطوع الشرائح. في الرمز النهائي ، تحتاج إلى وضعها في متغيرات منفصلة بحيث يمكنك تغييرها أثناء تصحيح الأخطاء. من هذه الأرقام ، يمكن تحديد ترتيب الفرق في التيارات عبر جزأين في زوج واحد تقريبًا. نظرًا لأن قطاع G يضيء بحوالي 13 ضعفًا عن الأجزاء الأخرى ويوفر نفس السطوع ، فيمكن افتراض أن التيار من خلال هذا الجزء يزيد 13 مرة عن الآخر. في الواقع ، اعتماد السطوع على التيار غير خطي ، لذلك يمكن أن يكون التيار أكبر 25 مرة ، أي 50 مللي أمبير. مع أن دورة العمل هذه آمنة تمامًا لإنتاج MK. بالمناسبة ، لعب هذا الاختلاف في التيارات دورًا في حل مشكلة الشكل 2. كما كتبت أعلاه ، لا يمكن إضاءة الجزء G إلا مع الجزء C. ولكن إذا مررت صفر إلى MK MK ، المسؤولة عن C و G ، بمقدار 150 ،s ، وبعد 2 مللي ثانية للحفاظ على 1 عليها ، ثم الجزء G "سوف ينجح" في السطوع التام ، ولن يكون للجزء C لنفس الـ 150 ميكروثانية سوى الوقت لإبراز القليل. نحصل على اثنين كاملة تقريبا. وهكذا ، تمكنت من كسر القاعدة التي أنشأتها بنفسي. ما لا يمكن القيام به من اليأس.
لذلك ، أضاءنا الشكل بالأرجل الأربعة لأعضاء MK. في الواقع ، فاتني هذه المرحلة بنفسي ، وعرضت على الفور حرفين. للقيام بذلك ، افصل إخراج الأنود المشترك بأحد بتات المؤشر من power plus ، واتصل بمخرج MK آخر ، وأنود التفريغ الآخر بالمخرج التالي (6 أرجل بالفعل). الآن ، بدوره ، قم بتعيين 1 على أنود الرقم الأقل أهمية ، وقم بعرض رقم الرقم الأقل أهمية ، ثم 1 على أنود الرقم الصغير ، وقم بعرض رقم أعلى رقم ، وهكذا في دائرة. لقد أجريت هذه التجربة مع اردوينو نانو ، لديها ساق كافية. تم تصحيح جميع التعليمات البرمجية عليه ، وليس المرة الأولى. وهكذا عملت ، كما يجب.
نظرًا لأن الأنودات متصلة بدورها ، بمساعدة تحسين بسيط ، يمكن إصدار ناتج واحد إضافي من MK. هنا هو مخطط الملخص:
استخدم إجمالي 5 أرجل MK لعرض رقم مكون من خانتين. في هذه المرحلة ، يمكنك تجربة الطفل ATtiny بالفعل. ما فعلت. ولكن ليس على الفور. استغرق رسم تخطيطي تم تجميعه في بيئة Arduino لـ ATtiny13 حوالي 1.7 كيلو بايت من الذاكرة مع 1 كيلو بايت المتوفرة. لتقليل الحجم ، كان علي أن أتجه إلى المنافذ مباشرة ، وهو ما كنت سأفعله لاحقًا. بالمناسبة ، في Arduino استخدمت نفس المنافذ التي كنت سأستخدمها في ATtiny ، إنها مريحة للغاية. يشار إليها بالفعل في الرسم البياني الأخير. بعد المعالجة ، فقد الكود كيلوبايت واحد.
هنا هو الرمز الناتج عن ATtiny13:
سوف يسمح الكود أعلاه بقراءة ATtiny13 من 0 إلى 99. سيكون من الأصح توفير إمكانية إعادة تعيين أرجل MK. يمكن لمعلمي البرمجة تقليل الرمز عدة مرات (
أين هو الحد الأدنى ل Hello World على AVR؟ ).
يمكنك إضافة الوظيفة الضرورية إلى الكود بحيث يعرض MK شيئًا واعٍ. صحيح أن تينكي قد احتلت بالفعل جميع أرجلها. هناك أيضًا محطة إعادة ضبط يمكن استخدامها كمنفذ إدخال / إخراج. ولكن استخدامه كان أصعب مما كنت أعتقد. لذلك ، لنفسي أغادر "إلى وقت لاحق". ولكن هناك ميزة مثيرة للاهتمام لا يعرفها الجميع. المدخلات التناظرية ADC0 هو الإخراج إلى نفس الساق ، وأنها تعمل! صحيح ، عندما يكون الجهد الكهربائي أقل من 1/4 من فولطية التزويد ، تدخل MK في وضع إعادة الضبط. ولكن من 1/4 إلى الجهد الكهربائي للإمداد ، من الممكن قياس جهد الدخل. لقد استفدت من هذا:
تُظهر التجربة أنه يمكن تخفيض المؤشر إلى 21 ، وعندها فقط ينتقل MK إلى وضع إعادة الضبط ويبدأ العمل عندما يعود إلى حوالي 25 وما فوق. لذلك من الممكن عمل "مؤشر" خاطئ للغاية للإشارة إلى الجهد من 25 إلى 99 فولت ، بالطبع ، مع وجود مقسم على مدخلات القياس.
الآن عن التطبيق العملي. تم تأجيل الفكرة الأصلية المتمثلة في عرض البيانات من جهاز استشعار المسافة إلى أوقات أفضل بسبب عدم وجود مدخل رقمي واحد. لماذا يمكنك تطبيق المخطط حتى تأتي الأفكار. تحذير آخر: لا يمكن أن يكون هناك أي شك في أي ربح. حتى إذا كنت تدفع جميع القطاعات ، فإن تيار 2.5 مللي أمبير سوف يتدفق عبر المقاوم R2 (وفقًا للمخطط الأول) ، في إجمالي 10 مللي أمبير في المؤشر ، بالإضافة إلى أن التحكم في الترانزستور يضيف حوالي 5 أخرى. لم أذكر أن ترانزستور أي pnp تقريبًا حديث.
حول النفعية. أرخص خيار للإخراج إلى الجزء السابع هو ATtiny13 plus 74HC595. ستكلفني حالتان SMD حوالي 0.50 متر مكعب أبسطها ATmega8 (وهذا كل شيء ، لا مقاومات ، لا أكثر) ، 0.68 متر مكعب والخيار الموصوف أعلاه هو تكلفة ATtiny ، 9 مقاومات ، 4 LEDs ، ترانزستور (جميع SMDs) - هذا حوالي 0.46 متر مكعب ، على الرغم من أن كل قطعة أغلى ثمناً في بعض الأحيان. بالإضافة إلى ذلك ، يعد تجميع كل شيء أكثر تعقيدًا من الإصدارات السابقة.
في الواقع ، فإن الخيار الوحيد الذي يمكنني رؤيته هو ما إذا كان لديك ATtiny13 بالكامل ، ولكن لا يزال عليك الذهاب إلى متجر ATmega. حسنًا ، إذا كان المؤشر المكون من سبعة أجزاء هو الزخرفة الرئيسية لجهازك ، فلن أوصي بهذا المخطط ، فالشاشة ليست مثالية ، وفي بعض المجموعات يتم تمييز الأجزاء غير الضرورية قليلاً. يحدث أن هناك حاجة إلى إشارة في بعض الأحيان عند الإعداد ، ثم المكان نفسه.
بشكل عام ، قضيت بضعة أيام عبثا.
بالإضافة إلى النقد ، أنا في انتظار اقتراحات لتحسين الكود وتبسيط المخطط. أو تحسين وظائف دون تعقيد. ما يهمني أكثر هو كيفية تسليط الضوء على نقطة ، وهذا من شأنه توسيع نطاق. ولكن إذا استطعنا أيضًا إصدار استنتاج واحد من المشاركين الخمسة ، فسيكون من الممكن التجوال.
سأكون سعيدًا إذا كان حل غير قياسي الخاص بي سيفيد شخصًا ، ليس الآن ، يومًا ما.
محدث: أنا أعرف عن Charliplexing! مخطط الجهة الخارجية الذي أشرت إليه في بداية هذا المقال هو Charliplexing. وهناك كتبت لماذا Charliplexing غير مناسب.
من فضلك لا تكتب تعليقات إذا قرأت المقال قطريا.