문제

방금 하나 샀어요 레인보우두이노 개별 LED의 로드를 제어합니다(RGB 매트릭스 아님).지금까지의 모든 문서는 RGB 배열 제어를 목표로 하고 있습니다. ~ 아니다 내가 무엇을 쫓고 있는지.

Rainbowduino에 익숙하지 않다면 아두이노 120mA의 정전류 채널 24개, 각각 500mA의 슈퍼 소스 드라이버 채널 8개, 5V - 12V DC의 넓은 출력 전압 적응 기능을 갖춘 클론입니다.LED 구동에 적합합니다.제품 웹페이지는 다음과 같습니다. http://www.seeedstudio.com/blog/?page_id=187

16개의 LED를 연결했고 각 LED를 개별적으로 켜고 끌 수 있기를 원합니다. digitalWrite().실제로 작동하지 않는 일부 데모 코드를 보드에 업로드했습니다.저는 8개의 드라이버 소스 채널을 다음과 같이 쉽게 제어할 수 있다는 것을 알아냈습니다. digitalWrite() 핀 3-11에.그러나 다른 24개 싱크 채널을 제어하는 ​​것은 더 어렵습니다.분명히 그들은 3개의 시프트 레지스터(각각 하나씩)에 의해 제어되는데, 이는 오직 ShiftOut으로만 접근할 수 있습니다.나는 이것이 어떻게 작동하는지 전혀 모른다.누군가 나를 올바른 방향으로 안내해 줄 수 있습니까?

LED의 절반은 파란색 1-8에 연결되고 나머지 절반은 녹색 1-8에 연결됩니다.양극 다리는 HIGH로 설정된 VCC1-2에 연결됩니다.나는 회로가 올바르게 연결되어 있다고 확신합니다. 문제가 있는 것은 프로그래밍입니다.

Rainbowduino와 함께 제공되는 샘플 코드를 살펴봤지만 이해가 되지 않습니다.이 문제를 어떻게 해결할 수 있나요?

도움이 되었습니까?

해결책

입력/출력을 다중화(또는 관점에 따라 역다중화)하기 위해 시프트 레지스터를 사용하는 것은 디지털 전자 장치에서 매우 일반적입니다.

기본적으로 설계에 다른 칩(시프트 레지스터)을 포함해야 하기 때문에 컨트롤러의 저장 핀을 교환합니다.

이 경우 레지스터는 직렬-병렬 변환기로 작동합니다.여기에는 CPU의 비트가 공급되는 직렬 입력 라인이 있습니다.또한 CPU에서 직렬로 로드되는 8비트 메모리에 연결된 8개의 병렬 출력이 있습니다.이를 사용하면 단일 핀(일반적으로 클로킹용 핀 1개 포함)에서 8비트 데이터를 "전환"할 수 있으며, 이 데이터는 시프트 레지스터에 저장되고 8개의 LED를 병렬로 구동할 수 있습니다.

이 특별한 경우에는 시프트 레지스터(여기서는 MBI5168 정전류 싱크 드라이버에 시프트 레지스터가 포함되어 있음)가 연결된 AVR 포트 핀을 파악해야 합니다.그들은 한 쌍의 출력에 연결되어야 합니다. 하나는 데이터용이고 다른 하나는 클럭용입니다.해당 핀을 알고 나면 다음을 사용하여 직접 핀을 구동할 수 있어야 합니다. ShiftOut 명령.

조금 더 파보면, 이 샘플 "스케치" "Rainbow.h"라는 파일에 다음 정의가 포함되어 있습니다.

//MBI5168
#define SH_DIR_OE    DDRC
#define SH_DIR_SDI   DDRC
#define SH_DIR_CLK   DDRC
#define SH_DIR_LE    DDRC

#define SH_BIT_OE    0x08
#define SH_BIT_SDI   0x01
#define SH_BIT_CLK   0x02
#define SH_BIT_LE    0x04

#define SH_PORT_OE   PORTC
#define SH_PORT_SDI  PORTC
#define SH_PORT_CLK  PORTC
#define SH_PORT_LE   PORTC

이것은 물론 완전한 디지털 "전설"입니다(나는 장치를 소유하지 않고 어떤 종류의 *duino에서도 프로그래밍한 적이 없습니다). 그러나 나는 이것이 당신이 찾고 있는 입자를 뿜어내는 총알 전달 시스템이라고 말하고 싶습니다. .

나는 이것을 다음과 같이 해석한다.

  • PORTC는 시프트 레지스터에 연결된 핀이고 모든 제어 핀은 PORTC에 있습니다.
  • 위에서 언급한 낙관적 핀 2개가 아닌 4개의 핀이 전용입니다.
  • 시계는 PORTC:2 핀이고 데이터는 PORTC:1입니다.

다른 팁

각각의 단일 LED를 제어하는 ​​것은 시간이 많이 걸리므로 행으로 생각하는 것이 더 낫습니다. 반면 각 LED 색상은 비트 단위로 표시되므로 8비트 x 3가지 색상(빨간색, 녹색, 파란색)입니다.나는 각 행이나 프레임을 쉽게 설정할 수 있는 작은 Rainbowduino 라이브러리를 작성했습니다.

이에 대한 내 블로그 게시물을 읽어보세요.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top