فهرست مطالب:

شمارنده چرخان BloodBowl با استفاده از LED های 7 قسمتی: 5 مرحله
شمارنده چرخان BloodBowl با استفاده از LED های 7 قسمتی: 5 مرحله

تصویری: شمارنده چرخان BloodBowl با استفاده از LED های 7 قسمتی: 5 مرحله

تصویری: شمارنده چرخان BloodBowl با استفاده از LED های 7 قسمتی: 5 مرحله
تصویری: Part 1 - The Song of Hiawatha Audiobook by Henry Wadsworth Longfellow (Chs 1-11) 2024, جولای
Anonim
BloodBowl Turn Counter با استفاده از LED های 7 قسمتی
BloodBowl Turn Counter با استفاده از LED های 7 قسمتی

این پروژه برای یک شمارنده بازی BloodBowl با استفاده از شش چراغ LED 7 قسمتی Charlieplexed بود.

مرحله 1: مفهوم

مفهوم
مفهوم

یکی از دوستانم از من در مورد ایده هایی برای ساخت پیشخوان Bloodbowl Turn برای بازی برد خود سوال کرد. بدون اینکه بدانم این چیست و چه می خواهد ، مدتی طول کشید تا تصمیم بگیرم که آیا این کار را انجام می دهم یا نه. من ابتدا باید ایده ای درباره آنچه او می خواهد داشته باشم ، بنابراین من با هنر مفهومی شروع کردم (تصویر). ایده اصلی این است که 3 دکمه فشار دهید ، هر کدام 3 LED را کنترل می کند و در یک برج ساخته شده سفارشی قرار می گیرد. تنها درخواست بزرگ این بود که 4 صفحه نمایش برتر از 0 تا 8 شمارش کرده و تنظیم مجدد شوند و 2 پایین نیز وجود داشته باشد. نمایشگرها از 8 تا 0 شمارش معکوس می کنند و به عقب برمی گردند. من مدار را کامل می کردم و او برج را تکمیل می کرد.

مرحله 2: طراحی و لیست قطعات

لیست قطعات و طراحی
لیست قطعات و طراحی

از آنجایی که این کانسپت 6 LED 7 قسمتی را می خواست و من تعدادی PIC میکروچیپ 8 بیتی داشتم ، روشهای استفاده از PIC ها برای کنترل LED ها را جستجو کردم. این پیوند را پیدا کردم https://www.mikroe.com/fa/books /picbook/7_08chapter.htm که بیان می کند "تا 6 صفحه را می توان مانند این بدون دسترسی به روشنایی هر نمایشگر دسترسی داشت." من این را یک چالش و چیزی برای بررسی به عنوان بخشی از پروژه خود می دانستم. اولین کاری که انجام دادم این بود که چند صفحه نمایش رشته ای 7 رشته ای را از جعبه خود برداشته و ببینم چگونه کار می کنند. خبر بد. قسمت های خاصی که انتخاب کردم آنطور که می خواستم رفتار نمی کردند. قطعه در صورت نیاز روی تخته نورد روشن می شود ، اما جریان نشت به 6 قسمت دیگر توزیع می شود. متوجه شدم که ممکن است صفحه نمایش های رشته ای راه مناسبی نباشند ، یا لازم بود از آنها به گونه ای دیگر استفاده کنم. بنابراین برای سادگی ، LED های 7 قسمتی را که در دست داشتم برای کار با نان ورید تأیید کردم و چند صفحه آند معمولی سفارش دادم. دومین کاری که باید انجام دهم طراحی طرح و شروع کار روی کد بود. تصویر مدار من است چندان مهم نیست ، زیرا کد موجود در PIC از مالتی پلکس مراقبت می کند … اشتباه Charlieplexing. توجه: همه 6 صفحه نمایش دارای خطوط مشابه از IC درایور هستند. IC انتخابگر هر صفحه را 1 در یک زمان فعال می کند و خطوط 7 قسمتی بر اساس آن توسط PIC به روز می شوند. ایده بسیار ساده. پس از آن ، تکمیل کد و سخت افزار تنها چیزی است که لازم بود. لیست قطعات پس از 3 سفارش کوچک از Digi-Key هنگام تصمیم گیری در مورد اجزای خاص ، من همه چیزهایی را که نیاز داشتم (با برخی وسایل در دست) ؛ 1 ~ 3 "x4 "سوئیچ های دکمه ای کوچک PCB6 (NO) 1 74LS47 ، نمایشگر 7 قسمتی IC1 PIC16F627 1 CD4028 ، 1 از 10 انتخاب کننده IC 6 مقاومت 10 کیلو اهم 1 مقاومت 470 اهم 1 سیم پیچ. من از رنگها و رنگهای مختلف استفاده کردم ، اما این فقط من بودم. 1 78L05 5V تنظیم کننده 1 کلیپ باتری 9 ولت 1 باتری 1 ولت 1 سوئیچ کوچک (برای روشن/خاموش کردن) من این را یک پروژه نسبتاً پیچیده می دانم ، به دلیل ؛ 1) کد ریزپردازنده مورد نیاز 2) لحیم کاری و نان خوردن 3) بهینه سازی طراحی. هیچ یک از این مسائل به خودی خود بیش از حد پیچیده نیستند ، اما انجام همه آنها بدون هیچ تجربه ای می تواند برای مبتدیان بسیار مفید باشد. یک برنامه نویس سخت افزاری لازم است دستگاه ، ایستگاه لحیم کاری و غیره را بسوزاند … اولین چیزی که ممکن است کسی متوجه شود این است که LED های 7 قسمتی سری (محدود کننده جریان) مقاومت ندارند! اجازه دهید به سرعت به این موضوع بپردازم ، با بیان اینکه طرح اصلی من آنها را در خود جای داده است … اما مرحله بعدی را برای توضیح بخوانید!

مرحله 3: Breadboarding & Micro Code

Breadboarding & Micro Code
Breadboarding & Micro Code

Breadboard برای این امر ضروری بود. نانبرد عمومی من نشان داده شده است ، اما برای اندازه این پروژه من در واقع از این یک و یک نانبرد کوچکتر استفاده کردم ، زیرا سیم های زیادی وجود داشت که باید فاصله بین آنها وجود داشته باشد. اول ، من یک LED 7 قسمتی را با استفاده از کد اولیه آزمایش کردم. این 3 مورد را تأیید کرد ؛ 1) سیم کشی IC ها خوب تأیید شد! 2) به من کمک کرد تا کد خود را بهینه سازی و نهایی کنم. 3) باعث شد متوجه شوم که نیازی به مقاومت های محدودکننده فعلی ندارم! 1 WIRING همانطور که گفته شد ، طرح کلی من پیدا شد برای کار با کد من ، چراغ LED با استفاده از یک کلید فشاری ، اعداد را دور می زند تا کد و طرح من تأیید شود. چیز زیادی لازم نبود اما ورق خوردن تأیید کرد که من در وضعیت خوبی هستم. CODEI در اصل کد من را با یک روال اصلی برای اسکن دکمه ها تنظیم کرده بود و ISR (برنامه وقفه سرویس) اعداد را نمایش می داد ،. پس از انجام تست های بردبرد ، من روال عادی را تغییر دادم ، بنابراین اکثر اوقات دائماً اعداد و ISR را برای بررسی دکمه ها نمایش می داد. دلیل انجام این کار فقط داشتن یک صفحه نمایش ثابت بود ، زیرا PIC با یک ساعت داخلی 4 مگاهرتز کار می کند ، من زمان بسیار کمی را برای اسکن دکمه ها از دست می دهم. مهم نیست … فقط بستگی به این دارد که چگونه می خواهید کد را انجام دهید و چه چیزی برای هر برنامه منطقی تر است. برای این ، صفحه نمایش مهم است ، بنابراین من آن را در روال اصلی قرار دادم. هنگامی که اولین قسمتهای من وارد شد (همه 6 صفحه نمایش!) ، سیم کشی ورق را تکمیل کردم و مشکل دیگری پیدا کردم. هنگام فشردن دکمه کد من دارای برخی از رجیسترهای نامرتب بود که پاک نمی شدند و ISR باعث ایجاد برخی اشکالات جزئی در صفحه می شد. ؛ ====================== ================================================ ===== ؛ شمارنده را بچرخانید ؛؛ ----------- ؛ Dsply3 Dsply2 ؛ Dsply4 Dsply1 ؛ Led1 Led3 ؛ A5 | 4 15 | A6 - Led2 ؛ Vss | 5 14 | Vdd ؛ Button1 B0 | 6 13 | B7 ؛ B1 | 7 12 | B6 ؛ B2 | 8 11 | B5 ؛ B3 | 9 10 | B4 ؛ ----------- ؛؛ LED1-3-BCD-dec IC -LEDSeg's1-6؛ Dsply1-3-BCD-7seg IC -Dsply#1-9 ؛؛ ================================ ==========================================؛ تاریخ تجدید نظر و یادداشت ها:؛ V1.0 سرصفحه اولیه ، کد 3/30/09 ؛ ؛؛ (C) 5/2009؛ این کد ممکن است برای یادگیری/برنامه/اصلاح شخصی استفاده شود.؛ هرگونه استفاده از این کد در محصولات تجاری این نسخه رایگان را نقض می کند.. ؛ ---------------------------------------------------- ----------------------------------#شامل P16F627A. INC ؛ ============= ================================================ ================؛ تعریف می کند ؛ ---------------------------------------------------- ---------------------------------- ؛ ================= ================================================ ===========؛ داده ها؛------------------------------------------------ ----------------------------------- ؛ نگه داشتن متغیرهای زمان شمارش 1 شمارش 20 شمارش معادل 21 دیس 1 مساوی 22 دیس 2 مساوی 23 دیس 3 معادل 24 دیس 4 معادل 25 دیس 5 معادل 26 دیس 6 معادل 27 و_تمپ معادل 28 استاتوس_تمپ برابر 29ISRCNTR معادل 2A ؛ ====================== ================================================ =======؛ بازنشانی بردارها ؛؛ پیکربندی را بررسی کنید. گاز گرفتن قبل از سوزاندن !!! ؛ INTOSC ؛ MCLR: فعال ؛ PWRUP: فعال همه دیگران: ناتوان !! ؛ ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR شروع کرد ؛ == ================================================ ==========================؛ ISR ؛؛ --------------------------------------------------- --------------------------------- org ISR_ADDR movwf w_temp swapf STATUS ، w movwf status_temp ؛؛ ISR در اینجا ؛ PB0-PB5 Switches btfsc PORTB، 0؛ تماس SW1 تماس sw1debounce btfsc PORTB، 1؛ تماس SW1 تماس sw2debounce btfsc PORTB، 2؛ تماس SW1 sw3debounce btfsc PORTB، 3 را بررسی کنید؛ تماس SW1 sw4debounce btfsc PORTB، 4 را بررسی کنید؛ تماس SW1 sw5debounce btfsc PORTB، 5 را بررسی کنید؛ تماس SW1 sw6debounce goto endisrsw1debounce باز کردن تماس را بررسی کنید. صبر کردن 0.2 ثانیه باز کردن تماس incf dis1؛ به روز رسانی شمارنده movf dis1، W؛ بررسی وجود سرریز xorlw 0x1A ؛ 10 در 7 سگ؟ btfss STATUS ، Z بازگشت ؛ نه ، به اسکن بازگردید. movlw h'10 '؛ بله ، صفحه را بازنشانی کنید. movwf dis1 باز می گرداند صبر کنید 0.2 ثانیه خروج تماس incf dis2؛ بروزرسانی شمارنده movf dis2، W؛ بررسی وجود سرریز xorlw 0x4A ؛ 10 در 7 سگ؟ btfss STATUS ، Z بازگشت ؛ نه ، به اسکن بازگردید. movlw h'40 '؛ بله ، صفحه را بازنشانی کنید. movwf dis2 باز می گرداند w3debounce call debounce؛ صبر کنید 0.2 ثانیه خروج تماس incf dis3؛ بروزرسانی شمارنده movf dis3، W؛ بررسی وجود سرریز xorlw 0x5A ؛ 10 در 7 سگ؟ btfss STATUS ، Z بازگشت ؛ نه ، به اسکن بازگردید. movlw h'50 '؛ بله ، صفحه را بازنشانی کنید. movwf dis3 باز می گرداند صبر کردن 0.2 ثانیه باز کردن تماس incf dis4؛ بروزرسانی شمارنده movf dis4، W؛ بررسی وجود سرریز xorlw 0x8A ؛ 10 در 7 سگ؟ btfss STATUS ، Z بازگشت ؛ نه ، به اسکن بازگردید. movlw h'80 '؛ بله ، صفحه را بازنشانی کنید. movwf dis4 باز می گرداند صبر کنید 0.2 ثانیه خروج تماس incf dis5؛ بروزرسانی شمارنده movf dis5، W؛ بررسی وجود سرریز xorlw 0x9A ؛ 10 در 7 سگ؟ btfss STATUS ، Z بازگشت ؛ نه ، به اسکن بازگردید. movlw h'90 '؛ بله ، صفحه را بازنشانی کنید. movwf dis5 باز می گرداند w6debounce call debounce؛ صبر کردن 0.2 ثانیه فراخوانی تماس incf dis6؛ بروزرسانی شمارنده movf dis6، W؛ بررسی وجود سرریز xorlw 0xCA ؛ 10 در 7 سگ؟ btfss STATUS ، Z بازگشت ؛ نه ، به اسکن بازگردید. movlw h'C0 '؛ بله ، صفحه را بازنشانی کنید. movwf dis6 returnendisr bcf INTCON، T0IF swapf status_temp، w movwf STATUS swapf w_temp، f swapf w_temp، wretfie؛ ============================ ================================================ = ؛ از اینجا شروع کنید! -------------------------------------------------- --------------------------------- شروع ؛ پیکربندی پورت های ورودی/خروجی clrf PORTA movlw 0x07 movwf CMCON bcf STATUS، RP1 bsf STATUS، RP0 movlw h'00 '؛ خروجی های RA، RA5 بدون خروجی movwf TRISA bcf STATUS، RP0 clrf PORTB bsf mov'w،' RB ورودی movwf TRISB؛ تنظیم تایمر داخلی bsf PCON، 3؛ روی 4 مگاهرتز تنظیم کنید movlw h'CF '؛ Tmr0 منبع داخلی ، پیش نمایش TMR0 1: 256 movwf OPTION_REG movlw h'A0 'movwf INTCON؛ وقفه های TMR0 را فعال کنید ، bcf STATUS ، RP0 ؛ مقداردهی اولیه clrf PORTA؛ پاک کردن PortA clrf PORTB ؛ Clear PortB outs clrf count1 clrf count2 movlw h'10 'movwf dis1 movlw h'40' movwf dis2 movlw h'50 'movwf dis3 movlw h'80' movwf dis4 movlw h'90 'movwf dis5 movlw h'C0' movwf dis6 call رد کردن 0.2 ثانیه ؛ LED های آزمایشی ، نمایشگر 8 ؟؟؟ ========================================؛ اصلی ورودی های سوئیچ ها ، خروجی ها و نمایشگرهای incriments را دریافت می کند. صفحه 1-6 سیمی هستند. ؛ ابتدا ، BCD-7Seg IC با مقدار نمایشگر بارگذاری می شود ، و IC BCD-Dec برای انتخاب صفحه نمایش فعال می شود. دوم ، تأخیر ms برای نمایش داده می شود. IC غیرفعال شده است … display0 برای خاموش کردن صفحه نمایش انتخاب شده است ؛ این حالت برای هر 6 صفحه نمایش تکرار شده و حلقه می شود. ------------------------------------------------------ --------------- main؛ Disp1 movf dis1، 0 movwf PORTA call ledon goto main؛ ==================== ================================================ ========؛ لدون ؛ تنظیم زمان روشن شدن LED. 6 صفحه نمایش-> 1/6 چرخه وظیفه در 1Khz = 166 چرخه ؛ ----------------------------------- --------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1، F goto ledloopreturn؛ ========================================= ====================================؛ سیگنال انصراف ؛ 4 چرخه برای بارگیری و تماس ، 2 سیکل برای بازگشت. 4 مگاهرتز Tc:: تعداد 2 = 255-> 0.2 ثانیه ؛ ------------------------------------------ ----------------------------------------- debounce movlw.255 ؛ تاخیر برای 1/5 ثانیه باز شدن. movwf count2 تماس بگیرید pon_wait return؛ -------------------------------------------- --------------------------------------- ؛ count1 = 255d:: 775 چرخه تا 0 ، + 3 چرخه برای بازگشت. ؛ --------------------------------- -------------------------------------------------- pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1 ، F goto short_loopS decfsz count2 ، F goto big_loopSreturnend3 CIRCUITI در اصل دارای 470 اهم مقاومت از هر خط درایور صفحه نمایش از خط فعال سازی 74LS47 و CD4028 بود. با این حال ، قرعه کشی مدارم را آزمایش کردم و متوجه شدم که تنها 31 میلی آمپر پوند می کشد. و از آنجا که درایور واقعی نمایشگرها مستقیماً از 74LS47 است و فعال از IC دیگری است ، سریع میانگین و اوج الزامات و برگه های داده مربوطه کاهش می یابد ….. ! به نظر می رسد که رانندگی مستقیم خط CA از 4028 در حالی که مستقیماً همه بخش ها را رانندگی می کنید مشکلی نیست! … به نوعی:) من یک اشکال در کد خود داشتم که هنگام فشردن یک دکمه ثبت های من را پاک نمی کرد و باعث می شد که در آخرین صفحه نمایش 2 قسمت با فشار یک دکمه بسیار روشن باشد. این بد بود. با این حال ، پاکسازی رجیستر این مشکل را برطرف کرد و بررسی های مداوم قدرت تأیید می کند که دائماً در حدود 30 میلی آمپر است. این باید به من (بر اساس تجربه قبلی با مدارهای مشابه) 20 ساعت زمان کار با استفاده از 1 باتری 9 ولت (500mAH/30mAH تحت تنظیمات 5V) به من بدهد … امیدوارم! من تصمیم گرفتم LED ها را مستقیماً نگه دارم ، اما آنها را در سوکت های اگر اتفاقی افتاده باشد ، در دراز مدت

مرحله 4: لحیم کاری PCB

لحیم کاری PCB
لحیم کاری PCB

هر زمان که در پروژه خود به این نقطه می رسم ، انجام کار را به تأخیر می اندازم. در ابتدا من قصد داشتم این مورد را با سیم بپیچم ، اما به سرعت این ایده را کنار گذاشتم. در ابتدا فکر می کنم "چند سیم برای لحیم کاری ، مهم نیست" … سپس ، زمانی که پروژه من آماده لحیم شدن است من فکر می کنم ، " یا باید برای ساخت تخته اولیه ارسال می کردم ، یا تخته خودم را قلم می زدم ". من هنوز مشغول حکاکی PCB نیستم و نمی خواهم $ $ برای ساخت تخته بپردازم ، بنابراین … بله …..من حدود 3 ساعت برای لحیم کاری این چیز صرف کردم. این در حدود 150 سیم است ، بنابراین این 300 نقطه لحیم کاری است ، به علاوه لمس برای پل های لحیم کاری. به هر حال ، در اینجا قسمت پشتی تابلو را مشاهده می کنید…. به 20 دقیقه فکر کردم زیرا صفحه نمایش نشان می داد که #اشتباه نمایش داده می شود در یک الگوی منطقی که باید رمزگشایی می شد. پس از آن ، مکان کوتاه و bam را پیدا کردم! کاملاً کار کرد.

مرحله 5: نتیجه گیری

نتیجه
نتیجه

کار کرد! این پروژه حدود 2 هفته طول کشید تا در مورد آن فکر کنید و به درخواست کننده امتیاز دهید ، 3 ساعت کامل کردن کد و اشکال زدایی ، 4 ساعت پهن کردن و اشکال زدایی ، 3 ساعت پوند لحیم کاری فقط با استفاده از 3 IC امکان پذیر است Charlieplex 6 LED های 7 قسمتی. قدرت با این طراحی حدود 30 میلی آمپر است ، که اگر خودم بگویم بد نیست. من فکر می کنم از LED های 7 قسمتی بیشتری می توان استفاده کرد ، اما پاکت را فشار ندادم. این ایده می تواند تقریباً در هر برنامه ای با استفاده از LED های 7 قسمتی اعمال شود. دماسنج ، ساعت ، صفحه نمایش متن ، و غیره. با برخی از کد های پیچیده ، می توانید یک صفحه نمایش متحرک یا تصاویر داشته باشید … شاید حتی پایه ای برای یک پروژه POV (تداوم بینایی) باشد. اجرای نهایی به دوستم باقی می ماند تا برج خود را بسازد و تخته را به دلخواه خود قرار دهید. اگر/وقتی این کار انجام شد ، یک عکس بارگذاری می شود. اما در مورد مدار ، به نظر می رسد این به سفارش ساخته شده است!

توصیه شده: