설계 결과 보고서-디지털 시계구현-Contents-설계목표&기준설정-배경이론-소스-결과-목표 : 리눅스의 디바이스들을 이용해 디지털 시계를 구현한다.-기준 : 디바이스(LED, 7SEG, TEXTLCD)이용①LED : 1초 올라갈 때 마다 우측 LED부터 하나씩 불이 들어오며 모든 LED가 불이 들어오면 불이 꺼졌다가 다시 순차적으로 불이 들어오는 방식으로 구현한다.(8개의 LED가 순차적으로 불이 켜진 뒤 2초간 전체소등.)②7SEG : 가장 왼쪽 두 자리를 시로 두고 24까지. (23->00)다음 두 자리는 분을 나타내며 59까지. (59->00)마지막 오른쪽 두 자리를 초를 나타내며 59까지 표현하도록 한다.③ TEXTLCD : 표시창에 아래와 같이 학번을 표현한다.-Linux : os(운영체제)-Fedora : 리눅스 커널에 기반한 운영체제와 레드햇의 후원고 개발 공동체의 지원아래 개발된 일반적인 목적을 가진 RPM기반의 소프트웨어가 결합된 운영체제. (VMware Workstation)-7 Segmaent : 두개의 제어번지 존재.1. 자리 선택 : 0x14800000 (0일 때 활성화)2. 세그먼트 선택 : 0x14801000-Text LCD :-LED :-각 bit의 값이 1이 되면 해당LED가 ON이 된다-base address : 0x1480_5000#include #include #include #include #include #include #define SEGMENT1 0x14800000#define SEGMENT2 0x14801000#define ADDRESSOFLED 0x14805000#define ADDRESSOFTEXTLCD 0x14809000void initialize_textlcd();void setcommand(unsigned short command);void writebyte(char ch);int function_set(int rows, int nfonts);int display_control(int display_enable, int cursor_enable, int nblink);int cusrsor_shit(int set_screen, int set_rightshit);int entry_mode_set(int increase, int nshift);int return_home();int clear_display();int set_ddram_address(int pos);unsigned char define_num();unsigned short *pTextlcd;int main(){unsigned char *addr_led;unsigned char *addr_seg1, *addr_seg2;char **argv;char data[6];char digit[6]={0x20, 0x10, 0x08, 0x04, 0x02, 0x01};char buf1[15]=" 32072187 "; // lcd창 윗쪽에" 32072187 " 표시char buf2[15]=" 32081750 "; // lcd창 아랫쪽에" 32081750 " 표시int fd,i,j,k,l,e;int len1=15,len2=15;int argc;int count=0, temp1,temp2,second=0,second1,second2,minutes=0,minute1,minute2,hour=0,hour1,hour2;if(argc == 2) {len1 = strlen(argv[1]);len2 = 0;strcpy(buf1,argv[1]);}else if(argc >= 3) {len1 = strlen(argv[1]);len2 = strlen(argv[2]);strcpy(buf1,argv[1]);strcpy(buf2,argv[2]);}if((fd=open("/dev/mem",O_RDWR|O_SYNC)) < 0){perror("mem open failn");exit(1);}pTextlcd= (unsigned short *) mmap(NULL,4096,PROT_WRITE, MAP_SHARED, fd, ADDRESSOFTEXTLCD);addr_seg1= (unsigned char *)mmap(NULL, 4096, PROT_WRITE, MAP_SHARED, fd,SEGMENT1);addr_seg2= (unsigned char *)mmap(NULL, 4096, PROT_WRITE, MAP_SHARED, fd,SEGMENT2);if(addr_seg1 < 0 || addr_seg2 < 0){close(fd);perror("mmap errorn");exit(1);}addr_led=(unsigned char *) mmap(NULL,4096,PROT_WRITE,MAP_SHARED,fd,ADDRESSOFLED);if (addr_led
a.창함수 설계FIR 필터는 전적으로 이산 시간 구현으로 제한된다. FIR 필터의 설계 기술은 이산 시간 시스템의 주파수 응답을 직접 근사화하는 것을 바탕으로 한다. FIR 시스템의 크기 응답을 근사화하기 위한 대부분의 기술은 선형 위상이라고 가정한다. 창함수 설계의 기본적 생각은 먼저 언제나 인과적이지 않은 무한 임펄스 응답을 갖는, 적당한 이상적 주파수 선택적 필터를 고른다. 그리고 나서, 선형 위상 인과적 FIR 필터를 얻기 위해, 임펄스 응답을 잘라낸다.(창을 만든다는 의미). 그러므로 창함수법의 핵심은 적당한 창함수와 적당한 이상적 필터를 고르는 것이다.b.FIR filter 와 IIR filter 의 차이점FIR 필터는 IIR 필터에 비해 구조가 간단하다. FIR 필터의 위상은 선형이고 IIR 필터의 위산은 비선형이므로 FIR 필터의 위상이 왜곡에 강건하다. 그러므로 항상 안전성이 보장된다. FIR 필터를 사용하여 원하는 필터를 각이지게 설계하려면 IIR필터로 설계할 경우보다 더 많은 계수들을 필요로 하게 된다. IIR 필터는 아날로그 필터의 구조와 비슷하므로 아날로그 필터로의 변환이 쉬운 반면 FIR 필터는 그러하지 못하다. 결론적으로 필터 설계의 요구 사항이 각진 필터라면 IIR 필터를 사용하고 위상이 있어서 왜곡을 원하지 않거나 계수들이 많지 않다면 FIR 필터로 설계하면 된다.c. Hanning 창함수코사인 그래프를 올린 창함수이다. 식은 다음과 같다.그 밖의 경우 w(n)의 값은 0을 갖는다.M : Filter length1.소스fs=2000;L1=8;L2=32;L3=52;fc=300;wn=(2*fc)/fs;b1=fir1(L1,wn,'high', hanning(L1+1));b2=fir1(L2,wn,'high', hanning(L2+1));b3=fir1(L3,wn,'high', hanning(L3+1));subplot(2,2,1);stem(b1);hold on;stem(b2,'r');hold on;stem(b3,'g');n=312;[h1,f]=freqz(b1,1,n,fs);[h2,f]=freqz(b2,1,n,fs);[h3,f]=freqz(b3,1,n,fs);subplot(2,1,2);plot(f,abs(h1));hold on;plot(f,abs(h2),'r');hold onplot(f,abs(h3),'g');figure(2);plot(f,10*log(abs(h1)));hold on;plot(f,10*log(abs(h2)),'g');hold on;plot(f,10*log(abs(h3)),'y');%샘플링 주파수를 2000으로 지정%L1=8,32,52 지정하여 임펄스의 갯수를 지정%fc = cut off frequency 지정%b1 을 fir1 즉 FIR필터 함수를 이용하여 구성[b1=fir1(L1,wn,'high',hanning(L1+1))]여기서 ‘high''low'입력시켜 로우패스 또는 하이 패스 필터를 만들 수 있다.% subplot(2,2,1) 은 2*2행렬중에 첫 번쨰 칸에 값이 출력%stem(b1) 은 b1값을 이산적으로 임펄스형태로 나타낸 것 이다.% hold on 은 그래프를 여러개 출력될 때 순서대로 볼수 있게끔 정지시켜놓는 함수 이다.%freqz함수는 b1의 주파수응답을 나타내는 함수이다.%plot 은 연속적으로 그래프를 보여주는 함수이다.% abs(h1) 은 절대값을 나타낸다.%‘r' 은 색깔을 나타낸다.%figure(2) 는 2번째 창 을 띄어 보여준다.band stop(Filter 주파수 응답 곡선)분석:high pass filter(Filter 주파수 응답 곡선)분석:Highpass 주파수 영역에 서 고주파 성분의 Rectangular함수이다. 그러므로 Filter의 Coefficient는 Sinc 함수의 형태를 갖게 된다.Sampling Point의 값을 갖게 하고 L1,L2,L3를 증가할수록 Coefficient에서 주파수 응답곡선이 부드럽게 그려지는 것을 확인할 수 있다. 이는 육안으로도 확인 가능하지만 Log scale 로 보면 그 차이가 매우 확연함을 확인할 수 있다. Filter Order를 일정하게 유지하고 Sampling Point를 변화시키면서 주파수 응답 그래프를 관찰하면 Sampling Point의 값이 증가할 수록 이상적인 필터에 가까운 형태로 변함을 확인하였다. Filter Order 값과 Samping Point 값을 같게 하고 주파수 응답의 형태를 관찰하면 Lowpass Filter 와 Highpass Filter는 정확히 fc=500Hz 과 cutoff 값 0.5를 기준으로 대칭인 형태를 갖음을 확인하였다.low pass filterFilter Coefficient (Filter 주파수 응답 곡선)분석: Filter Order 즉 L1,L2,L3 의 값에따라, Coefficient 는 임펄스 Response 의 갯수를 갖게 되므로 L1,L2,L3의 값이 증가할수록 임펄스열의 개수가 증가하게 된다. L1,L2,L3값이 증가할수록 필터의 주파수 응답에서 더 부드러운 곡선을 구현할 수 있었으며 좀더 이상적인 Lowpass Fiter 의 모습을 볼 수 있었다.위의 결과의 녹색 값이 L3=52 일때 출력인데 제일 큰 값이어서 최대한 Rectangular 함수 근접한 출력값을 볼수 있었다.