فهرست مطالب:

آموزش AVR Assembler 9: 7 مرحله
آموزش AVR Assembler 9: 7 مرحله

تصویری: آموزش AVR Assembler 9: 7 مرحله

تصویری: آموزش AVR Assembler 9: 7 مرحله
تصویری: جلسه ششم آموزش میکروکنترلر رجیسترهای میکروکنترلر AVR 2024, جولای
Anonim
آموزش AVR Assembler 9
آموزش AVR Assembler 9

به آموزش 9 خوش آمدید

امروز نحوه کنترل صفحه نمایش 7 قسمتی و 4 رقمی را با استفاده از کد زبان اسمبلی ATmega328P و AVR نشان خواهیم داد. در حین انجام این کار ، ما مجبوریم راههای دیگری را در مورد نحوه استفاده از stack برای کاهش تعداد ثبت هایی که باید به هم متصل کنیم ، انجام دهیم. ما چند خازن (فیلترهای کم گذر) اضافه می کنیم تا سعی کنیم نویز صفحه کلید خود را کاهش دهیم. ما از چند ترانزیستور یک تقویت کننده ولتاژ ایجاد می کنیم تا سوئیچ قطع INT0 ما برای دکمه های ولتاژ پایین تر در ردیف پایین صفحه کلید بهتر کار کند. و ما سرمان را کمی به دیوار می کوبیم تا مقاومت های مناسب را بدست آوریم تا کار به درستی انجام شود.

ما از صفحه کلید خود در آموزش 7 استفاده می کنیم

برای انجام این آموزش ، علاوه بر موارد استاندارد ، به موارد زیر نیز نیاز دارید:

  1. دارای صفحه نمایش 7 قسمتی

    www.sparkfun.com/products/8546

  2. صفحه نمایش 4 رقمی

    www.sparkfun.com/products/11407

  3. یک دکمه فشاری

    www.sparkfun.com/products/97

  4. برگه های داده برای صفحه نمایش که می توانید از صفحات مربوطه آنها که در بالا پیوند دارند بارگیری کنید.
  5. یک خازن سرامیکی 68 pf ، چند خازن 104 ، یک دسته مقاومت ، دو ترانزیستور 2N3904 NPN.

در اینجا پیوندی به مجموعه کامل آموزش های مونتاژ AVR من آمده است:

مرحله 1: سیم کشی صفحه نمایش 7 سگی

سیم کشی صفحه نمایش 7 سگ
سیم کشی صفحه نمایش 7 سگ
سیم کشی صفحه نمایش 7 سگ
سیم کشی صفحه نمایش 7 سگ
سیم کشی صفحه نمایش 7 سگ
سیم کشی صفحه نمایش 7 سگ

ما قصد داریم از همان کدی که در آموزش 7 برای صفحه کلید استفاده کردیم برای کنترل صفحه نمایش 7 قسمتی استفاده کنیم. بنابراین شما باید یک نسخه از آن تهیه کنید و ما آن را اصلاح می کنیم.

ما بخش ها را به پین های میکروکنترلر خود به شرح زیر ترسیم می کنیم:

(dp، g، f، e، d، c، b، a) = (PD7، PD6، PB5، PB4، PB3، PB2، PB1، PB0)

جایی که حروف قطعات در تصویر به همراه pinout مربوط به 5 ولت معمولی و هر یک از بخشهای LED شامل نقطه اعشار (dp) در سمت راست پایین صفحه نمایش داده می شود. دلیل این امر این است که ما می توانیم کل شماره را در یک ثبات و خروجی وارد کنیم که در پورت B و D ثبت می شود تا بخش ها روشن شوند. همانطور که می بینید بیت ها به ترتیب از 0 تا 7 شماره گذاری می شوند و بنابراین بدون نیاز به تنظیم و پاک کردن بیت های جداگانه ، به پین های صحیح ترسیم می شوند.

همانطور که می توانید با کدی که در مرحله بعدی ضمیمه کرده اید ، مشاهده کنید ، ما روال صفحه نمایش خود را به حالت کلان منتقل کرده ایم و پین های SDA و SCL را برای استفاده بعدی در آموزش بعدی آزاد کرده ایم.

باید اضافه کنم که شما باید یک مقاومت بین آند معمولی صفحه نمایش و ریل 5 ولت قرار دهید. من طبق معمول یک مقاومت 330 اهم را انتخاب کردم اما اگر دوست دارید می توانید حداقل مقاومت مورد نیاز را برای بدست آوردن حداکثر روشنایی از صفحه نمایش بدون سرخ کردن آن محاسبه کنید. در اینجا نحوه انجام این کار آمده است:

ابتدا به برگه اطلاعات نگاه کنید و توجه کنید که در صفحه اول ویژگی های مختلف صفحه نمایش را نشان می دهد. مقادیر مهم عبارتند از "جریان پیش رو" (I_f = 20mA) و "ولتاژ رو به جلو" (V_f = 2.2V). اینها به شما می گویند که می خواهید افت ولتاژ روی صفحه نمایش در صورت برابر بودن جریان با جریان جلو باشد. این حداکثر جریانی است که صفحه نمایش بدون سرخ شدن مصرف می کند. در نتیجه این حداکثر روشنایی است که می توانید از بخش ها بدست آورید.

بنابراین بیایید از قانون اهم و قانون حلقه Kirchoff استفاده کنیم تا دریابیم که حداقل مقاومت را برای به دست آوردن حداکثر روشنایی در سری به همراه صفحه نمایش چقدر باید انجام دهیم. قانون Kirchoff می گوید که مجموع تغییرات ولتاژ در یک حلقه بسته در یک مدار برابر صفر است و قانون اهم می گوید که افت ولتاژ در مقاومت R برابر است با:

بنابراین با توجه به منبع ولتاژ V و دور زدن مدار خود ، موارد زیر را داریم:

V - V_f - I R = 0

به این معنی که (V - V_f)/I = R. بنابراین مقاومت لازم برای بدست آوردن حداکثر روشنایی (و احتمالاً سرخ کردن بخش ها) برابر خواهد بود:

R = (V - V_f)/I_f = (5.0V - 2.2V) /0.02A = 140 اهم

بنابراین اگر می خواهید می توانید بدون هیچ نگرانی با خوشحالی از 150 اهم استفاده کنید. با این حال ، من فکر می کنم 140 اهم آن را بسیار دوست داشتنی می کند و بنابراین از 330 اهم (که به نوعی مقاومت شخصی گلدیلاک من برای LED ها است) استفاده می کنم.

مرحله 2: کد مونتاژ و فیلم

من کد مونتاژ و ویدئویی را که عملکرد صفحه کلید را با صفحه نمایش نشان می دهد ضمیمه کرده ام. همانطور که می بینید ما به سادگی کلید شماره گیری مجدد را به "r" ، کلید فلش را به "F" ، ستاره را به "A" و علامت هش را به "H" ترسیم کرده ایم. اگر بخواهید همچنان از صفحه کلید برای تایپ اعداد در نمایشگرهای LCD یا نمایشگرهای 4 رقمی استفاده کنید ، می توانید در عملیات مختلف مانند backspace ، enter و غیره نقشه برداری کنید. این بار کد را خط به خط بررسی نمی کنم زیرا بسیار شبیه به آنچه در آموزش های قبلی انجام داده ایم است. تفاوتها عمدتا بیشتر همان چیزهایی است که ما قبلاً می دانیم چگونه انجام دهیم ، مانند وقفه ها و جداول جستجو. شما فقط باید کد را مرور کرده و موارد جدیدی را که اضافه کرده ایم و چیزهایی را که تغییر داده ایم ، مشاهده کنید و از آنجا بفهمید. وقتی جنبه های جدیدی از برنامه نویسی زبان اسمبلی را در میکروکنترلرهای AVR معرفی می کنیم ، در آموزش بعدی به تحلیل خط به خط باز خواهیم گشت.

حالا بیایید به یک صفحه نمایش 4 رقمی نگاه کنیم.

مرحله 3: سیم کشی صفحه نمایش 4 رقمی

سیم کشی صفحه نمایش 4 رقمی
سیم کشی صفحه نمایش 4 رقمی
سیم کشی صفحه نمایش 4 رقمی
سیم کشی صفحه نمایش 4 رقمی

طبق برگه اطلاعات ، صفحه نمایش 4 رقمی دارای جریان پیش رو 60 میلی آمپر و ولتاژ رو به جلو 2.2 ولت است. بنابراین ، با همان محاسبه قبلی ، در صورت تمایل می توانم از مقاومت 47 اهم استفاده کنم. در عوض من از یک … hrm استفاده می کنم.. بگذارید ببینم … حدود 330 اهم.

نحوه اتصال صفحه نمایش 4 رقمی به این صورت است که 4 آند وجود دارد ، یکی برای هر یک از رقم ها ، و پین های دیگر کنترل می کنند که کدام قسمت در هر کدام روشن می شود. شما می توانید 4 رقم را همزمان نشان دهید زیرا آنها چندگانه هستند. به عبارت دیگر ، درست مانند جفت تاس ، ما به سادگی قدرت را در هر یک از آندها به نوبه خود می چرخانیم و آنها یکی پس از دیگری چشمک می زنند. این کار را آنقدر سریع انجام می دهد که چشم های ما پلک زدن را نمی بینند و به نظر می رسد که هر چهار رقم روشن است. با این حال ، فقط برای اطمینان ، نحوه کدگذاری این است که هر چهار رقم را تنظیم کنیم ، سپس آندها را چرخه کنیم ، نه اینکه تنظیم ، حرکت ، تنظیم ، حرکت و غیره را انجام دهیم. به این ترتیب می توان یک زمان دقیق بین روشن شدن هر رقم بدست آورد. به

در حال حاضر ، بیایید آزمایش کنیم که همه بخش ها کار می کنند.

مقاومت 330 اهم خود را بین ریل مثبت تخته نان خود و اولین آند روی صفحه قرار دهید. برگه داده به ما می گوید که پین ها از 1 تا 16 خلاف جهت عقربه های ساعت شماره گذاری می شوند که از پایین سمت چپ شروع می شود (هنگامی که شما معمولاً به صفحه نمایش نگاه می کنید.. با اعشار در پایین) و در آن آمده است که آندها شماره پین 6 هستند. ، 8 ، 9 و 12

بنابراین ما پین 6 را به 5 ولت متصل می کنیم و سپس از ریل GND شما یک سوئیچ منفی می گیریم و آن را به سایر پین های دیگر وارد می کنیم و می بینیم که همه قسمت ها بر روی رقمی که مطابق است روشن می شود (که در واقع رقم دوم از حق) اطمینان حاصل کنید که تمام 7 بخش و نقطه اعشار را روشن کنید.

حالا سیم GND خود را به یکی از پایه ها بچسبانید تا یکی از قسمت ها روشن شود و این بار مقاومت را به 3 آند دیگر منتقل کنید و ببینید که در هر رقم دیگر همان قسمت روشن می شود.

چیزی غیر عادی؟

به نظر می رسد که pinout در صفحه داده اشتباه است. این به این دلیل است که برگه داده و pinout صفحه نمایش 12 پین و 4 رقمی است. یعنی یکی بدون کولون یا اعشار بالا صفحه نمایش که هنگام سفارش به دست آوردم ، صفحه نمایش 16 پین و 4 رقمی است. در واقع ، روی من ، آندهای قطعه در پین 1 ، 2 ، 6 و 8 قرار دارند. آند روده بزرگ پین 4 است (پین کاتد 12) و آند dp فوقانی پین 10 است (کاتد پین 9 است)

تمرین 1: با استفاده از مقاومت و سیم زمین خود بفهمید که کدام پین مربوط به کدام بخش و نقطه اعشار روی صفحه است ، بنابراین هنگام کد نویسی قطعات صحیح روشن می شود.

روشی که ما می خواهیم نقشه بخش را کدگذاری کنیم دقیقاً مانند صفحه نمایش 7 قسمتی 7 رقمی بالا است-نیازی نیست چیزی را در کد تغییر دهیم ، تنها چیزی که تغییر می دهیم نحوه اتصال سیم ها است. در هیئت مدیره. به سادگی پین پورت صحیح را روی میکروکنترلر به پین مربوطه در صفحه 4 رقمی وصل کنید تا مثلاً PB0 همچنان به پین مربوط به بخش a ، PB1 به قسمت B و غیره برود.

تنها تفاوت این است که در حال حاضر به 4 پین اضافی برای آند نیاز داریم زیرا دیگر نمی توانیم به سادگی به ریل 5 ولت برویم. ما به میکروکنترلر نیاز داریم تا تصمیم بگیرد که کدام رقم آب میوه را دریافت می کند.

بنابراین ما از PC1 ، PC2 ، PC3 و PD4 برای کنترل آندهای 4 رقمی استفاده می کنیم.

شما همچنین ممکن است پیش بروید و سیمها را وصل کنید. (مقاومتهای 330 اهم روی سیمهای آند را فراموش نکنید!)

مرحله 4: کدگذاری صفحه نمایش 4 رقمی

کدگذاری صفحه نمایش 4 رقمی
کدگذاری صفحه نمایش 4 رقمی

بیایید در مورد چگونگی کدگذاری این صفحه نمایش فکر کنیم.

ما می خواهیم کاربر دکمه های صفحه کلید را فشار داده و با فشار دادن هر دکمه اعداد به صورت متوالی روی صفحه نمایش داده شود. بنابراین اگر 1 را فشار دهم و 2 را فشار دهم ، روی صفحه نمایش 12 نشان داده می شود. من همچنین می خواهم این مقدار را برای استفاده داخلی ذخیره کنم ، اما کمی بعد به آن می رسیم. در حال حاضر من فقط می خواهم یک ماکرو جدید بنویسم که کلیدهای فشاری شما را گرفته و آنها را نمایش دهد. با این حال ، از آنجا که ما فقط 4 رقم داریم ، می خواهم مطمئن شوم که فقط به شما اجازه می دهد چهار عدد را تایپ کنید.

مساله دیگر این است که نحوه عملکرد صفحه نمایش چند رقمی 4 رقمی این است که آندها را دوچرخه سواری می کنند به طوری که هر رقم فقط برای یک ثانیه روشن است قبل از اینکه بعدی را نمایش دهد و سپس بعدی و در نهایت دوباره به اول باز می گردد و غیره. بنابراین ما راهی برای کدگذاری این مورد نیاز است

ما همچنین می خواهیم هنگامی که رقم بعدی را تایپ می کنیم ، "مکان نما" را به فاصله راست منتقل کند. به طوری که اگر بخواهم مثلاً 1234 را تایپ کنم ، پس از تایپ 1 ، مکان نما حرکت می کند تا رقم بعدی که من تایپ می کنم در صفحه بعدی 7 قسمتی و غیره ظاهر شود. در حالی که این اتفاق می افتد ، من هنوز می خواهم بتوانم آنچه را که من تایپ کرده ام ببینم ، بنابراین هنوز باید در حال چرخاندن اعداد و نمایش آنها باشم.

به نظر می رسد مانند یک سفارش بلند؟

در واقع اوضاع حتی بدتر است. ما به 4 ثبت عمومی بیشتر نیاز داریم که می توانیم از آنها برای ذخیره مقادیر فعلی 4 رقمی که می خواهیم نمایش دهیم استفاده کنیم (اگر قصد داریم آنها را دور بزنیم باید آنها را در جایی ذخیره کنیم) و مشکل این است که ما داریم مانند دیوانه از ثبت نام های عمومی استفاده می کنیم و اگر مراقب نباشیم دیگر چیزی برایمان باقی نمی ماند. بنابراین احتمالاً ایده خوبی است که این مشکل را دیرتر حل کنید و به شما نشان دهیم که چگونه با استفاده از پشته ، ثبات را آزاد کنید.

بنابراین بیایید با کمی ساده کردن کارها ، از پشته استفاده کنیم و برخی از رجیسترها را آزاد کنیم و سپس سعی می کنیم کار خواندن و نمایش اعداد خود را در صفحه 4 رقمی انجام دهیم.

مرحله 5: Push 'n Pop

Push 'n Pop
Push 'n Pop

تنها چند "ثبت عمومی" وجود دارد که ما در اختیار داریم و پس از استفاده از آنها دیگر وجود ندارد. بنابراین تمرین برنامه نویسی خوب است که فقط از آنها برای چند متغیر استفاده کنید که به عنوان ذخیره موقت مورد استفاده قرار می گیرند و برای خواندن و نوشتن درگاه ها و SRAM با آنها استفاده می کنید ، یا موارد دیگری که در زیر روال ها در همه جا به آنها نیاز خواهید داشت. آنها را نام ببر. بنابراین کاری که من انجام دادم ، اکنون که ما شروع به کار کرده ایم و استفاده از Stack را یاد می گیریم ، این است که کد را مرور کرده و رجیسترهای هدف عمومی نامگذاری شده را پیدا کنم که فقط در یک روال واحد یا وقفه و در هیچ کجای دیگر کد استفاده نمی شود و جایگزین نمی شود. آنها را با یکی از رجیسترهای دمای ما و فشار و پاپ به پشته. در واقع ، اگر به کدی که برای میکروکنترلرهای کوچکتر نوشته شده است نگاه کنید ، یا اگر به گذشته برگردید زمانی که همه چیپ ها کوچکتر بودند ، فقط چند رجیستر عمومی را مشاهده می کنید که باید برای همه چیز استفاده می شد ، بنابراین نمی توانید فقط یک مقدار را در آنجا ذخیره کنید و آن را به حال خود رها کنید زیرا مطمئن هستید که برای موارد دیگر به آن نیاز دارید. بنابراین در همه جا در کد ، pushin 'و poppin' را مشاهده خواهید کرد. شاید من باید ثبت نام عمومی AX و BX خود را به عنوان تقدیر و احترام برای آن روزهای گذشته نامگذاری می کردم.

یک مثال به روشن شدن این امر کمک می کند.

توجه داشته باشید که در تبدیل کامل آنالوگ به دیجیتال ADC_int ما از یک ثبت عمومی با نام buttonH استفاده می کنیم که مقدار ADCH را بارگذاری کرده و آن را با جدول جستجوی تبدیل آنالوگ به دکمه مقایسه می کنیم. ما فقط از این buttonH register در زیر روال ADC_int و هیچ جای دیگر استفاده می کنیم. بنابراین ما به جای آن از متغیر temp2 خود استفاده می کنیم که به عنوان یک متغیر موقت استفاده می کنیم و می توانیم از آن در هر زیر روال خاصی استفاده کنیم و مقدار آن بر هیچ چیز خارج از آن روال تأثیر نمی گذارد (یعنی مقداری که در ADC_int به آن می دهیم در هیچ جایی استفاده نمی شود دیگری)

مثال دیگر در کلان تأخیر ما است. ما یک ثبت نام داریم که نام آن را "میلی ثانیه" گذاشته ایم که شامل زمان تأخیر ما در میلی ثانیه است. در این حالت به صورت کلان است و ما به یاد می آوریم که روش ماکرو به این صورت است که اسمبلر کل کد ماکرو را در محل برنامه که در آن نامیده می شود قرار می دهد. در این حالت ما می خواهیم از متغیر "میلی ثانیه" خلاص شویم و یکی از متغیرهای موقت خود را جایگزین آن کنیم. در این مورد ، من آن را کمی متفاوت انجام می دهم تا به شما نشان دهم که چگونه حتی اگر مقدار متغیر در جایی دیگر مورد نیاز باشد ، ما همچنان می توانیم از آن با استفاده از پشته استفاده کنیم. بنابراین به جای میلی ثانیه از "temp" استفاده می کنیم و برای اینکه چیزهای دیگری را که از ارزش temp استفاده می کنند خراب نکنیم ، به سادگی ماکرو "تاخیر" را با "فشار دادن" temp به پشته شروع می کنیم ، سپس از آن استفاده می کنیم به جای میلی ثانیه ، و سپس در انتهای کلان ، مقدار قبلی آن را از پشته "باز" می کنیم.

نتیجه خالص این است که ما temp و temp2 را برای استفاده موقت "قرض" گرفته ایم و پس از اتمام آنها را به مقادیر قبلی خود بازگردانده ایم.

در اینجا روال وقفه ADC_int پس از ایجاد این تغییر آمده است:

ADC_int:

دمای فشار ؛ صرفه جویی در دما از آنجا که ما آن را در اینجا تغییر دهید فشار temp2؛ صرفه جویی temp2 lds temp2، ADCH؛ بارگیری کلید ldi ZH ، زیاد (2*عدد) ldi ZL ، کم (2*شماره) cpi temp2 ، 0 breq return ؛ اگر عوامل ایجاد کننده نویز 7 کلید تعداد را تغییر ندهند: دما در دقیقه ، Z+ ؛ بارگذاری از جدول و ارسال افزایش clc cp temp2 ، temp ؛ مقایسه کلید فشرده با جدول brlo PC+4 ؛ اگر ADCH کمتر است ، دوباره سعی کنید lpm 7segnumber، Z؛ در غیر اینصورت جدول keyvalue را با رقم بارگذاری کنید ؛ افزایش رقم بازگشت rjmp؛ و بازگشت adiw ZH: ZL، 1؛ افزایش Z rjmp setkey؛ و بازگشت به بالا return: pop temp2؛ بازیابی temp2 pop2؛ بازگرداندن temp reti

توجه داشته باشید که نحوه عملکرد پشته این است که اولین روشن ، آخرین خاموش است. درست مثل یک دسته کاغذ. می بینید که در دو خط اول ما مقدار temp را روی پشته فشار می دهیم ، سپس temp2 را روی پشته فشار می دهیم ، سپس از آنها در زیر برنامه برای موارد دیگر استفاده می کنیم و در نهایت آنها را مجدداً به مقادیر قبلی خود باز می گردانیم ابتدا pop2 خاموش می شود (از آنجا که آخرین بار روی آن فشار داده شده است در بالای پشته است و اولین موردی است که باز می گردیم) و سپس دما باز می شود.

بنابراین از این پس ما همیشه از این روش استفاده خواهیم کرد. تنها زمانی که ما در واقع یک ثبت نام برای چیزی غیر از متغیر temp تعیین می کنیم ، زمانی است که همه جا به آن نیاز داریم. به عنوان مثال ، ثبتی به نام "overflows" یکی از مواردی است که ما در چندین مکان مختلف برنامه از آن استفاده می کنیم و بنابراین می خواهیم نامی برای آن بگذاریم. البته ما همچنان می توانیم از آن با روش temp و temp2 استفاده کنیم زیرا پس از اتمام کار مقدار آن را بازیابی می کنیم. اما این مسأله را بیش از حد مسحور می کند. آنها به دلایلی نامگذاری شده اند و ما temp و temp2 را قبلاً برای آن کار تعیین کرده ایم.

مرحله 6: فیلترهای کم گذر و تقویت کننده ولتاژ

فیلترهای کم گذر و تقویت کننده ولتاژ
فیلترهای کم گذر و تقویت کننده ولتاژ
فیلترهای کم گذر و تقویت کننده ولتاژ
فیلترهای کم گذر و تقویت کننده ولتاژ

به منظور پاکسازی کمی سر و صدا و عملکرد بهتر صفحه کلید ما می خواهیم چند فیلتر کم گذر اضافه کنیم. اینها نویز فرکانس بالا را فیلتر می کنند و به سیگنال فرکانس پایین اجازه عبور می دهند. اساساً روش انجام این کار به سادگی افزودن یک خازن 68 pf بین ورودی و زمین آنالوگ و همچنین یک خازن 0.1 میکروفاراد (یعنی 104) بین وقفه و اتصال PD4 (INT0) است. اگر در حالی که دکمه های صفحه کلید را فشار می دهید با آنها بازی کنید ، خواهید دید که آنها چه کار می کنند.

در مرحله بعد می خواهیم تقویت کننده ولتاژ بسازیم. به نظر می رسد که ردیف پایینی کلیدهای صفحه کلید (و همچنین کلید شماره گیری مجدد) ولتاژ بسیار پایینی را برای جلوگیری از وقفه INT0 ایجاد می کنند. پورت آنالوگ آنقدر حساس است که ولتاژهای پایین این کلیدها را بخواند ، اما پین وقفه ما به اندازه کافی خوب به نظر نمی رسد که بتواند با فشار دادن آن کلیدها وقفه ایجاد کند. بنابراین ما می خواهیم به نحوی مطمئن شویم که یک ولتاژ خوب با PD4 برخورد می کند اما همان ولتاژ پایین با ADC0 برخورد می کند. این سفارش بسیار بالایی است زیرا هر دو سیگنال از سیم خروجی یکسان صفحه کلید ما می آید. روشهای پیچیده ای برای انجام این کار وجود دارد ، اما ما بعد از این آموزش دیگر از صفحه کلید خود استفاده نخواهیم کرد ، بنابراین بیایید فقط روشی را که کار می کند (به سختی) جمع آوری کنیم.

ابتدا باید یک دکمه خارجی را برای جایگزینی وقفه INT0 متصل کرده و با نگه داشتن یک کلید روی صفحه کلید و کلیک روی دکمه ، صفحه را کنترل کنید. این صفحه کلید مشکلات کمتری دارد و به شما این امکان را می دهد که مطمئن شوید ولتاژهای شما به درستی روی میز جستجوی صفحه کلید تنظیم شده اند. هنگامی که می دانید صفحه کلید به درستی سیم کشی شده است ، دکمه را کنار گذاشته و وقفه INT0 را دوباره قرار دهید. برخی از مشکلات جدی مربوط به سر و صدا و ولتاژ وجود دارد که صفحه کلید را از این طریق کنترل می کند ، بنابراین بهتر است بدانید که همه چیز به گونه ای کار می کند که مشکلات آینده در کلید INT0 جدا شوند.

وقتی صفحه کلید و تقویت کننده ولتاژ خود را سیم کشی می کنید ، به احتمال زیاد همان مقادیری از مقاومت که من استفاده کرده ام ، کار نخواهد کرد. بنابراین شما باید آزمایش هایی را انجام دهید تا ارزش هایی را که برای شما مناسب است به دست آورید.

اگر به نمودار من که در این مرحله ضمیمه شده اید نگاه کنید ، خواهید دید که تقویت کننده ولتاژ چگونه کار می کند. ما از برخی مقاومت ها و دو ترانزیستور استفاده می کنیم. نحوه عملکرد ترانزیستورها (به برگه ها مراجعه کنید!) این است که حداقل ولتاژی وجود دارد که باید به پایه پایه ترانزیستور وارد کنید (پین میانی) که آن را اشباع کرده و اجازه می دهد جریان بین پین جمع کننده و امیتر جریان یابد. سنجاق کردن در مورد ترانزیستور 2N3904 که ما در اینجا از آن استفاده می کنیم ولتاژ 0.65V است. اکنون ما آن ولتاژ را از خروجی خود از صفحه کلید می گیریم و نمی خواهیم آن خروجی را تغییر دهیم ، بنابراین یک مقاومت بزرگ بین خروجی صفحه کلید و پایه ترانزیستور اول (من از 1 اهم استفاده کردم) قرار می دهیم. من این را به عنوان R_1 در نمودار برچسب گذاری کرده ام. سپس می خواهیم تقسیم کننده ولتاژ را طوری تنظیم کنیم که پایه ترانزیستور در حال حاضر تقریباً 0.65 ولت باشد و فقط کمی بیشتر از آن آن را به بالا فشار داده و اشباع کند. وقتی یک دکمه را فشار می دهیم ، این مقدار کمی از خروجی صفحه کلید به دست می آید. از آنجا که کلیدهای پایینی روی صفحه کلید فقط ولتاژ کمی را ایجاد می کنند ، برای کافی بودن آنها باید از قبل به اشباع بسیار نزدیک باشیم. مقاومتهای تقسیم کننده ولتاژ در نمودار R_a و R_b برچسب گذاری شده اند. من از R_a = 1Mohm و R_b = 560Kohm استفاده کردم ، اما تقریباً قطعی است که شما باید با این اعداد بازی کنید تا برای تنظیمات خود مناسب باشد.ممکن است بخواهید یک دیوار در نزدیکی خود داشته باشید تا سرتان را بکوبید و دو یا سه لیوان اسکاچ در دست داشته باشید (من Laphroaig را توصیه می کنم - گران قیمت است ، اما اگر دوست دارید سیگار بکشید ارزشش را دارد. BV و برای شب اقامت کنید)

حالا بیایید ببینیم که چگونه ترانزیستورها به ما کمک می کنند تا به صفحه INT0 برسیم و وقفه فشار کلید را ایجاد کنیم. ابتدا اجازه دهید ببینیم چه اتفاقی می افتد وقتی من کلیدی را فشار نمی دهم. در این صورت اولین ترانزیستور (با برچسب T1 در نمودار) خاموش است. بنابراین هیچ جریانی بین پین های جمع کننده و ساطع کننده جریان نمی یابد. بنابراین پایه ترانزیستور دیگر (با برچسب T2) به بالا کشیده می شود و بنابراین اشباع می شود و اجازه می دهد جریان بین پین های آن جریان یابد. این بدان معنی است که ساطع کننده T2 به پایین متصل می شود زیرا به جمع کننده وصل شده است که خود به زمین متصل است. بنابراین ، خروجی که به پین وقفه فشار کلید INT0 (PD4) ما می رود کم است و هیچ وقفه ای وجود نخواهد داشت.

حالا وقتی کلید را فشار می دهم چه اتفاقی می افتد؟ خوب ، پس پایه T1 از 0.65V بالاتر می رود (در مورد کلیدهای پایین تنها به سختی بالاتر می رود!) و سپس اجازه جریان داده می شود که پایه T2 را به ولتاژ پایین می کشاند و این T2 را خاموش می کند. اما ما می بینیم که وقتی T2 خاموش است ، خروجی بالا کشیده می شود و بنابراین یک سیگنال 5 ولت به پین INT0 ما می رسد و باعث وقفه می شود.

توجه کنید که نتیجه خالص در اینجا چیست. اگر کلید 1 را فشار دهیم ، 5V به PD4 می رود بدون اینکه خروجی قابل توجهی به ADC0 تغییر کند ، و مهمتر از آن ، حتی اگر Asterisk ، 0 ، Hash یا Redial را فشار دهیم ، همچنین یک سیگنال 5V به INT0 و همچنین ایجاد وقفه! این مهم است زیرا اگر ما مستقیماً از خروجی صفحه کلید به پین INT0 برویم ، این کلیدها تقریباً ولتاژ تولید نمی کنند و برای راه اندازی آن پین وقفه کافی نخواهند بود. تقویت کننده ولتاژ ما این مشکل را حل کرده است.

مرحله 7: کد نمایش 4 رقمی و فیلم

این همه برای آموزش 9 است! من کد و ویدئویی را که عملیات را نشان می دهد ضمیمه کرده ام.

این آخرین باری خواهد بود که از صفحه کلید آنالوگ (خدا را شکر) استفاده می کنیم. استفاده از آن دشوار بود ، اما همچنین برای کمک به ما در مورد تبدیل آنالوگ به دیجیتال ، پورت های آنالوگ ، وقفه ها ، مالتی پلکس ، فیلترهای نویز ، تقویت کننده های ولتاژ و بسیاری از جنبه های کدگذاری مونتاژ از جداول جستجو به تایمر/شمارنده بسیار مفید بود. و غیره به همین دلیل ما تصمیم گرفتیم از آن استفاده کنیم. (به علاوه تمیز کردن چیزها سرگرم کننده است).

اکنون ما مجدداً به ارتباطات نگاه می کنیم و نمایشگرهای 7 قسمتی و 4 رقمی خود را می خوانیم تا تاس های خود را از رول تاس خود بخوانند به همان روشی که با تجزیه کننده ثبت ما انجام دادیم. این بار ما از رابط دو سیم به جای روش هک شده با هم استفاده می کنیم.

هنگامی که ارتباطات کار می کنند و رول ها روی صفحه نمایش ظاهر می شوند ، در نهایت می توانیم اولین قطعه از محصول نهایی خود را بسازیم. متوجه خواهید شد که بدون همه موارد پورت آنالوگ ، کد ما به طور قابل توجهی کوتاه تر و احتمالاً خواندن آن آسان تر خواهد بود.

برای شما که جاه طلب هستید. در اینجا "پروژه" ای وجود دارد که می توانید امتحان کنید اگر در این مرحله تمام مراحل آموزشی را گذرانده باشید ، مطمئناً دانش انجام آن را دارید:

پروژه: ماشین حساب بسازید! از صفحه نمایش 4 رقمی و صفحه کلید ما استفاده کنید و یک دکمه خارجی را فشار دهید که مانند یک کلید "ورود" عمل می کند. ستاره را روی "times" ، هش را برای "تقسیم" مجدد به "plus" و فلش را به "minus" ترسیم کرده و یک روال ماشین حساب بنویسید که مانند یکی از ماشین حساب های قدیمی "براق معکوس" HP است که همه مهندسین داشتند. در آن روزها. یعنی روش کار آنها این است که شما یک عدد وارد کرده و "enter" را فشار دهید. این عدد را به پشته منتقل می کند ، سپس یک عدد دوم را وارد کرده و "enter" را فشار می دهید ، که عدد دوم را به پشته هل می دهد. در نهایت شما یکی از عملیات مانند X ، /، + یا - را فشار می دهید و این عمل را روی دو عدد بالای پشته اعمال می کند ، نتیجه را نمایش می دهد و نتیجه را روی پشته فشار می دهد تا در صورت استفاده مجدد از آن استفاده کنید. پسندیدن. به عنوان مثال برای افزودن 2+3 می توانید: 2 ، "enter" ، 3 ، "enter" ، "+" را انجام دهید و صفحه 5 را بخواند. شما نحوه استفاده از پشته ، صفحه نمایش ، صفحه کلید و اکثر کد پس زمینه قبلاً نوشته شده است. کافی است کلید enter و زیر برنامه های مورد نیاز برای ماشین حساب را اضافه کنید. این کمی پیچیده تر از چیزی است که در ابتدا فکر می کنید ، اما سرگرم کننده و قابل انجام است.

بعدا می بینمت!

توصیه شده: