MAX 7219를 사용하여 LED 매트릭스를 Arduino에 연결하는 방법은 무엇입니까?


9

나는 가지고있다:

Q : Arduino Duemilanove에 어떻게 연결할 수 있습니까?

인터넷 검색을 해왔지만 방법을 찾지 못했습니다.


@Bruno-링크를 제거 했으므로 링크가 죽었다고 생각했습니다. 그러나 괜찮습니다. 왜 삭제했는지 설명하지 않았으므로 롤백했습니다. 링크를 삭제해야 할 이유가있는 경우 주석 필드에 그대로 두십시오.
stevenvh

@stevenvh 죄송합니다. 이전에 테스트했지만 작동하지 않았습니다. 인터넷 연결에 문제가 있었지만 지금 작동하고 있습니다. 내 편집 내용을 잘 롤백했습니다.
Bruno Ferreira

답변:


11

Bryan Chung은 MAX7219를 사용하여 LED 매트릭스를 Arduino에 연결하는 방법 에 대한 자습서를 여전히 인터넷 아카이브 에서 사용할 수있었습니다 .

다음은 Arduino 마이크로 컨트롤러 보드를 통해 제어되는 MAX7219 IC로 구동되는 8x8 LED 매트릭스를 사용한 실험입니다. Tan은 DinoTech의 맞춤형 PCB를 만들어 LED 매트릭스와 IC를 연결하는 모든 와이어를 정리했습니다. Arduino 보드에서 모든 것을 배출하지 않기 위해 별도의 12V 전원 공급 장치가 제공됩니다.

MAX7219 드라이버 IC를 제어하려면 4 개의 와이어 만 필요합니다. 그들은

데이터 클록 래치 /로드 접지

데이터 및 클럭 핀은 Arduino의 shiftOut () 명령과 일치해야합니다. shiftOut 명령 후 래치 핀은 LOW에서 HIGH로 펄스를줍니다. 나는 Javelin Stamp의 원래 프로그램을 작성했습니다. Arduino는 8 비트의 데이터 만 이동할 수 있기 때문에 상위 및 하위 바이트를 MAX7219로 전환하려면 2 개의 개별 명령을 사용해야합니다. 각 명령마다 2 바이트 제어가 필요합니다.

8 × 8 LED 매트릭스의 데이터 구조에는 바이트 배열 – 길이 8의 매트릭스를 사용합니다. 매트릭스의 각 행은 Y 차원에 해당합니다. 행의 각 비트는 X 치수에 해당합니다. 숫자 1이 켜져 있습니다. 0이 꺼져 있습니다. X 방향이 반전되고 1 비트 시프트도 있습니다. updateLED () 함수가이를 충족시킵니다.

첫 번째 프로그램은 단일 라인 모션의 애니메이션입니다.

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];
  }
}

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.