Агуулгын хүснэгт:

7 сегментийн LED ашиглан BloodBowl эргэх тоолуур: 5 алхам
7 сегментийн LED ашиглан BloodBowl эргэх тоолуур: 5 алхам

Видео: 7 сегментийн LED ашиглан BloodBowl эргэх тоолуур: 5 алхам

Видео: 7 сегментийн LED ашиглан BloodBowl эргэх тоолуур: 5 алхам
Видео: Светодиодный DVD-дисплей и Arduino Nano (основы семисегментного светодиодного дисплея) 2024, Долдугаар сарын
Anonim
7 сегментийн LED ашиглан BloodBowl эргэх тоолуур
7 сегментийн LED ашиглан BloodBowl эргэх тоолуур

Энэхүү төсөл нь Charlieplexed 7 сегментийн зургаан LED ашигладаг BloodBowl тоглоомын тоолуурт зориулагдсан болно.

Алхам 1: Үзэл баримтлал

Үзэл баримтлал
Үзэл баримтлал

Миний нэг найз надаас өөрийн ширээний тоглоомонд зориулж Bloodbowl Turn тоолуур хийх санааны талаар асуусан. Энэ юу болохыг, юу хүсч байгаагаа мэдэхгүй байсан тул би үүнийг хийх эсэхээ шийдэхийн тулд хэсэг хугацаа шаардагджээ. Эхлээд би түүний юу хүсч байгааг ойлгох ёстой байсан болохоор концепцийн урлагаар хичээллэж эхэлсэн (зураг). Үндсэн санаа бол 3 товчлууртай байх бөгөөд тус бүр нь 3 LED -ийг хянаж, тусгайлан бүтээсэн цамхаг дотор байрлуулах бөгөөд цорын ганц том хүсэлт бол дээд 4 дэлгэцийг 0 -ээс 8 хүртэл тоолж, дахин тохируулах, доод хэсгийг 2 болгох явдал байв. дэлгэц нь 8 -аас 0 хүртэл тоолж, эргэж эргэдэг, би хэлхээг дуусгаж, тэр цамхгийг дуусгах болно.

Алхам 2: Дизайн ба эд ангиудын жагсаалт

Дизайн ба эд ангиудын жагсаалт
Дизайн ба эд ангиудын жагсаалт

Энэхүү үзэл баримтлалд 7 сегментийн 6 LED хэрэгтэй бөгөөд би 8 битийн Microchip PIC-тэй байсан тул LED-ийг удирдахын тулд PIC-ийг ашиглах аргуудыг судалж үзэв. /picbook/7_08chapter.htm -д "Дэлгэц бүрийн тод байдалд нөлөөлөхгүйгээр 6 хүртэлх дэлгэцийг ингэж үзэх боломжтой." Би үүнийг төслийнхөө хүрээнд судлах ёстой зүйл гэж үзсэн. Миний хийсэн хамгийн эхний зүйл бол хайрцагнаасаа 7 ширхэг улайсгасан 7 дэлгэцийг авч, хэрхэн ажиллахыг харах явдал байв. Муу мэдээ. Миний сонгосон зарим хэсгүүд миний хүссэн шиг аашилж чадаагүй. Сегмент нь талхны самбар дээр шаардлагатай үед асах боловч алдагдлын гүйдлийг бусад 6 сегментэд тараасан. Улайсдаг дэлгэц нь тийм ч сайн арга биш байж магадгүй гэдгийг би ойлгосон, эсвэл өөр хэлбэрээр ашиглах шаардлагатай болсон. Тиймээс би энгийн гар утсан дээрх 7 сегментийн LED-үүдийг талхны хавтангаар хийх боломжтой эсэхийг шалгаж, анодын дэлгэцийг захиалсан бөгөөд хийх ёстой хоёрдахь зүйл бол дизайн хийх, код дээр ажиллаж эхлэх явдал байв. Зураг дээр миний тойрог байна. PIC код нь мультиплекс хийх талаар анхаарал тавьдаг тул энэ нь тийм ч чухал биш юм … Charlieplexing алдаатай байна. Анхаарна уу: БҮХ 6 дэлгэц нь IC драйвераас ижил шугамтай байна. IC сонгогч нь дэлгэц бүрийг нэг нэгээр нь идэвхжүүлж, 7 сегментийн шугамыг PIC-ийн дагуу шинэчилдэг. Маш энгийн санаа. Үүний дараа код болон техник хангамжийг дуусгахад л хангалттай байсан. Хэсгийн жагсаалт Тодорхой бүрэлдэхүүн хэсгүүдийг шийдэх явцад Digi-Key-ээс 3 жижиг захиалга авсны дараа надад хэрэгтэй бүх зүйл байсан (гартаа зарим зүйл байгаа); 1 ~ 3 "x4 "ПХБ6-ийн жижиг товчлуурын унтраалга (NO) 1 74LS47, 7 сегментийн дэлгэц IC1 PIC16F627 1 CD4028, 10-аас 1 сонгогч IC 6 10KOhm резистор 1 470Ohm эсэргүүцэл1 дамар утас. Би янз бүрийн өнгө, дүрсийг ашигладаг байсан, гэхдээ энэ нь зүгээр л би байсан. 78L05 5V зохицуулагч 1 9V батерейны клип 1 9V зай1 жижиг унтраалга (асаах/унтраах зориулалттай) Би үүнийг дунд зэргийн төвөгтэй төсөл гэж үздэг. 1) Микропроцессорын код шаардлагатай 2) Гагнах ба талхны самбар 3) Дизайн оновчлол: Эдгээр асуудлуудын аль нь ч хэтэрхий төвөгтэй биш боловч туршлагагүйгээр бүгдийг нь авч үзэх нь эхлэгчдэд маш хэцүү байдаг. Тоног төхөөрөмж, гагнуурын станц гэх мэтийг шатаахын тулд техникч програмист шаардлагатай болно. Анхаарах зүйл бол 7 сегментийн LED нь цуврал (гүйдэл хязгаарлах) резистортой байдаггүй! Үүнийг анхны шийдэлдээ багтаасан гэдгээ хэлээд үүнийг хурдан шийдвэрлэхийг зөвшөөрнө үү, гэхдээ тайлбарыг авахын тулд дараагийн алхамыг уншина уу!

Алхам 3: Breadboarding & Micro Code

Breadboard болон микро код
Breadboard болон микро код

Үүний тулд талхны самбар зайлшгүй шаардлагатай байв. Миний ерөнхий талхны самбарыг харуулсан боловч энэ төслийн хувьд би энэ болон жижиг талхны хавтанг ашигласан, учир нь зай завсарлах шаардлагатай олон утаснууд байсан. Нэгдүгээрт, би 7 кодтой нэг LED-ийг анхны код ашиглан туршиж үзсэн. Энэ нь 3 зүйлийг баталгаажуулсан; 1) IC -ийн утас сайн шалгагдсан! 2) Надад кодоо оновчтой болгож, эцэслэн гаргахад хүргэсэн. 3) Надад одоогийн хязгаарлах резистор хэрэггүй гэдгийг ойлгуулсан! Миний кодтой ажиллахын тулд LED нь нэг товчлуурын унтраалга ашиглан тоонуудаар дамждаг тул миний код, байршлыг баталгаажуулдаг. Их зүйл шаардагддаггүй байсан ч талхны самбар нь миний биеийн байдал сайн байгааг баталсан юм.2 CODEI нь анхандаа кодоо товчлуурыг хайх үндсэн горимоор тохируулсан бөгөөд ISR (Тасалдлын Үйлчилгээний Програм) нь тоонуудыг харуулдаг. Талхны самбарыг туршиж үзсэний дараа би ердийн дэглэмийг өөрчилсөн тул ихэнх тохиолдолд товчлуурыг шалгахын тулд тоонууд болон ISR -ийг байнга харуулдаг байв. Үүнийг хийх болсон шалтгаан нь байнгын дэлгэцтэй байх явдал байсан, учир нь PIC нь дотоод 4Mhz цагтай ажилладаг тул товчлуур хайхад маш бага цаг алдаж байна. Ямар ч том асуудал байхгүй … зөвхөн кодыг хэрхэн хийхийг хүсч байгаагаас, програм бүрийн хувьд хамгийн утга учиртай зүйлээс л хамаарна. Үүний тулд дэлгэц чухал ач холбогдолтой тул би үүнийг үндсэн горимдоо оруулсан бөгөөд миний анхны хэсгүүд ирэхэд (бүх 6 дэлгэц!) Би талхны хавтангийн утсыг дуусгаад өөр нэг асуудал олсон. Товчлуурыг дарахад миний код цэвэрлэгдээгүй зарим бүртгэлүүд байсан бөгөөд ISR нь дэлгэцийн жижиг алдааг үүсгэсэн.; ======================= ================================================== =====; Эргэлтийн тоолуур;; -----------; Dsply3 Dsply2; Dsply4 Dsply1; Led1 Led3; А5 | 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 тоолох 2 тэнцэх 21 дис1 тэнцүү 22 дис2 тэнцүү 23 дис3 тэнцүү 24dis4 тэнцүү 25dis5 тэнцэх 26dis6 тэнцэх 27w_temp тэгш 28status_temp тэгш 29ISRCNTR тэнцүү 2A; ===================== ================================================== =======; Векторуудыг дахин тохируулах; Тохиргоог шалгах. ШАТАХААС ӨМНӨ ХОТ !!!; INTOSC; MCLR: ИДЭВХЖҮҮЛСЭН; PWRUP: ИДЭВХЖҮҮЛСЭН; БҮГД БҮГД: ХӨГЖЛИЙН ХӨГЖЛИЙН !!;; ------------------------------------------ ------------------------------------- RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR эхлэх ёстой; == ================================================== ===========================; ISR;; ----------------------------------------------- -------------------------------- байгууллага ISR_ADDR movwf w_temp swapf STATUS, w movwf status_temp;; ISR ЭНД; PB0-PB5 шилжүүлэгчийг шалгах 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 халих эсэхийг шалгана уу; 7-ийн 10 дээр үү? btfss STATUS, Z буцах; Үгүй ээ, скан руу буцна уу. movlw h'10 '; Тийм ээ, дэлгэцийг дахин тохируулна уу. movwf dis1 буцааж w2debounce дуудлага гаргах; 0.2 сек хүлээлгэнэ үү. Movf dis2, W тоолуурыг шинэчлэх; Xorlw 0x4A халих эсэхийг шалгана уу; 7-ийн 10 дээр үү? btfss STATUS, Z буцах; Үгүй ээ, скан руу буцна уу. movlw h'40 '; Тийм ээ, дэлгэцийг дахин тохируулна уу. movwf dis2 буцааж w3debounce дуудлага гаргах; 0.2 сек хүлээлгэнэ үү. Movf dis3, W тоолуурыг шинэчлэх; Xorlw 0x5A халих эсэхийг шалгана уу; 7-ийн 10 дээр үү? btfss STATUS, Z буцах; Үгүй ээ, скан руу буцна уу. movlw h'50 '; Тийм ээ, дэлгэцийг дахин тохируулна уу. movwf dis3 буцааж w4debounce дуудлага хийх; 0.2 сек хүлээлгэнэ үү. Movf dis4, W тоолуурыг шинэчлэх; Xorlw 0x8A халих эсэхийг шалгана уу; 7-ийн 10 дээр үү? btfss STATUS, Z буцах; Үгүй ээ, скан руу буцна уу. movlw h'80 '; Тийм ээ, дэлгэцийг дахин тохируулна уу. movwf dis4 буцааж w5debounce дуудлага хийх; 0.2 сек хүлээлгэнэ үү. Movf dis5, W тоолуурыг шинэчлэх; Xorlw 0x9A халих эсэхийг шалгана уу; 7-ийн 10 дээр үү? btfss STATUS, Z буцах; Үгүй ээ, скан руу буцна уу. movlw h'90 '; Тийм ээ, дэлгэцийг дахин тохируулна уу. movwf dis5 returnw6debounce дуудлага хийхээс татгалзах; 0.2 сек хүлээлгэнэ үү. Movf dis6, W тоолуурыг шинэчлэх; Xorlw 0xCA халих эсэхийг шалгана уу; 7-ийн 10 дээр үү? 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; ========================== ================================================== =; Эндээс эхэл!; ---------------------------------------------- --------------------------------- эхлэх; I/O портуудыг тохируулах 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 STATUS, hPF movl RB оролт movwf TRISB; Дотоод таймер bsf PCON, 3 -ийг тохируулах; 4Mhz -д тохируулна уу. 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 гарц 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 -р дэлгэц ???; ================================== =========================================; Үндсэн; Шилжүүлэгч, алдагдал, алдааны дэлгэцээс оролт авдаг.;; Энэ нь @4Mhz дэлгэцүүдийг TMR0 prescal 1: 4 -т 1Кц -ийн хурдаар шинэчилдэг. 0 дэлгэцийг ашиглагдаагүй дэлгэцэнд хуваарилахад ашигладаг. 1-6 дэлгэц нь утастай байна.; Нэгдүгээрт, BCD-7Seg IC дэлгэцийн утгыг ачаалж, BCD-Dec IC идэвхжсэн; дэлгэцийн сонголт; Хоёрдугаарт, дэлгэцийн хувьд ms-ийн саатал гарна.; Гуравдугаарт, BCD-Dec IC идэвхгүй болсон … дэлгэцийг унтраахын тулд display0-ийг сонгосон;; Энэ нь 6 дэлгэц тус бүрт давтагдаж, гогцоонд орно. -------------------------------------------------- --------------- үндсэн; Disp1 movf dis1, 0 movwf PORTA дуудлага ledon goto main; ==================== ================================================== ========; Ледон; LED асаах цаг. 6 дэлгэц-1Кц = 166 цикл дэх 1/6 үүргийн мөчлөг; ----------------------------------- -------------------------------------------- ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn; ======================================== =====================================; Татгалзах дохио; Ачаалах, дуудах 4 цикл, буцах 2 цикл.; 4Mhz Tc:: count2 = 255-> 0.2 sec; -------------------------------------- ----------------------------------------- debl movlw.255; 1/5 секундын дебютээ хойшлуулах. movwf count2 дуудлага pon_wait буцах; -------------------------------------------- -----------------------------------; 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 нь анх 74LS47 ба CD4028 идэвхжүүлэх шугамаас дэлгэцийн драйвер бүрийн 470 Ом эсэргүүцэлтэй байсан. Гэсэн хэдий ч би өөрийн хэлхээний одоогийн зурвасыг туршиж үзэхэд энэ нь зөвхөн ~ 31mA татдаг болохыг олж мэдэв. Дэлгэцийн жинхэнэ драйвер нь 74LS47 -аас шууд асдаг бөгөөд идэвхжүүлэлт нь өөр IC -ээс гардаг тул дундаж болон оргил үеийн шаардлагууд, холбогдох өгөгдлийн хүснэгтүүд хурдан буурдаг… Би резисторуудыг талхны самбараас гаргаж аваад 1мА зөрүү олсон. ! CA сегментийг 4028 -аас шууд жолоодох, бүх сегментийг шууд жолоодох нь зүгээр юм шиг байна! …төрлийн.:) Надад кодын алдаа гарсан бөгөөд энэ нь товчлуур дарагдсан үед бүртгэлүүдээ цэвэрлээгүй бөгөөд хамгийн сүүлийн дэлгэц нь товчлуур дарахад 2 сегментийг маш тод асаахад хүргэсэн. Энэ муу байсан. Гэсэн хэдий ч бүртгэлийг цэвэрлэх нь энэ асуудлыг шийдсэн бөгөөд цахилгаан тасралтгүй шалгах нь 30 мА орчим тогтмол зурах боломжтой болохыг баталж байна. Энэ нь надад (ижил төстэй хэлхээний өмнөх туршлага дээр үндэслэн) 1 9V батерей (5V зохицуулалттай 500mAH/30mAH) ~ 20 цаг ажиллах хугацаа өгөх ёстой … Би LED -ийг шууд хөтлөхээр шийдсэн боловч залгуурт нь залгаарай. ямар нэгэн зүйл тохиолдсон бол урт хугацаанд.

Алхам 4: ПХБ -ийн гагнуур

ПХБ -ийн гагнуур
ПХБ -ийн гагнуур

Би төслийнхөө энэ цэг рүү хүрэх бүрдээ abit -ийг хойшлуулдаг. Эхэндээ би энэ зүйлийг утсаар боож өгөх гэж байсан боловч энэ санаагаа хурдан орхисон. Эхэндээ "Хэдэн утас гагнах нь тийм ч их асуудал биш" гэж боддог … дараа нь миний төслийг гагнахад бэлэн болоход би бодож байна. " Би прото самбар хийлгэх эсвэл өөрийн самбарыг сийлбэрлэхийн тулд явуулах ёстой байсан. "Би ПХБ сийлбэрт хараахан ороогүй байгаа бөгөөд самбар хийхдээ $$ төлөхийг хүсээгүй, тиймээ … Тийм ээ….. Би энэ зүйлийг гагнахад 3 цаг орчим зарцуулсан. Энэ нь 150 орчим утас бөгөөд энэ нь 300 гагнуурын цэг, гагнуурын гүүрний мэдрэгч юм. Ямар ч байсан самбарын арын хэсгийг зураг дээр харуулав.. Буруу #дугаарыг логик загвараар харуулсаныг харуулснаас хойш би тайлах ёстой байсан тул 20 минут бодсон. Үүний дараа би богино өмд, bam -ийг оллоо! Энэ нь төгс ажилласан.

Алхам 5: Дүгнэлт

Дүгнэлт
Дүгнэлт

ЭНЭ АЖИЛЛАЖ БАЙНА! Энэхүү төсөл нь ойролцоогоор 2 долоо хоног үргэлжилсэн бөгөөд хүсэлт гаргагч руу нарийн оноо илгээж, ~ 3 цаг код бөглөж, дибаг хийх, ~ 4 цаг талх хийх, дибаг хийх, ~ 3 цаг гагнах Зөвхөн 3 IC ашиглах боломжтой. Charlieplex 6 7 сегментийн LED. Цахилгаан эрчим хүч нь 30 мА орчим хэмжээтэй бөгөөд энэ нь тийм ч муу биш юм. 7 сегментийн LED илүү ашиглаж болно гэж бодож байна, гэхдээ дугтуйг түлхээгүй. 7 сегментийн LED ашиглан бараг ямар ч програмд ашиглах боломжтой; Термометр, цаг, текст дэлгэц гэх мэт. Зарим төвөгтэй кодын тусламжтайгаар та хөдөлгөөнт дэлгэц эсвэл зурагтай байж болно … магадгүй POV (алсын хараатай байх) төслийн суурь ч байж магадгүй. Эцсийн хэрэгжилтийг найз маань цамхаг барихад үлдээсэн болно. мөн самбарыг өөрийн үзэмжээр байрлуул. Хэрэв/Үүнийг хийсний дараа би зураг байршуулах болно. Гэхдээ хэлхээний хувьд үүнийг захиалгаар бүтээсэн бололтой!

Зөвлөмж болгож буй: