Sahibim:
- 2 8x8 LED Matris ve
- bir MAX7219 Chip.
S: Acaba bunu Arduino Duemilanove cihazına nasıl bağlayabilirim ?
Google'da çalışıyordum ama nasıl olduğunu bulamadım.
Sahibim:
S: Acaba bunu Arduino Duemilanove cihazına nasıl bağlayabilirim ?
Google'da çalışıyordum ama nasıl olduğunu bulamadım.
Yanıtlar:
Bryan Chung'un İnternet Arşivi'nde , bir LED Matrix'i bir MAX7219 kullanarak bir Arduino'ya nasıl bağlayacağına dair bir öğretici vardı :
İşte bir Arduino mikro denetleyici kartı ile kontrol edilen MAX7219 IC tarafından tahrik edilen 8 × 8 LED matrisli bir deney. LED matrisi ve IC'yi bağlayan tüm kabloları toplamak için DinoTech'ten Tan tarafından özel bir PCB yapılmıştır. Arduino kartından her şeyi boşaltmamak için ayrı bir 12V güç kaynağı ile birlikte gelir.
MAX7219 sürücü IC'sini kontrol etmek için sadece 4 kablo gereklidir. Onlar
Veri Saati Kilitleme / yük Topraklama
Veri ve saat pinleri, Arduino'daki shiftOut () komutu için olanlarla eşleşmelidir. Mandal pimi, shiftOut komutundan sonra DÜŞÜK ila YÜKSEK darbe verir. Javelin Stamp için orijinal programı yazdım. Arduino sadece 8 bit veri kaydırabildiğinden, hem üst hem de alt baytları her komut için 2 bayt kontrol gerektiren MAX7219'a kaydırmak için 2 ayrı komut kullanmam gerekiyor.
8 × 8 LED matrisinin veri yapısı için, 8 bit uzunluğunda bir bayt dizisi kullanıyorum. Matristeki her satır Y boyutuna karşılık gelir. Satırdaki her bit X boyutuna karşılık gelir. Basamak 1 açık; 0 kapalı. X yönü tersine çevrilir ve ayrıca 1 bit kaydırma vardır. UpdateLED () işlevi bunu sağlar.
İlk program tek bir çizgi hareketinin animasyonudur.
int CLOCK = 12;
int LATCH = 13;
int DATA = 11;
byte matrix[8];
int idx = 0;
void setup() {
pinMode(CLOCK, OUTPUT);
pinMode(LATCH, OUTPUT);
pinMode(DATA, OUTPUT);
digitalWrite(CLOCK, LOW);
digitalWrite(LATCH, LOW);
digitalWrite(DATA, LOW);
initLED();
clearLED();
}
void loop() {
for (int j=0;j<8;j++) {
updateLED(idx, j, true);
}
refreshLED();
delay(200);
for (int j=0;j<8;j++) {
updateLED(idx, j, false);
}
refreshLED();
delay(100);
idx++;
idx %= 8;
}
void ledOut(int n) {
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, MSBFIRST, (n>>8));
shiftOut(DATA, CLOCK, MSBFIRST, (n));
digitalWrite(LATCH, HIGH);
delay(1);
digitalWrite(LATCH, LOW);
}
void initLED() {
ledOut(0x0B07);
ledOut(0x0A0C);
ledOut(0x0900);
ledOut(0x0C01);
}
void clearLED() {
for (int i=0;i<8;i++) {
matrix[i] = 0x00;
}
refreshLED();
}
void refreshLED() {
int n1, n2, n3;
for (int i=0;i<8;i++) {
n1 = i+1;
n2 = matrix[i];
n3 = (n1<<8)+n2;
ledOut(n3);
}
}
void updateLED(int i, int j, boolean b) {
int t = 1;
int n = 0;
int m = 0;
if (j==0) {
m = 7;
}
else {
m = j-1;
}
n = t<<m;
if (b) {
matrix[i] = n | matrix[i];
}
else {
n = ~n;
matrix[i] = n & matrix[i];
}
}
Üzgünüm, sizin için biraz geç olursa, MAX7219'u LED matrisleri ve 7 segmentli LED Ekranlarla kullanma hakkında bir yazı yazdım .