Mikro'mdaki birkaç pimle birçok LED'i nasıl kontrol edebilirim?


10

6 pimli bir G / Ç bulunan bir Atmel ATtiny13 kullanıyorum. Yaklaşık 15 LED'i kontrol etmek istiyorum, ancak her şeyi nasıl bağlayacağınızdan emin değilim. Herhangi bir tür çoğullama olmadan, bir seferde sadece 6 LED'i kontrol edebileceğim görünüyor. Mikrodenetleyicinin boyutu nedeniyle sadece 6 LED ile sınırlı mıyım?


Görmedim. Muhtemelen çoğaltıldı: electronics.stackexchange.com/questions/9860/…
Daniel Grillo

3
Seçeneklerinizi biraz daha küçük bir mikrodenetleyici satın alma maliyetiyle karşılaştırmayı unutmayın. Bağlantı noktası başına ve toplam akım sınırlarına da dikkat edin.
joeforker

Bir süre önce mikroslarla çalışmaya başladığımda, bu, net cevaplarla bulmanın kolay olmasını dilediğim bir soru. Charlieplexing hakkında bilgi edindim ve başarıyla uyguladım, ancak soruyu burada SE-topluluğu cevaplarının mükemmel kalitesiyle yeniden oluşturmak istedim.
JYelton

1
@joeforker Haklısın, projemin bir defalık olduğunu düşünürsek, daha fazla iğneli bir mikro için maliyet oldukça azdı. Bir noktada işi başarmak için yaklaşık 20 IO pinli bir mikro kullanmayı düşündüm, ancak hedeflerimden biri çok küçük bir devre kartı ayak izi idi. Ayrıca, harika sıfat pinnier !
JYelton

Yanıtlar:


18

Birkaç IO pininden çok sayıda LED'i çalıştırmak için kullanılabilecek birkaç yöntem vardır.

En basit olanı standart satır / sütun ekran çoğullamasıdır. Bu teknik ile, sürücü ile LED'ler n IO pinleri. Matematiksel olarak, görev döngüsü:(n/2)2n

1minimum(unique row patterns, unique column patterns)

Bu, tüm LED'ler yandığında (veya tüm satırlar veya tüm sütunlar aynı olduğunda) bu tekniğin% 100'lük bir görev döngüsüne ve çapraz bir çizginin yanması gerektiğinde (veya tüm satırların farklı olması durumunda bir görev döngüsüne sahip olduğu anlamına gelir. ). Her LED'i veya bir LED'i (veya sıfır LED'i) aydınlatırken yalnızca% 100 görev döngüsü garanti edilir, ancak bu çok fazla sayılmaz).1/n

Charlieplexing biraz daha karmaşıktır . Bu teknikle LED'leri n IO pinleri ile çalıştırabilirsiniz. Bu teknikle sadece n - 1 LED aynı anda yanabilir. Matematiksel olarak, görev döngüsü:n2nnn1

1minimum simultaneous sets

1/n

Bahseteceğim son yöntem, bir kaydırma yazmacı veya IO genişletici kullanmaktır. İki pim (Ham veri / saat arayüzü, I2C veya tek yönlü SPI) ile isteğe bağlı olarak çok sayıda LED'i kontrol edebilirsiniz. Herhangi bir model için görev döngüsü% 100'dür, ancak güncelleme oranı LED'lerin sayısıyla ters orantılıdır. Bu en pahalı yöntemdir. 15 LED için, o kadar çok IO pinine sahip bir mikroma geçmek muhtemelen daha ucuz olacaktır.


+1 görev döngüsü boyutu hakkında biraz açıklamak için. Charlieplexing hakkında ikinci cümlede, siz "sürücü kastettiniz n ^ 2-n LED ile n ? IO pinleri
JYelton

Charlieplexing, her sıradan bir ışığı atlarsa, çoğullamaya çok benzer şekilde yapılabilir. Aslında, bir diyot ekleyerek bu ışığı "geri kazanmak" mümkün olabilir, ancak sütun sürücüleri sabit akım çıkışları olmadıkça, diğerlerinin parlaklığına uyması zor olabilir.
supercat

11

n×(n1)n

exemple:

3 Pin üzerinde Altı LED:

PINS        LEDS
0 1 2   1 2 3 4 5 6
0 0 0   0 0 0 0 0 0
0 1 Z   1 0 0 0 0 0
1 0 Z   0 1 0 0 0 0
Z 0 1   0 0 1 0 0 0
Z 1 0   0 0 0 1 0 0
0 Z 1   0 0 0 0 1 0
1 Z 0   0 0 0 0 0 1
0 0 1   0 0 1 0 1 0
0 1 0   1 0 0 1 0 0
0 1 1   1 0 0 0 1 0
1 0 0   0 1 0 0 0 1
1 0 1   0 1 1 0 0 0
1 1 0   0 0 0 1 0 1
1 1 1   0 0 0 0 0 0

3 çıkış pimi ile Charlieplexing şeması


Çıktı pin veri kümesi ve yardımcı bir şema için teşekkür ederiz.
JYelton

1
Şemayı çizmenin bir başka yolu, NxN ızgarasıdır, ancak yalnızca sütunları sürmek ve birincil diyagonali satır sütun şortlarıyla değiştirmek.
supercat

hepsini birden açamadığım anlamına mı geliyor? Bu, hepsini bir kerede açmak istiyorsam, gözleri kandırmak için yeterince zaman harcamak zorunda olduğum anlamına mı geliyor?
MaNyYaCk

@MaNyYaCk Evet. Haklısın.
Daniel Grillo

8

Çoğullama (doğrudan tahrik) olmadan 6 LED ile sınırlısınız.

Charlieplexing ile n * pinden n * (n-1) LED'leri kullanabilirsiniz.

G / Ç genişleticileri veya kaydırma kayıtları ile neredeyse sınırsız sayıda LED kullanabilirsiniz.
Örnek: MCP23008 8 bit I2C G / Ç Genişletici


G / Ç genişleticilerinin ne olacağını açıklayabilir misiniz?
JYelton

3
Bir G / Ç genişletici, G / Ç pimlerini ve kayıtlarını içeren harici çiptir. Onlarla iletişim kurmak için I2C veya SPI gibi standart iletişim veri yollarını kullanabilirsiniz.
mjh2007

+1 TI'nin TLC594'ü ( focus.ti.com/lit/ds/symlink/tlc5940.pdf ) ile çok sayıda LED kullanabilirsiniz , ancak birçok iş için aşırıya kaçabilir . search.digikey.com/scripts/DkSearch/…
kenny

Teşekkürler - Kullanımlarını öğrenmeye zorlamak için I / O genişleticileri kullanan bir proje tasarlamalıyım.
JYelton


2

İşte inşa ettiğim bir charlieplexing örneği.

Bir deniz feneri ışın simülatörüdür ve bir diskin etrafındaki ışık demetini süpürmek için 4 GPIO'ya eklenmiş 12 LED serisi kullanır. Burada bir video var .

Proje PIC tabanlıdır, ben de 8pin uP olan ve 8pin AVR'lerle karşılaştırılabilir sayılabilecek bir PIC12f683 kullanıyorum.

LED'in yoğunluğu, 60Hz civarında 32 adım PWM sağlayan bir interupt tarafından yönlendirilir. Bir kerede yalnızca iki LED'in yanmasına izin verilir, her bir LED için ihtiyacım olan tek şey budur. Ayrıca, çözünürlük karşısında PWM yenileme hızının iyi bir şekilde değiş tokuşunu sağlar.

Çok hızlı bir yenileme hızında herhangi bir zamanda tek bir LED'i aydınlatmanın "klasik" yöntemine bağlı kalırsanız, charlieplexing'i kullanmak oldukça basit. Önce kağıt üzerinde gerekli PORT ve TRIS (resme özel kayıtlar) üzerinde çalışıyorum sonra sonuçları statik bir dizide saklıyorum. LED x'i yakmak için PIC, dizinin [x] dizinindeki değeri aramak ve bunları doğrudan PORT'a yazmak zorundadır (charliplex'te kullanılmayan diğer pinlerin durumunu korumak için biraz maskeleme ile)

Projemde gelecekteki geliştirme için bir GPIO yedek tutmak istediğim için 15 değil, 12 LED veya maksimum 5 GPIO'nun izin vereceği 20 LED var.

Her neyse ... Sadece isteğinize benzer bir çalışma örneğine sahip olmanın yararlı olabileceğini düşündüm.

Tam kaynak kodu ve şemaları blogumda mevcuttur .


0

Başka bir seçenek Neopixel LED'leri kullanmak olacaktır. Yerleşik bir kontrol IC'sine sahiptir ve istediğiniz sayıda LED'i kontrol etmek için sadece bir pime ihtiyacınız vardır. Tabii ki yeterli bir ayrı LED güç kaynağına ihtiyacınız olacak.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.