मेरे पास है:
- 2 8x8 एलईडी मैट्रिक्स , और
- एक MAX7219 चिप।
प्रश्न: मुझे आश्चर्य है कि मैं कैसे Arduino Duemilanove से कनेक्ट कर सकता हूं ?
मैं गुगली कर रहा हूं, लेकिन मुझे यह पता नहीं चला कि कैसे।
मेरे पास है:
प्रश्न: मुझे आश्चर्य है कि मैं कैसे Arduino Duemilanove से कनेक्ट कर सकता हूं ?
मैं गुगली कर रहा हूं, लेकिन मुझे यह पता नहीं चला कि कैसे।
जवाबों:
ब्रायन चुंग का इंटरनेट आर्काइव पर अभी भी एक ट्यूटोरियल उपलब्ध था कि कैसे एक एलईडी मैट्रिक्स को एक Arduino से कनेक्ट करने के लिए MAX7219 का उपयोग किया जाता है:
यहां एक 8 × 8 एलईडी मैट्रिक्स के साथ एक प्रयोग किया गया है, जिसे एक Arduino माइक्रो-कंट्रोलर बोर्ड के माध्यम से नियंत्रित MAX7219 IC द्वारा संचालित किया गया है। एलईडी मैट्रिक्स और आईसी को जोड़ने वाले सभी तारों को साफ करने के लिए डिनोटेक से टैन द्वारा एक कस्टम पीसीबी बनाया गया है। यह एक अलग 12V बिजली की आपूर्ति के साथ आता है, ताकि Arduino बोर्ड से सब कुछ सूखा न जाए।
MAX7219 ड्राइवर IC को नियंत्रित करने के लिए केवल 4 तार आवश्यक हैं। वे सभी
डेटा क्लॉक लैच / लोड ग्राउंड
डेटा और क्लॉक पिन को Arduino में ShiftOut () कमांड के लिए मेल खाना चाहिए। ShiftOut कमांड के बाद कुंडी का पिन एक LOW to HIGH पल्स देगा। मैंने जेवलिन स्टैम्प के लिए मूल कार्यक्रम लिखा है। चूंकि Arduino केवल 8 बिट डेटा को शिफ्ट कर सकता है, मुझे ऊपरी और निचले बाइट्स को MAX7219 पर शिफ्ट करने के लिए 2 अलग-अलग कमांड का उपयोग करना होगा, जिसके लिए प्रत्येक कमांड के लिए 2 बाइट्स नियंत्रण की आवश्यकता होती है।
8 × 8 एलईडी मैट्रिक्स की डेटा संरचना के लिए, मैं एक बाइट सरणी का उपयोग करता हूं - लंबाई का मैट्रिक्स 8. मैट्रिक्स में प्रत्येक पंक्ति वाई आयाम से मेल खाती है। एक पंक्ति में प्रत्येक बिट एक्स आयाम से मेल खाती है। अंक 1 चालू है; 0 बंद है। एक्स दिशा उलट है और एक 1 बिट शिफ्ट भी है। अपडेट किया गया () फ़ंक्शन इसके लिए पूरा करता है।
पहला प्रोग्राम सिंगल लाइन मोशन का एनीमेशन है।
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];
}
}
क्षमा करें यदि यह आपके लिए थोड़ा देर से है, लेकिन मैंने अभी-अभी एक पोस्ट लिखा है जिसमें MAX7219 का उपयोग एलईडी मैट्रीस और 7-सेगमेंट डिस्प्ले के साथ किया गया है।