İçindekiler:

Temel Damga 2 (bs2) ve Charlieplexing Kullanan 5x4 LED Ekran Matrisi: 7 Adım
Temel Damga 2 (bs2) ve Charlieplexing Kullanan 5x4 LED Ekran Matrisi: 7 Adım

Video: Temel Damga 2 (bs2) ve Charlieplexing Kullanan 5x4 LED Ekran Matrisi: 7 Adım

Video: Temel Damga 2 (bs2) ve Charlieplexing Kullanan 5x4 LED Ekran Matrisi: 7 Adım
Video: Necmettin Erbakan Nasıl Başbakan Oldu? | 1996 | 32.Gün Arşivi 2024, Temmuz
Anonim
Temel Damga 2 (bs2) ve Charlieplexing Kullanan 5x4 LED Ekran Matrisi
Temel Damga 2 (bs2) ve Charlieplexing Kullanan 5x4 LED Ekran Matrisi

Bir Temel Damga 2 ve etrafta oturan bazı ekstra LED'ler var mı? Neden charlieplexing kavramıyla uğraşmıyorsunuz ve sadece 5 pin kullanarak bir çıktı oluşturmuyorsunuz.

Bu talimat için BS2e kullanacağım ancak BS2 ailesinin herhangi bir üyesi çalışmalıdır.

Adım 1: Charlieplexing: Ne, Neden ve Nasıl

Önce neden aradan çekilelim. Neden Basic Stamp 2 ile charlieplexing kullanalım? ---Konsept kanıtı: Charlieplexing'in nasıl çalıştığını öğrenin ve BS2 hakkında bir şeyler öğrenin. Bu, daha sonra daha hızlı 8 pinli çipler kullanarak benim için faydalı olabilir (sadece 5 tanesi i/o olacaktır).---Faydalı sebep: Temelde hiçbiri yok. BS2, gözle görülür bir titreme olmadan görüntülenemeyecek kadar yavaş. Charlieplexing nedir?---Charlieplexing, az sayıda mikroişlemci giriş/çıkış pimi ile çok sayıda LED'i çalıştırma yöntemidir. Ben charlieplexing'i www.instructables.com'dan öğrendim ve siz de yapabilirsiniz: Charlieplexing LED'leri - TeoriBirkaç mikrodenetleyici piminden çok sayıda LED nasıl sürülür. Ayrıca wikipedia'da: Charlieplexing5 i/o pinli 20 led'i nasıl çalıştırabilirim?---Lütfen "Charlieplexing nedir?" altındaki üç bağlantıyı okuyun. Bu benim yapabileceğimden daha iyi açıklıyor. Charlieplexing, her satır ve her sütun için bir i/o pinine ihtiyaç duyan geleneksel çoğullamadan farklıdır (5/4 ekran için toplam 9 i/o pini olacaktır).

Adım 2: Donanım ve Şematik

Donanım ve Şematik
Donanım ve Şematik

Malzeme listesi:1x - Temel Damga 220x - aynı tipte ışık yayan diyotlar (LED'ler) (renk ve voltaj düşüşü)5x - dirençler (direnç değeriyle ilgili olarak aşağıya bakın)Yardımcı/Opsiyonel:BS2Momentary basmalı düğmenizi sıfırlama anahtarı olarak programlama yöntemi6v -9vGüç kaynağı, BS2 sürümünüze bağlı olarak (kılavuzunuzu okuyun)Şematik:Bu şema, mekanik düzen düşünülerek bir araya getirilmiştir. Sol tarafta ayarlanan LED ızgarasını göreceksiniz, bu, BS2 kodunun yazıldığı yöndür. Her bir LED çiftinin anodunun diğerinin katotuna bağlı olduğuna dikkat edin. Daha sonra beş i/o pininden birine bağlanırlar. Direnç Değerleri: Direnç değerlerinizi kendiniz hesaplamalısınız. LED'lerinizin veri sayfasını kontrol edin veya LED'lerinizin voltaj düşüşünü bulmak için dijital multimetrenizdeki LED ayarını kullanın. Bazı hesaplamalar yapalım: Besleme Voltajı - Voltaj Düşüşü / İstenen Akım = Direnç DeğeriBS2 5v ayarlı güç sağlar ve 20ma kaynak yapabilir. akım. Led'lerim 1.6v düşüşe sahip ve 20ma.5v - 1.6v /.02amps = 155ohms'de çalışıyor BS2'nizi korumak için hesaplama ile elde ettiğinizden sonraki daha yüksek direnç değerini kullanmalısınız, bu durumda 180ohm olacağını düşünüyorum. 220ohm kullandım çünkü geliştirme kartımda her bir giriş/çıkış pini için yerleşik bir direnç değeri var. NOT: Her pinde bir direnç olduğundan, pinlerden biri V+ diğeri Gnd olduğundan, bunun her led üzerindeki direnci etkin bir şekilde ikiye katladığına inanıyorum. Bu durumda direnç değerlerini yarı yarıya azaltmalısınız. Çok yüksek bir direnç değerinin olumsuz etkisi LED'in sönmesidir. Birisi bunu doğrulayabilir ve bu bilgiyi güncelleyebilmem için bana bir PM veya yorum bırakabilir mi? Bu çipi ayrıca lehimsiz devre tahtamda da kullanıyorum ve bir Devre İçi Seri Programlama (ICSP) başlığı ekledim. Başlık 5 pimdir, 2'den 5'e kadar olan pimler bir DB9 seri kablosundaki pim 2-5'e bağlanır (Pin 1 kullanılmaz). Lütfen bu ICSP başlığını kullanmak için DB9 kablosundaki 6 ve 7 numaralı pinlerin birbirine bağlı olması gerektiğini unutmayın. Sıfırlama: Anlık bir basmalı sıfırlama düğmesi isteğe bağlıdır. Bu sadece itildiğinde pim 22'yi toprağa çeker.

3. Adım: Breadboarding

Breadboarding
Breadboarding
Breadboarding
Breadboarding

Şimdi matrisi bir breadboard üzerinde oluşturmanın zamanı geldi. Her bir led çiftinden bir bacağı birbirine bağlamak için bir terminal şeridi ve diğer bacakları bağlamak için küçük bir atlama teli kullandım. Bu, yakın plan fotoğrafta ayrıntılı olarak anlatılmıştır ve burada ayrıntılı olarak açıklanmıştır:1. Breadboard'unuzu daha büyük resme uyacak şekilde yönlendirin2. LED 1'i Anot (+) size doğru ve Katot (-) sizden uzağa gelecek şekilde yerleştirin.3. LED 2'yi, LED 1 katodunun bağlantı terminal şeridindeki Anot (+) ile aynı yönde yerleştirin.4. LED 1'in Anotunu LED 2.5'in Katotuna bağlamak için küçük bir atlama teli kullanın. Her bir LED çifti karta eklenene kadar tekrarlayın. Normalde ekmek kartının güç bus şeritlerini BS2 G/Ç pinleri için veri yolu şeritleri olarak kullanıyorum. Yalnızca 4 bus şeridi olduğundan, P4 için bir terminal şeridi kullanıyorum (beşinci G/Ç bağlantısı). Bu, aşağıdaki büyük resimde görülebilir.6. LED 1 katodu için terminal şeridini P0 bus şeridine bağlayın. Her çift için uygun P*'yi değiştirerek her tek numaralı LED için tekrarlayın (şemaya bakın).7. LED 2 katodu için terminal şeridini P1 bus şeridine bağlayın. Her bir çift için uygun P*'yi değiştirerek her tek numaralı LED için tekrarlayın (şemaya bakın).8. Her bir veri yolu şeridini BS2 (P0-P4).9 üzerindeki uygun G/Ç pinine bağlayın. Şematik 10 ile eşleştiklerinden emin olmak için tüm bağlantıları kontrol edin. Kutlayın. NOT: Yakın çekimde, ikinci G/Ç pinine bağlantı tek numaralı LED'lerin Anotunda olduğu için 7. adımı izlemediğimi göreceksiniz. Çift numaralı LED'lerin Katodunun, tek numaralı LED'lerin Anotuna bağlı olduğunu ve böylece bağlantının her iki şekilde de aynı olduğunu unutmayın. Bu not sizi şaşırtıyorsa, görmezden gelin.

Adım 4: Programlama Temelleri

Charlieplexing'in çalışması için her seferinde sadece bir led açarsınız. Bunun BS2 ile çalışması için iki temel adıma ihtiyacımız var: 1. OUTS komutunu kullanarak pinler için çıkış modlarını ayarlayın.2. DIRS komutunu kullanarak hangi pinleri çıkış olarak kullanacağını BS2'ye söyleyin Bu işe yarar çünkü BS2'ye hangi pinlerin yüksek ve düşük süreceğini ve hangi pinlerin çıkış olduğunu belirleyene kadar bunu yapmasını bekleyecektir. sadece LED 1'i yanıp sönmeye çalışıyor Şemaya bakarsanız, P0'ın LED 1'in Katoduna (-) bağlı olduğunu ve P1'in aynı LED'in Anotuna bağlı olduğunu görebilirsiniz. Bu, P0 düşük ve P1 yüksek sürmek istediğimiz anlamına gelir. Bu şu şekilde yapılabilir: P4-P1'i yüksek ve P0'ı düşük çalıştıran "OUTS = %11110". (% bir ikili sayının takip edilmesi gerektiğini belirtir. En alttaki ikili basamak her zaman sağdadır. 0=DÜŞÜK, 1=YÜKSEK)BS2 bu bilgiyi saklar ama biz hangi pinlerin çıkış olduğunu bildirene kadar üzerinde işlem yapmaz. Bu adım önemlidir, çünkü aynı anda sadece iki pin çıkış olmalıdır. Geri kalanlar, bu pinleri Yüksek Empedans moduna ayarlayan girişler olmalıdır, böylece herhangi bir akım batmazlar. P0 ve P1'i sürmemiz gerekiyor, bu yüzden bunları çıkışlara ve geri kalanını şu şekilde girişlere ayarlayacağız: "DIRS = %00011".(% bir ikili sayının takip edilmesi gerektiğini gösterir. En düşük ikili basamak her zaman sağdadır. 0 =GİRİŞ, 1=ÇIKIŞ)Bunu bazı yararlı kodlarda bir araya getirelim:' {$STAMP BS2e}' {$PBASIC 2.5}DO OUTS = %11110 'Sürücü P0 düşük ve P1-P4 yüksek DIRS = %00011 'P0- Ayarla Çıkışlar olarak P1 ve Girişler olarak P2-P4 DURAKLAT 250 'LED'in açık kalması için duraklat DIRS = 0 'Tüm pinleri Giriş olarak ayarlayın. Bu, LED'in kapalı kalması için LED PAUSE 250 'Pause'u kapatır LOOP

Adım 5: Geliştirme Döngüsü

Artık hepsinin çalıştığından emin olmak için bir pin çalışma zamanı gördük.20led_Zig-Zag.bseBu ekli kod, 20 LED'in her birini bir zikzak düzeninde yakmalıdır. Her pin yandığında, tüm pinleri tekrar girişlere çevirmek için "DIRS = 0" kullandığımı fark edeceksiniz. Çıkış pinlerini kapatmadan OUTS'u değiştirirseniz, yanmaması gereken bir ledin döngüler arasında yanıp sönebileceği bir miktar "gölgelenme" alabilirsiniz. Bu kodun başındaki W1 değişkenini "W1 = 1" olarak değiştirirseniz, orada her LED yanıp sönmesi arasında yalnızca 1 milisaniyelik bir duraklama olacaktır. Bu, tüm LED'ler yanıyormuş gibi görünmesini sağlayan bir görüş kalıcılığı (POV) etkisine neden olur. Bu, LED'leri daha kısık hale getirme etkisine sahiptir, ancak bu matriste karakterleri nasıl göstereceğimizin özüdür.20led_Interpreter_Proto.bseBu noktada, aydınlatmak için gereken çılgın kombinasyonları çevirmek için bir tür yorumlayıcı kodu geliştirmem gerektiğine karar verdim. LED'ler kullanılabilir bir desene dönüştürülür. Bu dosya benim ilk denemem. Dosyanın alt kısmında karakterlerin 5 basamaklı ikili dört satırda saklandığını göreceksiniz. Her satır okunur, ayrıştırılır ve bir ledin her yakılması gerektiğinde bir alt program çağrılır. Bu kod, 1-0 sayıları arasında geçiş yaparak çalışır. Çalıştırmayı denerseniz, karakterlerin tanınmayacak kadar yavaş yanıp sönmesine neden olan çok yavaş bir yenileme hızından rahatsız olduğunu fark edin. Bu kod birçok nedenden dolayı kötüdür. Öncelikle, tüm bilgiler dört bitlik gruplar halinde depolandığından, beş basamaklı ikili EEPROM'da 8 basamaklı ikili dosya kadar yer kaplar. İkinci olarak, hangi pinin aydınlatılması gerektiğine karar vermek için kullanılan SELECT CASE, 20 vaka gerektirir. BS2, SEÇ işlemi başına 16 vaka ile sınırlıdır. Bu, bir IF-THEN-ELSE ifadesi ile bu sınırlamayı aşmam gerektiği anlamına geliyor. Daha iyi bir yol olmalı. Birkaç saat kafamı kaşıdıktan sonra keşfettim.

Adım 6: Daha İyi Bir Tercüman

Matrisimizin her satırı, her biri açık veya kapalı olabilen 4 LED'den oluşur. BS2, bilgileri EEPROM'unda dört bitlik gruplar halinde depolar. Bu bağıntı bizim işimizi çok kolaylaştırmalı. Bu gerçeğe ek olarak, toplam 16 olasılık için dört bit 0-15 ondalık sayılara karşılık gelir. Bu, veya SEÇİMİNİ çok daha kolay hale getirir. EEPROM'da saklanan 7 rakamı:'7 %1111, %1001, %0010, %0100, %0100, Her satırın 0-15'e ondalık bir denkliği vardır, bu yüzden bir okuruz bellekten sıraya girin ve doğrudan SELECT CASE işlevine besleyin. Bu, her bir karakteri yapmak için kullanılan insan tarafından okunabilir ikili matrisin (1=led açık, 0=led kapalı) yorumlayıcı için anahtar olduğu anlamına gelir. 5 satırın her biri için aynı SELECT CASE'i kullanmak için başka bir seçim durumu kullandım DIRS ve OUTS'u değişken olarak ayarlamak için. İlk önce karakterin beş satırının her birinde ROW1-ROW5 değişkenlerini okudum. Ana program daha sonra karakteri görüntülemek için alt programı çağırır. Bu alt program ilk satırı alır ve dört olası OUTS kombinasyonunu değişken outp1-outp4'e ve iki olası DIRS kombinasyonunu direc1 & direc2'ye atar. LED'ler yanıp söner, satır sayacı artırılır ve diğer dört satırın her biri için aynı işlem yapılır. Bu, ilk yorumlayıcı programından çok daha hızlıdır. Bununla birlikte, hala gözle görülür bir titreme var. Videoya bir bakın, kamera titremeyi çok daha kötü gösteriyor ama siz anladınız. Bu konsepti picMicro veya AVR çipi gibi çok daha hızlı bir çipe taşımak, bu karakterlerin gözle görülür bir titreme olmadan görüntülenmesini sağlayacaktır.

Adım 7: Buradan Nereye Gidilir

Devre kartları yapmak için bir cnc değirmenim veya aşındırma malzemelerim yok, bu yüzden bu projeyi kablolamayacağım. Bir değirmeniniz varsa ve buradan ileriye gitmek için işbirliği yapmak istiyorsanız, bana bir mesaj gönderin. Bu proje için bitmiş bir üründen bir şeyler göstermek için malzeme ve nakliye için ödeme yapmaktan mutlu olurum.

Diğer Olasılıklar: 1. Bunu başka bir çipe taşıyın. Bu matris tasarımı, üç durumlu (yüksek, düşük veya giriş (yüksek empedans) olabilen pinler) mevcut 5 i/o pinine sahip herhangi bir çip ile kullanılabilir. 2. Daha hızlı bir çip (belki AVR veya picMicro) kullanarak ölçeği artırabilirsiniz. 20 pinli bir çip ile 8x22'lik bir ekranı charlieplex yapmak için 14 pin kullanabilir ve kalan pinleri bir bilgisayardan veya başka bir kontrol cihazından seri komutlar almak için kullanabilirsiniz. Üç tane daha 20 pinli çip kullanın ve aynı anda toplam 11 karakter için 8x88 olan kayan bir ekrana sahip olabilirsiniz (elbette her karakterin genişliğine bağlı olarak). İyi şanslar, iyi eğlenceler!

Önerilen: