'데이터시트'에 해당되는 글 1건

 마이크로비트로 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


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

반응형
블로그 이미지

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

레고가 좋고~ PBL 매력에 빠졌으며~ 취미로 개발하는 두리둥실

,