728x90
반응형

 마이크로비트로 8X8 도트매트릭스를 연결하여 간단하게 제어 하는게 목표다. 정확하게 말하자면 64개의 도트를 켰다 껐다 하는것이다. 이걸 하는 최종 목표는  HT16K33 IC를 이용하여 문자를 도트맥트릭스로 보여주는 것이다.


 언제나 그랬듯이 동영상을 보자

<마이크로비트로 제어하는 8X8 도트매트릭스 동영상>


 8X8 도트매트릭스 핀 사진과 DATASHEET는 아래와 같다.

<8X8 도트매트릭스 실제 사진>


<8X8 도트매트릭스 데이터시트 사진>

처음 연결할 때 혼동이 조금 있었다. 핀의 위치를 정확하게 기억하자.


---------------------------------------->

13 14 15 16 17 18 19 20 21 22 23 24

12 11 10 09 08 07 06 05 04 03 02 01

<----------------------------------------


핀의 위치를 해석해 보면

1      -> 2        -> 3     -> ...... 

ROW -> GREEN -> RED -> ......


마이크로비트는 연결할 수 있는 핀의 개수가 제한되어 있어 24개 전부 연결 할 수 없다. 그래서 ROW PIN 8개와 COL PIN 8개(그린)만 사용한다. 지금은 단색으로만 제어 하고, 나중에 HT16K33 IC를 이용하여 24개 제어하여 3가지 색을 제어할 것이다.




이제 마이크로비트에 8X8 도트매트릭스를 연결해 보자

<마이크로비트와 8X8 도트매트릭스 연결 사진>


<fritzing으로 표현한 연결 사진>

 사진이 보이는 것 처럼 마이크로비트, 8X8 도트매트릭스, 브레드보드, 브레이크아웃 보드 아탑터, 점퍼선이용하여 연결해 준다.


 중요한 사실! 처음에 마이크로비트 0, 1, 2핀을 빼고 3부터 사용하여 20번까지 이용하여 제어를 시도 하였으나 col1에 해당하는 부분에 불이 안들어 오고 두 줄씩 켜지는 문제가 발생 했다. 


마이크로비트    8X8 도트매트릭스

P19 SCL  -----> 22 

P20 SDA -----> 23


 도트매특릭스 22, 23 핀은 1행과 1열에 관련된 핀으로 마이크로비트 P19, P20에 해당되고, 이 핀들은 I2C 통신에 관련한 핀들이다. 그래서 나중에 


마이크로비트    8X8 도트매트릭스

P0         -----> 23 

P1         -----> 22


변경하여 연결하였다.


 8X8 도트매트릭스를 제어를 위한 연결은 다 됐다. 블록 코딩을 해보자.

<블록코딩 #1 사진>


<블록코딩 #2 사진>

microbit-8X8도트매트릭스 (2).hex

 간단한 예제순차적으로 64개의 도트ON/OFF 하는 것이다. 그러나 기존 블록으로는 원하는대로 도트매트릭스를 제어 할 수 없다. 그래서 블록이 아닌 필요한 부분만 javascript로 직접 코딩하여 작업 했다. 회색으로 나온 블록들이 그런것들이다. 걱정할 필요 없다. 그냥 몇개만 더 써주면 되는것이니까!!!!!! 


 잠깐! 블록을 보고 의문이 들 것이다. DigitalPin.P1...... 순서대로 쓰면 되지 왜 번호가 뒤죽박죽일까?? 이유는 간단하다. P1, P2 순서대로 쓸려니 처음 마이크로비트와 도트매트릭스를 연결할 때 이것저것 생각해가면서 연결해야 하고, 잘못 연결하면 찾기도 불편하다. 그래서 핀은 순서대로 연결하고 프로그램상에서 마춰주기로 했다. 훨씬 편하고, 문제가 생겼을 때 금방 찾아서 고칠 수가 있다


 1행 1열에 있는 도트를 ON 할려면 

R1의 값은 1

C1의 값은 0 으로 설정하면 된다. 반대로 하면 OFF가 된다.




1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
let cols: number[]
let rows: number[]
rows = [DigitalPin.P1, 
        DigitalPin.P3, 
        DigitalPin.P15, 
        DigitalPin.P5, 
        DigitalPin.P13, 
        DigitalPin.P7, 
        DigitalPin.P11, 
        DigitalPin.P9]
cols = [DigitalPin.P0, 
        DigitalPin.P4, 
        DigitalPin.P16, 
        DigitalPin.P6, 
        DigitalPin.P14, 
        DigitalPin.P8, 
        DigitalPin.P12, 
        DigitalPin.P10]
led.enable(false)
basic.forever(() => {
    for (let indexRow = 0; indexRow <= 7; indexRow++) {
        pins.digitalWritePin(rows[indexRow], 1)
        for (let indexCol = 0; indexCol <= 7; indexCol++) {
            pins.digitalWritePin(cols[indexCol], 0)
            basic.pause(500)
            pins.digitalWritePin(cols[indexCol], 1)
            basic.pause(500)
        }
        pins.digitalWritePin(rows[indexRow], 0)
    }
})
 
cs

javascript는 참고!


그럼 하트를 표현 할려면 어떻게 해야 할까?? FND나 도트매트릭스에 항상 따라다니는 것이 있다. 스태틱 제어다이나믹 제어다. 아래의 동영상 마지막 부분에 보면 밝지는 않지만 다 켜진것처럼 보였을 것이다. 빠르게 ON/OFF 하여 항상 켜진 것처럼 보이는 잔상 효과를 이용한게 다이나믹 제어다. 

<전류가 부족하여...... 동영상>


몇개의 핀으로 도트매트릭스를 제어할 수 있는  HT16K33 IC를 알리에서  주문해 놨다. 

https://www.aliexpress.com/item/5pcs-lot-CJMCU-HT16K33-LED-Dot-Matrix-Drive-Control-Module-Digital-Tube-Driver/32688435492.html?spm=a2g0s.9042311.0.0.HHKFFa


기다리면서 관련 라이브러리와 부족한 전류를 해결 할 수 있는 방법을 찾아봐야 겠다.

728x90
반응형
블로그 이미지

두리뭉실 두리뭉실:해피파인더그룹

컴퓨터 코치 두리뭉실

댓글을 달아 주세요