(본 글은 2012.01.22.에 daum의 블로그(http://blog.daum.net/microcontroller/13651129)에 적었던 것을 옮겨왔습니다.)
그동안 틈틈이 만들어 온 간이 전광판 새로운 펌웨어입니다.
하드웨어는 그대로 이지만 이전의 펌웨어와는 호환되지 않습니다.
이전의 R3버전까지는 PC에서 이미지를 편집하여 이미지를 AVR의 EEPROM에 기록하여 표시하였었습니다만, 이번 버전은 한글과 영문자 폰트를 내장하고 내장된 폰트만 출력할 수 있습니다. 즉 하트 모양과 같은 그림은 표시할 수 없습니다.
동작 중인 동영상 올려 봅니다.
메시지당 한글 20자, 영문으로는 40자까지 표시 가능하게 하였습니다.
ATmega32의 EEPROM에 메시지를 기록하는데, EEPROM의 크기가 1024바이트로 제한되어 있고, 메시지뿐만 아니라 관련된 여러가지의 정보를 기록해야 하며, 프로그램이 내부적으로 사용하는 메모리 등이 제한되어 있어서 메시지 길이를 한정할 수 밖에 없습니다.
각각의 메시지의 최대 길이는 40바이트(한글은 20자)까지로 한정합니다.
모든 메시지의 길이를 다 합한 값은 898자를 넘지 않아야 합니다.
이런 조건은 아래에서 언급하는 PC측 프로그램에서 점검하여 조건을 충족시키지 못하면 에러메시지를 보여주고 전광판에 기록하지 않습니다.
메시지의 길이가 전관판의 폭(40컬럼)을 넘을 때에는 자동으로 왼쪽으로 시프트 하도록 되어 있습니다.
간이 전광판에서 표시하는 메시지는 세가지입니다.
모든 메시지는 PC에서 지정할 수 있습니다.
첫째는 보드의 딥스위치 6개중에서 5번과 6번으로 선택하는 메시지입니다.
이 메시지는 편의상 기본 메시지라 부르겠습니다. 왜냐하면 전원을 투입하거나 AVR을 리셋시키면 기본적으로 표시되는 메시지이기 때문입니다.
이 스위치들의 설정 상태에 따라 INDEX 값을 결정하여 기본적으로 표시하는 메시지를 결정합니다.
메시지의 내용은 PC에서 지정할 수 있습니다.
스위치 5 | 스위치6 | INDEX |
ON | ON | 1 |
OFF | ON | 2 |
ON | OFF | 3 |
OFF | OFF | 4 |
기본적으로는 메시지는 다음과 같이 저장되어 있습니다.
스위치 5와 6을 이용하여 전원 투입 후에 가장 먼저 출력할 메시지를 결정합니다.
스위치 5와 6을 모두 on으로 놓으면 index 값이 1이 되고, 이 경우에는 index1의 메시지 "초보운전"이 최초로 출력됩니다.
다른 예를 들어서 스위치 5는 OFF, 6은 ON으로 놓으면 index 값이 2가 되고, 이 경우에는 index2의 메시지 "완전초보"가 최초로 출력됩니다.
최초로 출력하는 메시지의 반복횟수가 0으로 기록되어 있으면 그 메시지만을 반복하여 출력합니다.
만일 최초로 출력하는 메시지의 반복횟수가 0이 아니라면 반복횟수만큼 반복한 후에 다음 메시지를 출력합니다. 다음 메시지를 출력하기 시작한 다음부터는 반복횟수가 0인 메시지는 생략합니다.
스위치 5와 6을 모두 on으로 하고 반복횟수를 다음과 같이 지정하였다면
index 1의 반복횟수 4
index 2의 반복횟수 3
index 3의 반복횟수 2
index 4의 반복횟수 1
index1의 메시지("초보운전")을 4번 반복하여 출력한 후에, index2의 메시지("완전초보")를 3번 반복하여 출력하고, index3의 메시지("양보운전")를 2번 반복하여 출력하고, index4의 메시지("아기가타고있습니다")를 1번 출력한 다음에 다시 index1의 메시지("초보운전")을 4번 출력하면서 계속 반복합니다.
이 상태에서 index2의 반복횟수를 0으로 변경하면 index1 4회 출력 후, index2는 건너뛰고, index3 2회, index4 1회 출력하고 다시 index1 4회 순으로 반복합니다.
사용법이 다소 복잡한 것 같지만 몇 가지 메시지를 반복적으로 보여줄 필요가 있을 것 같아서 만들어 보았습니다. 각 메시지마다 반복횟수를 다르게 주어서 강조하고 싶은 메시지를 더 많이 보여 줄 수 있습니다.
반복횟수의 최대값은 계산해 보지 않았지만 한계는 분명히 있는데 실용상으로는 별 문제 없을 것입니다.
<<복습을 위한 설명>>
스위치 5를 OFF로, 스위치 6을 on으로하면 처음 시작시 index2의 메시지가 출력되는데, index2의 반복횟수를 0으로 기록하면 계속하여 index2의 메시지만 출력됩니다.
만일 스위치 5와 6을 다르게 설정하고 index2의 반복횟수를 0으로 하면 index2는 출력되지 않습니다. 즉, index1 4회, index3 2회, index4 1회 출력하고 다시 index1 4회로 갑니다.
두번째 메시지는 신호 메시지 입니다.
이 메시지는 전광판에 달려 있는 4핀 커넥터로 들어오는 신호에 따라 메시지를 출력하기 때문에 신호메시지라 부르기로 하였습니다.
이 커넥터에는 순서대로 흑색, 황색, 흑색, 적색 선이 연결됩니다.
각 선의 상태에 따라 다음과 같은 INDEX를 갖습니다.
흑색 | 황색 | 흑색 | 적색 | INDEX |
OFF | OFF | OFF | ON | 1 |
OFF | OFF | ON | OFF | 2 |
OFF | OFF | ON | ON | 3 |
OFF | ON | OFF | OFF | 4 |
OFF | ON | OFF | ON | 5 |
OFF | ON | ON | OFF | 6 |
OFF | ON | ON | ON | 7 |
ON | OFF | OFF | OFF | 8 |
ON | OFF | OFF | ON | 9 |
ON | OFF | ON | OFF | 10 |
ON | ON | ON | ON | 11 |
ON | ON | OFF | OFF | 12 |
ON | ON | OFF | ON | 13 |
ON | ON | ON | OFF | 14 |
ON | ON | ON | ON | 15 |
기본적으로 메시지는 다음과 같이 저장되어 있습니다.
자동차에서 사용하는 것을 기본으로 생각하여 위와 같이 기록하였습니다.
각각의 선에 적절한 저항을 통하여 적색선은 브레이크 등, 적색선 옆의 흑색은 좌회전 신호등, 황색선은 우회전 신호등, 황색선 옆의 흑색은 후진등에서 12V와 연결하면 됩니다.
반복횟수의 기능은 기본적으로 기본메시지의 경우와 같습니다. 다만 다른 점은 반복횟수가 지난 다음에는 기본메시지로 되돌아 간다는 점입니다.
신호 메시지는 기본적으로 신호가 들어오는 동안에만 계속 출력되는 것으로 가정하여 만들었으므로 기본적으로 반복횟수는 0으로 하였습니다.
또한, 신호 메시지 -> 기본 메시지 -> 신호 메시지 순으로 너무 번잡하게 바뀌는 것을 방지하기 위하여 신호 메시지 종료 후에는 약 2초간 출력을 중지하였다가 기본 메시지를 촐력합니다. 방향지시등이 깜박일 때를 상상해 보면...
물론 기본 메시지를 출력 중지하는 2초 간에도 신호 메시지나 리모콘 메시지는 정상적으로 출력합니다.
세번째 메시지는 리모콘으로 지정하는 메시지입니다.
리모콘으로는 최대 10개의 메시지를 출력할 수 있습니다.
반복횟수는 신호메시지의 반복횟수와 같은 기능을 합니다.
리모콘에서 해당하는 키를 누르면 그 메시지를 반복횟수만큼 출력한 다음에 기본 메시지로 되돌아갑니다.
이 간이 전광판과 같이 판매된 리모콘이 세종류입니다.
각 리모콘들의 키를 정리해 보았습니다.
<리모콘 1>
<리모콘 2>
<리모콘3>
리모콘 2의 경우에 http://www.manmullsang.com/bbs/board.php?bo_table=diy&wr_id=49에서 개조한 부분을 원상 복구시켜야 역상 기능을 사용할 수 있습니다. 개조한 상태로 그대로 두면 INDEX4로 동작합니다. 리모컨이 같은 코드를 쓰도록 개조하였기 때문에 소프트웨어로 처리할 방법이 없습니다.
PC측 프로그램을 동작시키기 위해서는 몇 가지 dll이 필요할 것입니다. 어떤 dll일지는 정확히 모르겠는데 필요하다고 나오는 dll 파일들을 인터넷에서 구하여 windows\system32 폴더에 복사하면 됩니다.
특히 MSFLEXGRID.OCX가 꼭 필요한데, 이 파일은 위의 폴더에 복사한 후에 regsvr32로 등록해 주어야 합니다. windows 7의 경우에는 명령 프롬프트를 관리자 계정으로 연 후에
c:
cd c:\windows\system32
위 폴더에 msflexgrid.ocx 복사
regsvr32 msflexgrid.ocx
하여 등록해야 합니다.
전광판과 PC를 USB 케이블로 연결한 후에 장치관리자에 나타나는 Silicon Labs CP210X USB to UART Bridge의 COM번호를 확인하고, PC측 프로그램(DotMatrix14R4VC.exe)의 통신하기에서 통신 포트를 지정하여 읽어오기와 기록하기를 합니다.
제 경우는 COM4로 잡혀 있습니다.
http://www.manmullsang.com/bbs/board.php?bo_table=file&wr_id=1458와 http://www.manmullsang.com/bbs/board.php?bo_table=file&wr_id=1460에서 한 개조 작업을 하지 않아도 hex파일과 EEPROM만 기록하면 정상 동작합니다.
당연히 개조된 기능은 사용할 수 없습지만 첨부한 hex 파일에는 부트로더 코드가 내장되어 있기 때문에, 휴즈 비트를 새로 프로그래밍하고 위의 개조를 하면 셀프 업데이트 가능하도록 할 수 있습니다.
새로 구매하시는 경우라면 가급적 휴즈비트를 셀프업데이트 가능하도록 설정해서 보내달라고 요청하십시오. 휴즈비트가 설정되어 있으면 저항 하나와 점퍼핀 두 개 납땜함으로써 셀프업데이트 가능해 집니다.
마지막으로 첨부한 파일에 대한 설명입니다.
1) DotMatrix14R4.zip에 DotMatrix14R4.hex는 플래시 프로그램 파일이고, DotMatrix14R4.eep는 EEPROM 파일입니다.
2) DotMatrix14R4VC.exe는 PC용 파일입니다.
3) 꼭 필요한 Msflexgrid.ocx입니다.
P.S) 허접하게 정리하는데에도 날 새우고 말았습니다. 6시간...
DotMatrix14R4.zip DotMatrix14R4VC.exe MSFlexGrid.ocx
'AVR > DotMatrix' 카테고리의 다른 글
VC096T-16으로 만드는 간이전광판 (0) | 2018.11.09 |
---|---|
도트매트릭스 VC096T-16 동작시키기 (0) | 2018.11.09 |
KLM-162CAN (광전자 도트매트릭스) 제어하기 (0) | 2018.11.09 |