İçindekiler:
- 1. Adım: Konsept
- 2. Adım: Tasarım ve Parça Listesi
- 3. Adım: Breadboarding ve Mikro Kod
- Adım 4: PCB Lehimleme
- Adım 5: Sonuç
Video: 7-segment LED'leri Kullanan BloodBowl Dönüş Sayacı: 5 Adım
2024 Yazar: John Day | [email protected]. Son düzenleme: 2024-01-30 13:22
Bu proje, altı Charlieplexed 7-segment LED kullanan bir BloodBowl oyun dönüş sayacı içindi.
1. Adım: Konsept
Bir arkadaşım, masa oyunu için Bloodbowl Turn sayacı oluşturma fikirlerini sordu. Bunun ne olduğunu, ne istediğini bilmeden, bunu nasıl yapacağıma karar vermem biraz zaman aldı. Önce onun ne istediği hakkında bir fikrim olması gerekiyordu, bu yüzden konsept art (resim) ile başladım. Temel fikir, her biri 3 LED'i kontrol eden 3 basmalı düğmeye sahip olmaktır ve özel yapım bir kulenin içine yerleştirilecektir. Tek büyük istek, ilk 4 ekranın 0'dan 8'e kadar sayılması ve sıfırlanması ve alttaki 2'nin olmasıydı. ekranlar 8'den 0'a kadar geri sayar ve geri döner. Ben devreyi tamamlardım, o da kuleyi tamamlardı.
2. Adım: Tasarım ve Parça Listesi
Konsept 6 adet 7-segment LED gerektirdiğinden ve elimde 8 bitlik Microchip PIC'ler bulunduğundan, LED'leri kontrol etmek için PIC'leri kullanmanın yollarını araştırdım. Bu bağlantıyı buldum https://www.mikroe.com/en/books /picbook/7_08chapter.htm "Her ekranın parlaklığı etkilenmeden bu şekilde 6 ekrana kadar erişilebilir." Bunu bir meydan okuma ve projemin bir parçası olarak araştırmam gereken bir şey olarak düşündüm. Yaptığım ilk şey, kutumdan akkor 7 segmentli ekranlar alıp nasıl çalışacaklarını görmek oldu. Kötü haber. Seçtiğim belirli parçalar istediğim gibi davranmıyordu. Segment gerektiğinde devre tahtası üzerinde yanar, ancak diğer 6 segmente kaçak akım dağıtılır. Akkor ekranların gidilecek yol olmadığını fark ettim ya da onları farklı bir şekilde kullanmam gerekiyordu. Basit olması için elimdeki 7 segmentli LED'lerin devre tahtası için çalışacağını doğruladım ve bazı ortak anot ekranları sipariş ettim. Yapmam gereken ikinci şey tasarımımı düzenlemek ve kod üzerinde çalışmaya başlamaktı. Resimdeki devrem. Çok fazla değil, çünkü PIC'deki kod çoğullama ile ilgilenir…errr Charlieplexing. Not: TÜM 6 ekran, sürücü IC'sinden AYNI satırlara sahiptir. Seçici IC, her seferinde 1 olmak üzere her ekranı etkinleştirir ve 7 segmentli hatlar PIC tarafından buna göre güncellenir. Çok basit bir fikir. Bundan sonra, gerekli olan tek şey kod ve donanım tamamlamadır. Parça ListesiBelirli bileşenlere karar verirken Digi-Key'den 3 küçük siparişten sonra, ihtiyacım olan her şeye sahiptim (eldeki bazı şeylerle);1 ~3"x4 " PCB6 küçük basmalı düğme anahtarları (NO)1 74LS47, 7 segmentli ekran IC1 PIC16F627 1 CD4028, 10 seçiciden 1'i IC 6 10KOhm dirençler1 470Ohm direnç1 tel makarası. Çeşitli renkler ve ölçüler kullandım ama bu sadece benimdi.1 78L05 5V regülatör1 9V pil klipsi1 9V pil1 küçük anahtar (güç açma/kapama için) Bunu orta derecede karmaşık bir proje olarak görüyorum, çünkü;1) Mikroişlemci kodu gerekli2) Lehimleme ve breadboarding 3) Tasarım optimizasyonu. Bu sorunların hiçbiri tek başına aşırı derecede karmaşık değildir, ancak herhangi bir deneyim olmadan hepsini üstlenmek yeni başlayanlar için biraz fazla olabilir. Cihazı, lehimleme istasyonunu vb. yakmak için bir donanım programcısı gereklidir… Birinin fark edebileceği İLK şey, 7 segmentli LED'lerin seri (akım sınırlayıcı) dirençleri YOKTUR! Orijinal tasarımımın bunları içerdiğini belirterek bunu çabucak ele almama izin verin… ancak açıklama için bir sonraki adımı okuyun!
3. Adım: Breadboarding ve Mikro Kod
Breadboard bunun için bir zorunluluktu. Gösterilen benim genel devre tahtamdır, ancak bu projenin boyutu için aslında bunu ve daha küçük bir devre tahtası kullandım, çünkü aralarında boşluk bırakılması gereken birçok kablo vardı. İlk olarak, başlangıç koduyla tek bir 7-segment LED'i test ettim. Bu 3 şeyi doğruladı;1) IC'lerin kablolamasının iyi olduğu doğrulandı!2) Kodumu optimize etmemi ve sonlandırmamı sağladı.3) Akım sınırlayıcı dirençlere ihtiyacım olmadığını fark etmemi sağladı!1 KABLOLAR Belirtildiği gibi, şematik tasarımım bulundu kodumla çalışmak için, çünkü LED tek bir düğme anahtarı kullanarak sayılar arasında geçiş yapacaktı, böylece kodumu ve düzenimi doğruladı. Fazla bir şey gerekmiyordu ancak devre tahtası, iyi durumda olduğumu doğruladı.2 CODEI başlangıçta kodumu düğmeleri taramak için bir ana yordamla ayarlamıştı ve ISR (Kesme Hizmeti Rutini),. Breadboarding testlerinden sonra rutinleri tersine çevirdim, bu yüzden çoğu zaman sürekli olarak sayıları ve düğmeleri kontrol etmek için ISR'yi gösteriyordu. Bunu yapmamın nedeni, sadece sabit bir ekrana sahip olmaktı, PIC dahili bir 4Mhz saat ile çalıştığından, düğmeler için çok az zaman kaybediyorum. Önemli değil… sadece kodu nasıl yapmak istediğinize ve her uygulama için neyin en mantıklı olduğuna bağlı. Bunun için ekran önemlidir, bu yüzden ana rutine koydum. İlk parçalarım geldiğinde (6 ekranın tümü!), breadboard kablolamasını tamamladım ve başka bir sorun buldum. Düğmeye bastığımda kodumda temizlenmeyen bazı özensiz kayıtlar vardı ve ISR bazı küçük ekran hatalarına neden oluyordu.;========================== ================================================= =====;Dönüş Sayacı;; -----------;Dsply3 Dsply2;Dsply4 Dsply1;Led1 Led3; A5 |4 15| A6 -- Led2; Karşı |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;;=================================== =============================================; Revizyon Geçmişi & Notlar:; V1.0 İlk Başlık, Kod 3/30/09;;;(C) 5/ 2009;Bu kod kişisel öğrenme/uygulama/değişiklik için kullanılabilir.;Bu kodun ticari ürünlerde herhangi bir şekilde kullanılması bu ücretsiz sürümü ihlal eder.;Sorular/yorumlar için yahoo dot com adresinden devre nokta mage ile iletişime geçin..;------------------------------------------------ ----------------------------------#include P16F627A. INC;============== ================================================= ================; Tanımlar;------------------------------------------------ ----------------------------------;================== ================================================= ===========; Veri;------------------------------------------------ ----------------------------------; Zaman tutma değişkenlerisay1 eş 20 sayı2 eş 21 dis1 eş 22dis2 eş 23dis3 eş 24dis4 eş 25dis5 eş 26dis6 eş 27w_temp eş 28status_temp eş 29ISRCNTR eş 2A;===================== ================================================= =======; Vektörleri Sıfırla;; YAPILANDIRMAYI KONTROL EDİN. YANMADAN ÖNCE PARÇALAR!!!; INTOSC; MCLR: ETKİN; PWRUP: ETKİN; DİĞER TÜMLER: DEVRE DIŞI!!;;------------------------------------------ -------------------------------------RESET_ADDR EQU 0x00 ISR_ADDR EQU 0x04 org RESET_ADDR başlangıca git;== ================================================= ============================; ISR;;---------------------------------------------------------- --------------------------------org ISR_ADDR movwf w_temp takasf DURUM, w movwf status_temp;; BURADA ISR; PB0-PB5 Anahtarlarını Kontrol Edin btfsc PORTB, 0; SW1 çağrısını kontrol edin sw1debounce btfsc PORTB, 1; SW1 çağrısını kontrol edin sw2debounce btfsc PORTB, 2; SW1 çağrısını kontrol edin sw3debounce btfsc PORTB, 3; SW1 çağrısını kontrol edin sw4debounce btfsc PORTB, 4; SW1 çağrısını kontrol edin sw5debounce btfsc PORTB, 5; SW1 çağrısını kontrol edin sw6debounce git endisrsw1debounce çağrı geri dönüşü; 0,2 saniye bekleyin çağrı geri dönüşü incf dis1; Sayacı güncelle movf dis1, W; Taşma olup olmadığını kontrol edin xorlw 0x1A; 7 segmentte 10 mu? btfss DURUM, Z dönüşü; Hayır, taramaya geri dönün. movlw h'10'; Evet, ekranı sıfırla. movwf dis1 geri dönerw2debounce çağrı geri dönüşü; 0,2 saniye bekleyin çağrı geri dönüşü incf dis2; Sayacı güncelle movf dis2, W; Taşma olup olmadığını kontrol edin xorlw 0x4A; 7-segment 10? btfss DURUM, Z dönüşü; Hayır, taramaya geri dönün. movlw h'40'; Evet, ekranı sıfırla. movwf dis2 geri dönerw3debounce çağrı geri dönüşü; 0,2 saniye bekleyin çağrı geri dönüşü incf dis3; Sayacı güncelle movf dis3, W; Taşma olup olmadığını kontrol edin xorlw 0x5A; 7-segment 10? btfss DURUM, Z dönüşü; Hayır, taramaya geri dönün. movlw h'50'; Evet, ekranı sıfırla. movwf dis3 returnw4debounce çağrı geri dönüşü; 0,2 saniye bekleyin çağrı geri dönüşü incf dis4; Sayacını güncelle movf dis4, W; Taşma olup olmadığını kontrol edin xorlw 0x8A; 7 segmentte 10 mu? btfss DURUM, Z dönüşü; Hayır, taramaya geri dönün. movlw h'80'; Evet, ekranı sıfırla. movwf dis4 geri dönerw5debounce çağrı geri dönüşü; 0,2 saniye bekleyin çağrı geri dönüşü incf dis5; Sayacı güncelle movf dis5, W; Taşma olup olmadığını kontrol edin xorlw 0x9A; 7-segment 10? btfss DURUM, Z dönüşü; Hayır, taramaya geri dönün. movlw h'90'; Evet, ekranı sıfırla. movwf dis5 geri dönerw6debounce çağrı geri dönüşü; 0,2 saniye bekleyin çağrı geri dönüşü incf dis6; Sayacı güncelle movf dis6, W; Taşma olup olmadığını kontrol edin xorlw 0xCA; 7 segmentte 10 mu? btfss DURUM, Z dönüşü; Hayır, taramaya geri dönün. movlw h'C0'; Evet, ekranı sıfırla. movwf dis6 returnendisr bcf INTCON, T0IF swapf status_temp, w movwf STATUS swapf w_temp, f swapf w_temp, wretfie;============================= ================================================= =; Buradan başlayın!;---------------------------------------------- ---------------------------------Başlat; Yapılandırma G/Ç bağlantı noktaları clrf PORTA movlw 0x07 movwf CMCON bcf STATUS, RP1 bsf STATUS, RP0 movlw h'00';RA Çıkışları, RA5 Çıkış yok movwf TRISA bcf STATUS, RP0 clrf PORTB bsRP0 STATUS'; RB Girişleri movwf TRISB; Dahili zamanlayıcıyı ayarla bsf PCON, 3; 4Mhz'ye ayarlayın. movlw h'CF'; Tmr0 Dahili kaynak, ön ölçekleme TMR0 1:256 movwf OPTION_REG movlw h'A0' movwf INTCON; TMR0 kesintilerini etkinleştirin, bcf STATUS, RP0; Kayıtları Başlat clrf PORTA; PortA clrf PORTB'yi temizle; PortB çıkışlarını temizle clrf sayısı1 clrf sayısı2 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' geri tepme; 0,2 sn;test LED'leri, ekran 8 ???;===================================== =========================================; Ana; Anahtarlar, geri tepmeler ve incriments ekranlarından girdi alır.;Bu, @4Mhz TMR0 ön ayar 1:4 ile 1Khz hızında ekranları günceller.;Görüntü 0, kullanılmayan bir ekrana tahsis etmek için kullanılır. Ekran 1-6 kabloludur.;İlk olarak, BCD-7Seg IC ekran değeri ile yüklenir VE BCD-Dec IC ekran seçimi için etkinleştirilir;İkincisi, ekran için ms gecikmesi tutulur.;Üçüncü, BCD-Aralık IC devre dışı…ekran0 ekranı kapatmak için seçilir;;Bu, 6 ekranın her biri için tekrarlanır ve döngüye alınır.;ISR, anahtar algılamayı 15Hz hızında gerçekleştirir.;-------------- -------------------------------------------------- ---------------main;Disp1 movf dis1, 0 movwf PORTA çağrı ledon ana git;===================== ================================================= ========; Ledon; LED gücü açıkken yerleşme süresi.; 6 ekran -> 1Khz'de 1/6 görev döngüsü = 166 döngü;----------------------------------- --------------------------------------------ledon movlw.54 movwf count1ledloop decfsz count1, F goto ledloopreturn;=========================================== ====================================; Geri dönme sinyali; Yüklemek ve çağırmak için 4 döngü, geri dönmek için 2 döngü.; 4Mhz Tc:: sayı2=255 -> 0,2 sn;-------------------------------------- -------------------------------------------- geri dönme movlw.255; 1/5 saniyelik geri dönme gecikmesi. movwf count2 çağrı pon_wait dönüş;------------------------------------------- -----------------------------------; say1=255d:: 0'a 775 döngü, geri dönmek için + 3 döngü.;-------------------------------- ----------------------------------------------pon_waitbig_loopS movlw.255 movwf count1short_loopS decfsz count1, F goto short_loopS decfsz count2, F goto big_loopSreturnend3 CIRCUITI orijinal olarak 74LS47 ve CD4028 etkinleştirme hattından her ekran sürücüsü hattından 470Ohm dirençlere sahipti. Ancak devremin akım çekişini test ettim ve sadece ~31mA çektiğini gördüm. Ekranlar için gerçek sürücü doğrudan 74LS47'den ve etkinleştirme başka bir IC'den olduğundan, ortalama ve en yüksek gereksinimlerin ve ilgili veri sayfalarının hızlı bir şekilde tükenmesi….. Dirençleri devre tahtasından çıkardım ve 1mA'lık bir fark buldum ! Tüm segmentleri doğrudan sürerken 4028'den doğrudan CA hattını sürmek uygun görünüyor! …bir nevi.:) Kodumda, bir düğmeye basıldığında kayıtlarımı temizlemeyen ve bir düğmeye basıldığında son ekranın 2 bölümün çok parlak yanmasına neden olan bir aksaklık oldu. Bu kötüydü. Ancak, kayıt defterinin temizlenmesi bu sorunu çözdü ve sürekli güç kontrolleri, sürekli olarak 30mA çekiş civarında olduğunu doğruladı. Bu bana (benzer devrelerle ilgili önceki deneyimlere dayanarak) 1 9V pil kullanarak ~20 saat çalışma süresi sağlamalı (5V düzenleme altında 500mAH/30mAH)…Umarım! bir şey olduysa, uzun vadeli.
Adım 4: PCB Lehimleme
Projemde bu noktaya her geldiğimde abit'i geciktiriyorum. İlk başta bu şeyi tel ile saracaktım ama hemen bu fikirden vazgeçtim. İlk başta "Birkaç tel lehimlenecek, önemli değil" diye düşündüm… sonra, projem lehimlenmeye hazır olduğunda, " Ya bir proto kartı yaptırmak için göndermeliydim ya da kendi tahtamı kazımalıydım". PCB aşındırmayla (henüz) ilgilenmedim ve bir tahta yaptırmak için $$ ödemek istemedim, bu yüzden…. Evet….. Bu şeyi lehimlemek için yaklaşık 3 saat harcadım. Yaklaşık 150 tel, yani bu 300 lehim noktası artı lehim köprüleri için rötuşlar. Her neyse, resimdeki tahtanın arka tarafı….evet…biraz karışık, ama hepsi bittiğinde sadece 1 lehim kısa kaldı. Ekran, deşifre etmem gereken mantıksal bir düzende yanlış #'lerin görüntülendiğini gösterdiğinden 20 dakika düşündüm. Ondan sonra kısa olanı buldum ve bam! Mükemmel çalıştı.
Adım 5: Sonuç
ÇALIŞTI!Bu proje yaklaşık olarak;~2 hafta, istekte bulunana ince noktaları düşünmek ve e-posta ile göndermek, ~3 saat kod tamamlama ve hata ayıklama, ~4 saat breadboarding ve hata ayıklama, ~3 saat lehimleme Sadece 3 IC kullanarak mümkündür. Charlieplex 6 7-segment LED'ler. Güç çekişi bu tasarımla yaklaşık 30mA'da, ki bunu kendim söylersem fena değil. Daha fazla 7-segment LED'in kullanılabileceğinden şüpheleniyorum, ancak sınırları zorlamadım. Bu fikir olabilir 7 segmentli LED'ler kullanarak hemen hemen HER TÜRLÜ uygulamaya uygulanabilir; termometre, saat, metin ekranı, vb. Bazı zor kodlarla, hareketli bir ekranınız veya resimleriniz olabilir… belki bir POV (görüşte kalıcılık) projesi için bir temel bile olabilir. Son uygulama arkadaşımın Kulesini inşa etmesine bırakıldı. ve tahtayı uygun gördüğü şekilde yerleştirin. Eğer/Bu yapılırsa, yüklenen bir resim alacağım. Ancak devreye gelince, bu siparişe göre yapılmış gibi görünüyor!
Önerilen:
TM1637 LED Ekran Kullanan Arduino Sayacı: 7 Adım
TM1637 LED Display Kullanan Arduino Sayacı: Bu dersimizde LED Display TM1637 ve Visuino kullanarak basit bir sayı sayıcı yapmayı öğreneceğiz.Videoyu izleyin
TM1637 LED Ekran ve Engelden Kaçınma Sensörü Kullanan Arduino Sayacı: 7 Adım
TM1637 LED Ekran ve Engelden Kaçınma Sensörü Kullanan Arduino Sayacı: Bu derste LED Display TM1637 ve engellerden kaçınma sensörü ve Visuino kullanarak basit bir rakam sayacı yapmayı öğreneceğiz.Videoyu izleyin
Programlanabilir LED'leri Kullanan Entegre Flaşörlü Motosiklet Kuyruk Lambası: 4 Adım
Programlanabilir LED'leri Kullanan Entegre Flaşörlü Motosiklet Kuyruk Lambası: Merhaba! Bu, motosikletiniz veya muhtemelen WS2812B (bireysel olarak adreslenebilir led'ler) ve Arduinos kullanan herhangi bir şey için özel bir Programlanabilir RGB Kuyruk Lambasının (entegre flaşörler/göstergelerle) nasıl yapılacağına dair biraz kolay bir DIY. . 4 aydınlatma modu vardır
ESP8266 NODEMCU BLYNK IOT Eğitimi - Esp8266 Blunk ve Arduino IDE Kullanan IOT - LED'leri İnternet Üzerinden Kontrol Etme: 6 Adım
ESP8266 NODEMCU BLYNK IOT Eğitimi | Esp8266 Blunk ve Arduino IDE Kullanan IOT | LED'leri İnternet Üzerinden Kontrol Etme: Merhaba arkadaşlar, bu talimatta IOT'yi ESP8266 veya Nodemcu ile nasıl kullanacağımızı öğreneceğiz. Bunun için blynk uygulamasını kullanacağız.Yani LED'leri internet üzerinden kontrol etmek için esp8266/nodemcu'muzu kullanacağız.Böylece Blynk uygulaması esp8266 veya Nodemcu'muza bağlanacak
Çok Renkli LED'leri Kullanan Seri LED Işık: 3 Adım (Resimlerle)
Çok Renkli LED'leri Kullanan Seri LED Işık: Bir Seri LED ışığı o kadar pahalı değil ama benim gibi DIY sever (bir Hobi) iseniz o zaman kendi seri LED'lerinizi yapabilirsiniz ve piyasada bulunan ışıktan daha ucuzdur. Yani, Bugün I 5 Vol ile çalışan kendi Seri LED ışığımı yapacağım