تشفير البرمجيات. أفر

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

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

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

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

لكي يعمل التحكم في مستوى الصوت، عليك حل ثلاث مشاكل هندسية على الأقل:

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

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

[الخطوة 1: إنشاء جهاز USB منخفض السرعة على اللوح]

لقد مرت هذه الخطوة دون أن تبدأ - فهي بسيطة جدًا ومبتذلة إلى حد ما. لقد قمت بغباء بتنزيل مشروع مثال من الرابط. لقد قمت بتصحيح ملف usbconfig.h - وقمت بتسمية جهازي للعرض عرض التشفير، لم يكن هناك ما يكفي من الخيال للمزيد. لقد تحققت من نوع المعالج (ATmega16) وتردد الكوارتز (16 ميجاهرتز) في ملف Makefile ليتوافق مع لوحة التجارب AVR-USB-MEGA16 الخاصة بي. لقد قمت بتجميع المشروع في AVRStudio، وميض اللوحة، وتوصيله بالكمبيوتر - بدأ كل شيء بنصف دورة، وعمل جهاز USB الخاص بي بشكل صحيح كمنفذ COM افتراضي - كل شيء تمامًا كما هو مكتوب في المقالة.

[الخطوة 2. قم بتوصيل جهاز التشفير بجهاز USB]

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

كالعادة، بدأت بالبحث في الإنترنت بحثًا عن إجراءات فرعية جاهزة لقراءة برنامج التشفير. لقد عثرت بسرعة كبيرة على ما أحتاجه - خاصة بالنسبة لـ AVR، والتعليمات البرمجية البسيطة جدًا في لغة C، والملفات encoder.c، وencoder.h. مهما قلت، المصدر المفتوح شيء رائع.

لقد قمت بإرفاق مؤشرين LED - الأخضر والأصفر - للإشارة إلى اتجاه دوران جهاز التشفير. للراحة، قمت بتوصيل جهاز التشفير مباشرة بموصل ISP، مستفيدًا من حقيقة أن إشارات MOSI وMISO وSCK هي مجرد أطراف PB5 وPB6 وPB7 لوحدة التحكم الدقيقة ATmega16 (لقد قمت بتوصيل المرحلتين A وB هناك، وكذلك زر التشفير).

تعريفات الساق المصححة ورمز التهيئة المضافة. لقد أضفت وحدة encoder.c إلى المشروع. تمت إضافة التحكم في مصابيح LED الخضراء والصفراء إلى الحلقة الرئيسية عندما تأتي المعلومات من جهاز التشفير. يرتبط مؤشر LED الأحمر بزر التشفير - عندما نضغط عليه، يضيء مؤشر LED الأحمر، وعندما نحرره، ينطفئ. قام بتجميعه ووميضه - إنه يعمل. أدر المقبض إلى اليسار، ويومض مؤشر LED الأخضر في الوقت المناسب مع نقرات جهاز التشفير. أدر المقبض إلى اليمين ويومض مؤشر LED باللون الأصفر. على الرغم من حقيقة أن التشفير يتم قراءته باستخدام طريقة الاقتراع، وذلك بفضل الكود الفعال، لا توجد شكاوى حول قراءة التشفير، حتى عند العمل في وقت واحد مع مكتبة V-USB (احترام، باشجان!). تمت إضافة إخراج المعلومات من جهاز التشفير إلى منفذ COM الظاهري (أدر جهاز التشفير إلى اليسار واعرض علامات الطرح "-" على وحدة التحكم؛ وأدره إلى الشاشة اليمنى بالإضافة إلى علامات "+" على وحدة التحكم). باستخدام مؤقت، كل 10 مللي ثانية أعرض حالة زر التشفير وأشير إليه بمصباح LED أحمر (يتم الضغط على الزر - أقوم بنقل الرمز "1"، عند تحريره - "0"). كل شيء يعمل. ممل.

أخيرًا، قمت بطرح الوحدات النمطية cmd.c، وcrc16.c، وeepromutil.c، وstrval.c. انخفض حجم الكود إلى 3 كيلو بايت - رائع، الآن سوف يتناسب مع ذاكرة ATtiny45 (يمكنك استخدام لوحة التجارب AVR-USB-TINY45 في المستقبل، فهي أصغر وأرخص).

[الخطوة 3. اكتشف كيفية التحكم في التحكم في مستوى الصوت برمجيًا]

كالعادة، بحثت في جوجل عن السؤال. لقد نخلت مجموعة من القمامة، وأخيراً حصدت لؤلؤة - . ثم إنها مسألة تكنولوجيا. أقوم بإخراج مجموعة البناء المفضلة لأطفالي - Visual Studio. دون التفكير في أي شيء، قمت بإنشاء تطبيق قائم على الحوار باستخدام المعالج. أقوم بإسقاط شريط تمرير التحكم في مستوى الصوت على اللوحة، وربط متغير به، وإضافة معالج موضع شريط التمرير. عندما يبدأ التطبيق، أقوم بضبط المحرك على الحد الأدنى 0 والحد الأقصى 65535 (ليتوافق مع حدود قيمة الحجم التي يتم التعامل معها بواسطة مكتبات التحكم في الخلاط). قرأته مع وظيفة تفاصيل خلاطGetControlقيمة مستوى الصوت الحالية، واضبط شريط التمرير على الموضع المناسب. في معالج موضع شريط التمرير، كل شيء هو العكس - أقرأ موضع شريط التمرير واستخدم الوظيفة mixSetControlDetailsقمت بتعيين الحجم المطلوب. أتحكم في مستوى الصوت تمامًا كما هو مكتوب في المقالة. لقد راجعت ذلك - إنه يعمل.

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

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

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

[تحديث120803]

قام أحد الأشخاص المختصين بتجميع AVR على وحدة تحكم دقيقة

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

ميزات التشفير التزايدي

جهاز التشفير التزايدي، مثل أي نوع آخر من أجهزة التشفير، هو جهاز ذو مقبض دوار. إنه يشبه بشكل غامض مقياس الجهد. والفرق الرئيسي عن مقياس الجهد هو أن مقبض التشفير يدور 360 درجة. ليس لديها مواقف متطرفة.

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

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

يوجد داخل جهاز التشفير التزايدي قرص به علامات وشرائح منزلقة تلمسها. هيكلها يشبه مقياس الجهد.

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

يحتوي جهاز التشفير على ثلاثة دبابيس معلومات، واحد مشترك، وعادة ما يطلق على الاثنين الآخرين اسم "A" و "B"، في الشكل أعلاه ترى دبوس جهاز التشفير باستخدام زر - يمكنك استقبال إشارة عند الضغط على عموده.

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

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

فيما يلي مثال على دبوس التشفير الحقيقي:

مثير للاهتمام:

يمكن استبدال جهاز التشفير المعيب بزرين غير قابلين للإغلاق، والعكس صحيح: يمكن تعديل منتج محلي الصنع يتم التحكم فيه بواسطة زرين من هذا القبيل عن طريق تثبيت جهاز تشفير.

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

وهذا موضح بشكل لا يقل وضوحًا في الرسم المتحرك التالي (انقر على الصورة):

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

كما ذكرنا سابقًا، يمكن تحديد اتجاه الدوران من خلال أي من إشارات الخرج تغيرت أولاً، وهذا ما يبدو عمليًا!

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

ولكن هناك فارق بسيط، وهو أن التعيين المماثل LPR هو عدد الملصقات الموجودة على القرص.

وعدد النبضات المعالجة. تنتج كل علامة على القرص موجة مربعة واحدة على كل من المخرجين. النبض له جبهتان - خلفية وأمامية. نظرًا لوجود مخرجين، فإننا نتلقى من كل منهما إجمالي 4 نبضات يمكنك معالجة قيمها.

تواصل مع اردوينو

لقد قمنا بتغطية ما تحتاج لمعرفته حول التشفير التزايدي، والآن دعنا نتعرف على كيفية توصيله بـ Arduino. دعونا نلقي نظرة على مخطط الاتصال:

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

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

دعونا نلقي نظرة على الكود بمزيد من التفصيل، واحدًا تلو الآخر. في الإعداد الفارغ () أعلنا أننا سنستخدم الاتصال التسلسلي ثم نضبط الأطراف 2 و 8 على وضع الإدخال. اخترت أرقام التعريف الشخصية بنفسك بناءً على مخطط الاتصال الخاص بك. يضبط الثابت INPUT_PULLUP وضع الإدخال لدى Arduino:

    INPUT - الإدخال بدون مقاومات السحب؛

    INPUT_PULLUP - توصيل مقاومات السحب بالإدخال. يوجد داخل وحدة التحكم الدقيقة بالفعل مقاومات يتم من خلالها توصيل الإدخال بمصدر الطاقة الموجب (السحب).

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

منطق البرنامج الرئيسي هو كما يلي: إذا كان لدينا واحد عند الإدخال "2"، فإنه يخرج H إلى شاشة المنفذ، وإذا لم يكن، L. وبالتالي، عند الدوران في اتجاه واحد على شاشة المنفذ التسلسلي، تحصل على شيء ما مثل هذا: LL HL HH LH LL. وفي الاتجاه المعاكس: LL LH HH HL LL.

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

خاتمة

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

في هذا المشروع التجريبي سوف ننظر في مهمة ربط عنصر تحكم يسمى المشفر مع متحكم PIC.

لتنفيذ المشروع التوضيحي سنحتاج إلى:

  • جهاز تشفير ذو 24 موضعًا؛
  • 16 مصباح LED (3 مم)؛
  • يقودها سائق؛
  • متحكم

يعد التشفير عنصر تحكم حديث وأصلي للأجهزة الرقمية، وهو يشبه في المظهر المقاوم المتغير (انظر الشكل أدناه). الاسم الآخر لعنصر التحكم هذا هو مستشعر الزاوية ومستشعر الدوران. يكون دوران العمود مصحوبًا بنقرات، على سبيل المثال 24 نقرة لكل دورة. يحتوي جهاز التشفير على 3 مخارج - A وB وC ويستخدم لإدخال البيانات بسرعة إلى الأجهزة الرقمية. تحتوي بعض الطرز على زر مدمج يتم تنشيطه بالضغط على عمود التشفير (تتم إضافة مخرج آخر).

مبدأ تشغيل التشفير

عند الدوران بنقرة واحدة، على سبيل المثال، إلى اليمين، يتم إغلاق جهة الاتصال A+C أولاً، ثم B+C. عندما يتم تشغيل العمود عند هذه النقرة، يتم فتح نقاط الاتصال بنفس التسلسل. عندما يتم تدوير العمود في الاتجاه الآخر، يتغير تسلسل الإغلاق مع جهة الاتصال C، أي. عند الانعطاف إلى اليسار، يتم إغلاق B+C أولاً، ثم A+C.

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


رسم تخطيطي: توصيل جهاز التشفير بالمتحكم الدقيق PIC (انقر للتكبير)

يتم توصيل أطراف التشفير A وB بمنفذي وحدة التحكم الدقيقة RB4 وRB5، ويتم توصيل طرف التشفير C بالأرض. تجدر الإشارة إلى أنه يجب توصيل مقاومات السحب بخطوط إشارة الأطراف A و B. ليس من قبيل الصدفة أن يكون جهاز التشفير متصلاً بخطوط الإدخال / الإخراج المحددة لوحدة التحكم الدقيقة: أولاً، يحتوي المنفذ B على مقاومات سحب مدمجة ولا يتعين علينا توصيل مقاومات خارجية، وثانيًا، المنفذ B لوحدة التحكم الدقيقة لديه وظيفة مفيدة للغاية - "المقاطعة عند التغيير" - المقاطعة عن طريق تغيير المستوى، مما سيسمح لنا بمراقبة حالة برنامج التشفير.

يتم استخدام 16 مصباح LED عادي مقاس 3 مم لتصور بيانات الإدخال وسيتم وضعها على لوحة الدائرة المطبوعة حول جهاز التشفير المثبت. ترتبط مصابيح LED بشريحة A6276.

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

برنامج المتحكم الدقيق لحل مشكلتنا بسيط نسبيًا. هناك 3 أوضاع تشغيل (إدخال المعلومات) وردود الفعل:

  • وضع تحديد المواقع بزاوية 360 درجة - في هذا الوضع، تشير مصابيح LED إلى "الموضع" الحالي لجهاز التشفير، ويمكن للمستخدم تدوير عمود التشفير إلى اليسار واليمين إلى أي زاوية؛
  • وضع "مستوى الصوت/المستوى" - في هذا الوضع، تشير مصابيح LED إلى القيمة الحالية بين الحد الأدنى والحد الأقصى لمستويات الإدخال (مثل مستوى الصوت في أجهزة الصوت)؛
  • وضع المفتاح الدوار ثلاثي المواضع - في هذا الوضع، لا يوجد سوى ثلاثة أوضاع قابلة للتحديد يختارها المستخدم عن طريق تحويل عمود التشفير إلى اليسار/اليمين.

مظاهرة للمشروع

لقد تمت بالفعل مناقشة مبدأ التشغيل ومخطط الاتصال والكود المصدري للمكتبة للعمل مع برنامج التشفير التزايدي في إحدى المقالات. اليوم سنتحدث عن التطبيق العملي لجهاز التشفير. على سبيل المثال، اخترت برنامج مولد موجة مربعة مع نطاق تردد التشغيل من 1 - 100 هرتز. افترضت الخطة الأصلية مدى يتراوح من 1 إلى 1000 هرتز، ولكن في الممارسة العملية اتضح أن المرور عبر ألف قيمة أمر شاق حتى مع وجود برنامج تشفير.

تحضير

إنشاء مشروع جديد في مساحة عمل فارغة

المشروع > إنشاء مشروع جديد...

نوع القالب C> رئيسي

انسخ الملفات المصدر للمكتبة للعمل مع برنامج التشفير إلى مجلد المشروع
encoder.h وencoder.c

نقوم بتوصيل ملف encoder.c بمشروعنا
زر الماوس الأيمن في نافذة مساحة العمل وفي القائمة التي تفتح "إضافة" > "إضافة ملفات"...

انسخ الملف bits_macros.h إلى مجلد المشروع.


بما في ذلك ملفات الرأس

في بداية الملف main.c نكتب الأسطر التالية
#يشمل
#يشمل
#تشمل "التشفير.h"
#تتضمن "bits_macros.h"

ضبط إعدادات المشروع

المشروع > الخيارات

نوع المتحكم الدقيق
خيارات عامة > الهدف > تكوين المعالج > ATMega8535

السماح باستخدام أسماء البت المحددة في ملفات الرأس
خيارات عامة > النظام > تمكين تعريفات البت...

تحسين الكود للحجم
مترجم C/C++ > التحسينات > الحجم العالي

نوع ملف الإخراج
رابط > ملف الإخراج تحقق من تجاوز الإعداد الافتراضي وقم بتغيير الامتداد إلى سداسي عشري
رابط > التنسيق > أخرى، حدد Intel Standard

انقر فوق موافق. احفظ المشروع ومساحة العمل.
الآن لدينا مشروع فارغ به مكتبة متصلة وإعدادات محددة.

مهمة

اجعل المتحكم الدقيق يولد موجة مربعة بتردد من 1 إلى 100 هرتز. يجب ضبط قيمة التردد باستخدام جهاز التشفير. يجب أن يتوافق تدوير جهاز التشفير بموضع واحد مع تغيير في تردد المولد بمقدار 1 هرتز.

رسم تخطيطي لمثالنا

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

خوارزمية البرنامج

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

يتم استخدام الدبوس PD5 (OC1A) لتوليد الإشارة. لها وظائف بديلة - يمكنها تغيير حالتها إلى العكس إذا كان سجل العد وسجل المقارنة متساويين.

في البرنامج الرئيسي، في حلقة لا نهاية لها، يقوم المتحكم الدقيق باستطلاع المخزن المؤقت للتشفير، اعتمادًا على قيمته، يقلل أو يزيد متغير pTimerValue.

في بداية البرنامج الرئيسي يوجد كود لتهيئة الأجهزة الطرفية والمتغيرات الضرورية.

هيكل البرنامج

من أجل الوضوح، لقد قمت بتصوير هيكل البرنامج في شكل رسم تخطيطي.

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

  • التهيئة.
  • حلقة لا نهائية (ما يسمى بـ superloop) يتم فيها انتظار حدث ما، وعادة ما تكون على شكل إشارات اقتراع أو نوع من المخزن المؤقت.
  • التشغيل المتوازي للأجهزة الطرفية التي تسبب انقطاعات. يقومون بتشغيل بعض التعليمات البرمجية (ويفضل أن تكون قصيرة) ووضع العلامات.

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

حساب الثوابت للمؤقت T1

دعونا نحسب قيمة الثابت لتردد 1 هرتز. لقد قدمت بالفعل عملية حسابية مماثلة، ولكن سيكون من المفيد أن نتذكرها

تردد الساعة لوحدة التحكم الدقيقة هو 16 ميجا هرتز (انظر الرسم البياني). عامل ضبط المؤقت المؤقت هو 256. وهو يسمح لك بالحصول على المقاطعات بأي تردد من نطاقنا.

ستكون فترة علامة المؤقت الواحدة مساوية لـ 1/(16 ميجاهرتز/256) = 16 ميكروثانية

عند الطرف PD5 نحتاج إلى استقبال إشارة بتردد 1 هرتز. يغير الدبوس حالته لكل مقاطعة مؤقتة، مما يعني أن تردد المقاطعة يجب أن يكون أعلى مرتين. لحالتنا - 2 هرتز.

كم عدد علامات المؤقت التي تناسب 2 هرتز؟ (1/2 هرتز)/16 ميكروثانية = 31250
وهذا هو الثابت المطلوب.

يتم حساب القيم المتبقية بنفس الطريقة. عادةً ما أستخدم برنامج Excel لهذا الغرض.


نضع القيم الناتجة في مصفوفة

__فلاش كثافة العمليات غير الموقعةقيمة الموقت =
{

احفظه في ملف منفصل – timer_value.h وقم بتوصيله بالملف main.c

#تتضمن "timer_value.h"

نعم، لا تزال بحاجة إلى إضافة بعض الثوابت إلى هذا الملف

#حدد MAX_TIM_VALUE 99
#حدد MIN_TIM_VALUE 0

دعونا نتأكد من أننا قمنا بحساب ثوابت المؤقت بشكل صحيح. دعونا نطلقها. سيكون رمز البرنامج هكذا.

// برمجة AVR في لغة C

//الموقع الإلكتروني 17/10/09
#يشمل
#يشمل
#تشمل "التشفير.h"
#تتضمن "bits_macros.h"
#تتضمن "timer_value.h"

// فهرس للوصول إلى عناصر المصفوفة
حرف متقلب غير موقع pTimerValue = 0;

كثافة العملياترئيسي( فارغ )
{
// تهيئة المؤقت T1
TCNT1 = 0;
TCCR1A = (0<TCCR1B = (0<

// قم بتعيين دبوس PD5 للإخراج
SetBit(PORTD, PD5);
SetBit(DDRD, PD5);

// لا تفعل شيئًا في حلقة لا نهاية لها
بينما(1);
يعود 0;
}

أعتقد أن جزء تهيئة المؤقت فقط هو الذي يتطلب شرحًا.

إعادة ضبط سجل العداد
TCNT1 = 0;

تهيئة سجلات تكوين مؤقت T1.
TCCR1A = (0<TCCR1B = (0<

حيث تقوم البتات WGM13، WGM12، WGM11، WGM10 بتعيين وضع تشغيل المؤقت - CTC،
CS12، CS11، CS10 – تحديد معامل المقياس المسبق للمؤقت –256،

COM1A1، COM1A0 – تحديد سلوك طرف PD5(OC1F) – في هذه الحالة، بناءً على إشارة المؤقت، فإنه سيغير حالته إلى الحالة المعاكسة


تهيئة سجل المطابقة للقيمة الأولية.
OCR1A = timerValue;

نقوم بتجميع البرنامج وتحميله في المتحكم الدقيق. يجب أن يومض مؤشر LED بتردد 1 هرتز.
لا توجد انقطاعات في البرنامج. لا يوجد أي تلاعب في دبوس PD5. ومع ذلك، يومض مؤشر LED!

برنامج

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


#define PORT_Enc PORTA
#تعريف PIN_Enc PINA
#define DDR_Enc DDRA
#تعريف Pin1_Enc 2
#تعريف Pin2_Enc 1

#تعريف RIGHT_SPIN 0x01
#define LEFT_SPIN 0xff

يحتوي الرأس على نماذج أولية لثلاث وظائف. دعونا نتذكر غرضهم.

باطلة ENC_InitEncoder (باطلة)يقوم بتكوين دبابيس وحدة التحكم الدقيقة التي يتصل بها جهاز التشفير بالإدخال. يجب استدعاء هذه الوظيفة في بداية الأمر الرئيسي.


ENC_PollEncoder باطلة (باطلة)- يستقصي جهاز التشفير مرة واحدة، ويحلل الحالات الحالية والسابقة ويكتب الثوابت المقابلة (RIGHT_SPIN وLEFT_SPIN) في المخزن المؤقت. سيتم وضع هذه الوظيفة في مقاطعة مؤقت T0.


حرف غير موقع ENC_GetStateEncoder (باطل)- إرجاع محتويات المخزن المؤقت للتشفير. إذا لم يكن التدوير بموضع واحد ثابتًا، فسترجع الدالة 0؛ وإذا كان التدوير ثابتًا، فستعيد الدالة قيمة الثابت المقابل. سيؤدي هذا إلى مسح قيمة المخزن المؤقت. سيتم استدعاء هذه الوظيفة في البرنامج الرئيسي - في الحلقة while.


نحن الآن بصدد توسيع برنامجنا. يمكنك محاولة القيام بذلك بنفسك.

// برمجة AVR في لغة C
// مثال على استخدام برنامج التشفير
//الموقع الإلكتروني 17/10/09

#يشمل
#يشمل
#تشمل "التشفير.h"
#تتضمن "bits_macros.h"
#تتضمن "timer_value.h"

#تعريف TCNT0_const 253
#تعريف TCCR0_const 5

حرف متقلب غير موقع pTimerValue = 0;

كثافة العملياترئيسي( فارغ )
{
ENC_InitEncoder();

// تهيئة المؤقت t0
TCNT0 = TCNT0_const;
TCCR0 = TCCR0_const;

// تهيئة المؤقت t1
TCNT1 = 0;
TCCR1A = (0<TCCR1B = (0<OCR1A = timerValue;

// تمكين المقاطعات الموقت
//t0 - عن طريق الفائض، t1 - عن طريق الصدفة

تيمسك = (1<

// قم بتعيين PD5 للإخراج
SetBit(PORTD, PD5);
SetBit(DDRD, PD5);

__enable_interrupt ();
بينما (1){
// اقرأ محتويات المخزن المؤقت لبرنامج التشفير
// بعد القراءة يتم مسحه

حرف غير موقعة StateEnc = ENC_GetStateEncoder();

// إذا لم يكن فارغا
لو(stateEnc! = 0)(
// تحديد اتجاه الدوران وتغيير متغير timerValue
لو(stateEnc == RIGHT_SPIN)(
لو(pTimerValue == MAX_TIM_VALUE) pTimerValue = MIN_TIM_VALUE;
آخر pTimerValue++;
}
لو(stateEnc == LEFT_SPIN) (
لو(pTimerValue == MIN_TIM_VALUE) pTimerValue = MAX_TIM_VALUE;
آخر pTimerValue--;
}
}
}
يعود 0;
}

// استطلاع التشفير
#pragma Vector=TIMER0_OVF_vect
__interruptفارغ timer0_ovf_my( فارغ)
{
TCNT0 = TCNT0_const;
ENC_PollEncoder();
}

#pragma Vector=TIMER1_COMPA_vect
__interrupt فارغ timer1_compa_my( فارغ)
{
// تحديث قيمة سجل المقارنة
OCR1A = timerValue;
}

يبدو أن كل شيء يجب أن يكون واضحا.
يمكن أيضًا كتابة جزء التعليمات البرمجية الذي يغير قيمة pTimerValue على النحو التالي:

لو(stateEnc ! = 0) (
pTimerValue = pTimerValue +stateEnc;
لو(pTimerValue == (MAX_TIM_VALUE + 1)) pTimerValue = MIN_TIM_VALUE;
وإلا إذا(pTimerValue == (MIN_TIM_VALUE - 1)) pTimerValue = MAX_TIM_VALUE;
}

عندما يتم تدوير جهاز التشفير إلى اليمين، تتم إضافة pTimerValue إلى 1، أي يتم زيادته.

عند تدوير جهاز التشفير إلى اليسار، تتم إضافة pTimerValue إلى 0xff، وهو ما يعادل طرح 1. إنها نفس العملية، ولكن النتيجة هي عكس ذلك تمامًا.

لتنفيذ المشروع التوضيحي سنحتاج إلى:

  • جهاز تشفير ذو 24 موضعًا؛
  • 16 مصباح LED (3 مم)؛
  • سائق LED A6276؛
  • المتحكم الدقيق PIC18F2550

يعد التشفير عنصر تحكم حديث وأصلي للأجهزة الرقمية، وهو يشبه في المظهر المقاوم المتغير (انظر الشكل أدناه). الاسم الآخر لعنصر التحكم هذا هو مستشعر الزاوية ومستشعر الدوران. يكون دوران العمود مصحوبًا بنقرات، على سبيل المثال 24 نقرة لكل دورة. يحتوي جهاز التشفير على 3 مخارج - A وB وC ويستخدم لإدخال البيانات بسرعة إلى الأجهزة الرقمية. تحتوي بعض الطرز على زر مدمج يتم تنشيطه بالضغط على عمود التشفير (تتم إضافة مخرج آخر).

مبدأ تشغيل التشفير

عند الدوران بنقرة واحدة، على سبيل المثال، إلى اليمين، يتم إغلاق جهة الاتصال A+C أولاً، ثم B+C. عندما يتم تشغيل العمود عند هذه النقرة، يتم فتح نقاط الاتصال بنفس التسلسل. عندما يتم تدوير العمود في الاتجاه الآخر، يتغير تسلسل الإغلاق مع جهة الاتصال C، أي. عند الانعطاف إلى اليسار، يتم إغلاق B+C أولاً، ثم A+C.

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

رسم تخطيطى

يتم توصيل أطراف التشفير A وB بمنفذي وحدة التحكم الدقيقة RB4 وRB5، ويتم توصيل طرف التشفير C بالأرض. تجدر الإشارة إلى أنه يجب توصيل مقاومات السحب بخطوط إشارة الأطراف A و B. ليس من قبيل الصدفة أن يكون جهاز التشفير متصلاً بخطوط الإدخال / الإخراج المحددة لوحدة التحكم الدقيقة: أولاً، يحتوي المنفذ B على مقاومات سحب مدمجة ولا يتعين علينا توصيل مقاومات خارجية، وثانيًا، المنفذ B لوحدة التحكم الدقيقة لديه وظيفة مفيدة للغاية - "المقاطعة عند التغيير" - المقاطعة عن طريق تغيير المستوى، مما سيسمح لنا بمراقبة حالة برنامج التشفير.

يتم استخدام 16 مصباح LED عادي مقاس 3 مم لتصور بيانات الإدخال وسيتم وضعها على لوحة الدائرة المطبوعة حول جهاز التشفير المثبت. ترتبط مصابيح LED بشريحة A6276.

شريحة A6276 عبارة عن برنامج تشغيل LED مزود بإدخال تسلسلي 16 بت. يحتوي برنامج التشغيل على سجل تحويل CMOS 16 بت، ومزالج ومحركات مرتبطة للتحكم في مصابيح LED، ويمكنه تشغيل عدد أكبر من مصابيح LED مما يسمح به جهاز التحكم الدقيق. بالإضافة إلى ذلك، يمكن التحكم في برنامج التشغيل عبر واجهة SPI، مما يقلل من عدد خطوط الإدخال/الإخراج المستخدمة ويجعل المشروع قابلاً للتطوير.

برنامج المتحكم الدقيق لحل مشكلتنا بسيط نسبيًا. هناك 3 أوضاع تشغيل (إدخال المعلومات) وردود الفعل:

  • وضع تحديد المواقع بزاوية 360 درجة - في هذا الوضع، تشير مصابيح LED إلى "الموضع" الحالي لجهاز التشفير، ويمكن للمستخدم تدوير عمود التشفير إلى اليسار واليمين إلى أي زاوية؛
  • وضع "مستوى الصوت/المستوى" - في هذا الوضع، تشير مصابيح LED إلى القيمة الحالية بين الحد الأدنى والحد الأقصى لمستويات الإدخال (مثل مستوى الصوت في أجهزة الصوت)؛
  • وضع المفتاح الدوار ثلاثي المواضع - في هذا الوضع، لا يوجد سوى ثلاثة أوضاع قابلة للتحديد يختارها المستخدم عن طريق تحويل عمود التشفير إلى اليسار/اليمين.

مظاهرة للمشروع

التحميلات

يوجد أرشيف ZIP مع مشروع في بيئة MPLAB وكود المصدر في Hitech C، بالإضافة إلى مخطط الدائرة وطوبولوجيا لوحة الدوائر المطبوعة.