BASIC4MCU | 질문게시판 | 답변 : 지식인 답변보고 왔습니다.
페이지 정보
작성자 master 작성일2019-01-04 08:23 조회7,971회 댓글4건본문
// MCU BASIC: https://www.basic4mcu.com// DateTime : 2019-01-04 오전 8:28:50// by Ok-Hyun Park//#include <avr/pgmspace.h>#include <avr/interrupt.h>#include <avr/io.h>//#define U08 unsigned char#define U16 unsigned int//int A=2,B=3,C=4,D=5;int Data_Red=6,Data_Green=7;int Clk=8,LE=9,OE=10;//U16 string[][16]={0x00,0x1800,0x18fe,0x1980,0x1980,0x1980,0x7980,0x1980,0x18c0,0x18c0,0x1860,0x1838,0x180e,0x1800,0x00,0x00,//가0x00,0x1800,0x1806,0x1806,0x1806,0x1806,0x7806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1bfc,0x1800,0x00,0x00,//나0x00,0x1800,0x19fc,0x1806,0x1806,0x1806,0x7806,0x1806,0x1806,0x1806,0x1806,0x1806,0x1bfc,0x1800,0x00,0x00,//다0x00,0x1800,0x18fe,0x1980,0x1980,0x1980,0x7980,0x18fc,0x1806,0x1806,0x1806,0x1806,0x1ffc,0x1800,0x00,0x00,//라0x00,0x1800,0x19fe,0x1986,0x1986,0x1986,0x7986,0x1986,0x1986,0x1986,0x1986,0x1986,0x19fe,0x1800,0x00,0x00,//마0x00,0x1800,0x1986,0x1986,0x1986,0x1986,0x79fe,0x1986,0x1986,0x1986,0x1986,0x1986,0x18fc,0x1800,0x00,0x00,//바0x00,0x1800,0x1860,0x1860,0x1860,0x1860,0x7860,0x18f0,0x18f0,0x1998,0x1998,0x1b0c,0x1b06,0x1800,0x00,0x00,//사0x00,0x1800,0x1878,0x18cc,0x1986,0x1986,0x7986,0x1986,0x1986,0x1986,0x1986,0x18cc,0x1878,0x1800,0x00,0x00,//아0x00,0x1800,0x1bfc,0x1860,0x1860,0x1860,0x7870,0x18f0,0x18f0,0x1998,0x1998,0x1b0c,0x1b06,0x1800,0x00,0x00,//자0x00,0x1800,0x19f8,0x1800,0x1bfc,0x1860,0x7860,0x1870,0x18f0,0x1998,0x1998,0x1b0c,0x1b06,0x1800,0x00,0x00,//차0x00,0x1800,0x18fc,0x1980,0x1980,0x1980,0x79fe,0x1980,0x18c0,0x18c0,0x1860,0x1838,0x180e,0x1800,0x00,0x00,//카0x00,0x1800,0x19fc,0x1806,0x1806,0x1806,0x7806,0x18fe,0x1806,0x1806,0x1806,0x1806,0x1ffc,0x1800,0x00,0x00,//타0x00,0x1800,0x19fe,0x1800,0x18cc,0x18cc,0x78cc,0x18cc,0x18cc,0x18cc,0x18cc,0x1878,0x1bfe,0x1800,0x00,0x00,//파0x00,0x1800,0x18f8,0x1800,0x1bfe,0x1800,0x78f8,0x198c,0x198c,0x198c,0x198c,0x198c,0x18f8,0x1800,0x00,0x00,//하};//U08 Shift_cnt=0; // 도트매트릭스에 표시 될 문자 카운팅!U08 Color_cnt=1; // 도트매트릭스에 표시 될 색상 카운팅!//ISR(TIMER2_OVF_vect){ // 1msstatic U16 cnt=0;//digitalWrite(1,!digitalRead(1));//if(++cnt>800){ cnt=0; // 800msShift_cnt+=2; if(Shift_cnt>=14)Shift_cnt=0;if(++Color_cnt>=3)Color_cnt=1;}//TCNT2=6;}//void setup(){pinMode(A,OUTPUT); pinMode(B,OUTPUT); pinMode(C,OUTPUT); pinMode(D,OUTPUT);pinMode(Data_Red,OUTPUT); pinMode(Data_Green,OUTPUT);pinMode(Clk,OUTPUT); pinMode(LE,OUTPUT); pinMode(OE,OUTPUT);pinMode(1,OUTPUT);TCCR2B=4; TIMSK2=1; TCNT2=6; SREG=0x80; // 16000000Hz/64/250=1000Hz=1ms}//void row_dynamic(U08 r){digitalWrite(A,r&1);digitalWrite(B,(r>>1)&1);digitalWrite(C,(r>>2)&1);digitalWrite(D,(r>>3)&1);}//void shift_Register(U08 out){for(U08 i=0;i<8;i++){ // 8비트 데이터를 1비트씩 시프트 레지스터에 입력if(out&(0x80>>i)){ digitalWrite(Data_Green,Color_cnt&1); digitalWrite(Data_Red,(Color_cnt>>1)&1); }else { digitalWrite(Data_Green,0); digitalWrite(Data_Red,0); }digitalWrite(Clk,1); digitalWrite(Clk,0);}}//void dot1_display_shift(U08 Shift_cnt){U16 buff1[16]={0,},buff2[16]={0,}; // Dot1 // Dot2register U16 i=0;//for(i=0; i<16; i++){ // 우에서 좌로 시프트buff1[i]=string[Shift_cnt ][i]; // 1st String Dot1buff2[i]=string[Shift_cnt+1][i]; // 2st String Dot2}//for(i=0; i<16; i++){digitalWrite(OE,1);shift_Register(buff1[i]&0xff); shift_Register(buff1[i]>>8); // Dot1shift_Register(buff2[i]&0xff); shift_Register(buff2[i]>>8); // Dot2row_dynamic(i);digitalWrite(LE,1); digitalWrite(LE,0); // 래치 출력digitalWrite(OE,0);delay(1);}}//void loop(){dot1_display_shift(Shift_cnt);}
댓글 4
조회수 7,971푸리울님의 댓글
푸리울 작성일
감사합니다. 밝기는 정상적으로 나오나 기존 코드보다 깜빡임이 심하네요.ㅎ
딜레이가 길어서 그런가 싶어서 1밀리초를 100마이크로초로 바꿔 주니 깜빡임이 거의 사라졌네요.
100마이크로보다 짧은 속도로 딜레이를 주면 어둡게 나오는데,
전압이 모자라서 그런걸까요?
master님의 댓글
master
for(i=0; i<16; i++){
// 출력 갱신
delay(1);
}
1화면을 구현하는데 16ms 걸립니다.
초당 62번 정도를 출력하므로 깜박임이 안보여야 하는데 깜박임이 보인다면
인터럽트라든가 다른 부분에서 시간을 뺏어가든지
출력을 갱신하는 코드에서 시간이 많이 걸린다는 얘기입니다.
눈에 보이는 코드 중에는 특별히 문제될만한 것이 없습니다.
어쨋거나.. 딜레이를 500us 정도 주면 2배 빨리질테니 문제가 없습니다.
100us 이하로 줄 필요는 없을테고요
딜레이가 짧으면 OE=1 시간이 상대적으로 길어져서 어둬워집니다.
digitalWrite(OE,1);
digitalWrite(OE,0);
이 두개의 코드를 삭제하세요
셋업 함수의 pinMode(OE,OUTPUT);까지 지우면 안됩니다.
//
항상 /OE를 0으로 나두면 밝습니다.
/OE를 제어할 필요는 없을 것 같고요
푸리울님의 댓글
푸리울
재밌네요. 저도 좀 더 연구해보고 댓글남기겠습니다.
혹시 해당 전기적인 이해를 높이기 위해 추천해줄만한 입문서가 있을까요?
OE가 무슨역할인지, 딜레를 어떻게 맞춰야하는지 사실 잘 모르겠어요.
master님의 댓글
master
74HC595 데이터시트와
웹검색해서 설명글을 읽어보세요