논리회로실험부호기와복호기 2005. 5. 3. 부호기와복호기란? 이론실험내용
개요 Encoder & Decoder 서로다른부호간의변환에사용되는것으로디지털신호를압축하거나전송시깨지지않도록바꾸는등여러가지목적에의해부호화라는장치와부호화되어전송되어온신호를다시원래의디지털신호로복호하는장치들을말한다. CODEC(enCOder DECoder) 이라고도한다. 기타 10진 to 2진 (BCD) 부호기 BCD-7 Segment 복호기 2 to 8 복호기, 동영상 & 이미지 & 음악관련 Mpeg2, WMA, MP3, OGG, Divx, MPEG4 Encoder & Decoder 통신관련 Manchester 인코딩 & 디코딩 Morsecode 인코딩 & 디코딩
Manchester Code Manchester Code 통신선로를통하여신호를전송시에, 111 이나 0000과같이같은신호를연이어서주게되면, 신호전송시의지연이나모호함으로인하여, 신호의동기가깨어질수있다. 이를방지하고자, 1은 10으로 0은 01로바꾸어서보낸다. 이를통하여비트경계의모호함이보완될수있는데, 맨체스터코드를 Bitphase Code라고도한다. IC 형태로구성된인코더 & 디코더칩도있으며, 때로는어셈블리나 C언어프로그램으로작성하여마이크로프로세서에내장하기도한다. 11001111 1010010110101010 타단말로감. 4800 bps 9600 bps 주로무선통신
struct BitField{ int bit0:1; int bit1:1; int bit2:1; int bit3:1; int bit4:1; int bit5:1; int bit6:1; int bit7:1; }; Manchester Encoder by C void SendManchesterCharacter(char c) { union BitSend send[2]; if(c&0x80){ send[0].sendbit.bit7 = 0; send[0].sendbit.bit6 = 1; }else{ send[0].sendbit.bit7 = 1; send[0].sendbit.bit6 = 0; } if(c&0x40){ send[0].sendbit.bit5 = 0; send[0].sendbit.bit4 = 1; }else{ send[0].sendbit.bit5 = 1; send[0].sendbit.bit4 = 0; } if(c&0x20){ send[0].sendbit.bit3 = 0; send[0].sendbit.bit2 = 1; } else{ send[0].sendbit.bit3 = 1; send[0].sendbit.bit2 = 0; } if(c&0x10){ send[0].sendbit.bit1 = 0; send[0].sendbit.bit0 = 1; }else{ send[0].sendbit.bit1 = 1; send[0].sendbit.bit0 = 0; } if(c&0x08){ send[1].sendbit.bit7 = 0; send[1].sendbit.bit6 = 1; }else{ send[1].sendbit.bit7 = 1; send[1].sendbit.bit6 = 0; } if(c&0x04){ send[1].sendbit.bit5 = 0; send[1].sendbit.bit4 = 1; }else{ send[1].sendbit.bit5 = 1; send[1].sendbit.bit4 = 0; } if(c&0x02){ send[1].sendbit.bit3 = 0; send[1].sendbit.bit2 = 1; }
Manchester Encoder by C else{ send[1].sendbit.bit3 = 1; send[1].sendbit.bit2 = 0; } if(c&0x01){ send[1].sendbit.bit1 = 0; send[1].sendbit.bit0 = 1; }else{ send[1].sendbit.bit1 = 1; send[1].sendbit.bit0 = 0; } } Uart_Printf("%c",send[0].SendChar); Uart_Printf("%c",send[1].SendChar);
Manchester Decoder by C void ReceiveManchesterCharacter(void) { unsigned char send[3], temp; int i, error=0; send[0] = buffer[curptr++]; send[1] = buffer[curptr++]; temp=send[1]; for(i=0;i<4;i++){ send[2]=send[2]<<1; if((temp&0x40) &&!(temp&0x80)){ send[2]=send[2] 1; }else if(!(temp&0x40) && (temp&0x80)){ }else{ error=1; } temp=temp<<2; } temp=send[0]; for(i=0;i<4;i++){ send[2]=send[2]<<1; if((temp&0x40) &&!(temp&0x80)){ send[2]=send[2] 1; (temp&0x80)){ }else if(!(temp&0x40) && }else{ error=1; } temp=temp<<2; } } SendCharacter(send[2]);
Manchester Encoder by ASM ;------------------------------------------------------- ; MANCHECTER CODE 1 BYTE TRANSMIT ;------------------------------------------------------- MTXBYTE: MOV R6,#08 ;BIT COUNT #08 MOV A,TXBF ;TX BUFF LOAD RRC A MOV TXBF,A MTXB1: MOV TXDM,C ; Manchester coding... MOV D_reg,#43 CALL _delay CPL TXDM ; Manchester coding... DJNZ R6,MTXB2 JMP MTXB3 MTXB2: MOV D_reg,#40 CALL _delay MOV A,TXBF ;TX BUFF LOAD RRC A MOV TXBF,A JMP MTXB1 MTXB3: MOV D_reg,#35 CALL _delay RET
Manchester Decoder by ASM ;------------------------------------------------------- MRXB5: SETB P3.4 ; MANCHECTER CODE 1 BYTE RECEIVER CALL EDGR ;------------------------------------------------------- CLR P3.4 MRXBYTE: JNB RXER,MRXB6 CLR RXER ;RX ERROR FLAG RET MOV R6,#00 ;256MC START BIT DELAY MOV RXBF,#00 MRXB1: JNB RXDM,MRXB2 ;START BIT CHECK DJNZ R6,MRXB1 ;2MC SETB RXER RET MRXB2: MOV D_reg,#22 ;delay until front of edge CALL _delay SETB P3.3 CALL EDGR ;EDGE DETECTOR CLR P3.3 JNB RXER,MRXB3 JNB RXDM,$ ;for seek NEXT start bit RET MRXB3: JNC MRXB4 ;START CODE SETB RXER RET MRXB4: MOV R6,#8 ;8 MOV D_reg,#MCLK+10 ;delay until front of edge CALL _delay MRXB6: MOV A,RXBF ;RX BUFF RRC A MOV RXBF,A DJNZ R6,MRXB7 MOV D_reg,#MCLK+9 ;delay until front of edge CALL _delay CALL EDGR JNC MRXE SETB RXER MRXE: RET MRXB7: MOV D_reg,#MCLK+9 ;delay until front of edge CALL _delay JMP MRXB5 ;------------------------------------------------------- EDGR: ; SETB P1.4 ;test CLR RXER ;46MC EDGE CHECK MOV R7,#13 ;9 JNB RXDM,EDGRH ;EDGE LOW -->> HIGH 검출시작
Manchester Decoder by ASM ;-------------------------------; EDGRL: EDGRL1: JNB RXDM,EDGRL3 ;EDGE HIGH -->> LOW 검출시작 DJNZ R7,EDGRL1 SETB RXER ;EDGE DETECT 실패 RET EDGRL2: EDGRL3: DJNZ R7,EDGRL2 SETB C ;EDGE 검출성공 ; SETB P1.4 ;test RET ;-------------------------------; EDGRH: EDGRH1: JB RXDM,EDGRH3 ;EDGE LOW -->> HIGH 검출시작 DJNZ R7,EDGRH1 SETB RXER ;EDGE DETECT 실패 RET EDGRH2: EDGRH3: DJNZ R7,EDGRH2 CLR C ;EDGE 검출성공 ; CLR P1.4 RET
부호기설계방법 설계절차 원하는부호기의진리표작성 출력논리식을구함 카르노맵또는계산을통한수식간략화 회로도작성
2 진 10 진변환 부호기설계방법 디지털회로들에서주로사용되는것은 2진수이고, 사람들은 10진수를사용하므로, 2진수 10진수로바꾸는것이중요함. 실제로하드웨어회로들또는소프트웨어프로그램으로대부분의모든디지털시스템에서이러한변환을사용한다. 3 10 진 2 진변환기 5 2+3 0011 2 진산술계산회로 0101 2 진 10 진변환기
Encoder 10진 2진변환기 (Encoder) Ex) N = d d d d d d d 10 p-1 N = 249 10 10 p-2 m m-1 1 0 i=0 N = 249 / 2 = 124 b = 1 10 0 i=1 N = 124 / 2 = 62 b = 0 10 0 i=2 N = 62 / 2 = 31 b = 0 10 0 i=3 N = 31 / 2 = 15 b = 1 10 0 i=4 N = 15 / 2 = 7 b = 1 10 0 i=5 N = 7 / 2 = 3 b = 1 10 0 i=6 N = 3 / 2 = 1 b = 1 10 0 i=7 N = 1 / 2 = 0 b = 1 10 0 N = b b b b b b b b = 11111001 2 7 6 5 4 3 2 1 0 2
10 개선 4개선 Encoder 10개선 4개선우선순위변환기진리표 SN74147 SN74147
Encoder
2진 10 진 Decoder 2진 (BCD) 10진변환기 (Decoder) n-1 N= b x 2 i i i=0 Ex) 111012 = 1 x 2 + 1 x 2 + 1 x 2 + 0 x 2 + 1 x 2 = 16 + 8 + 4 + 0 + 1 = 29 4 3 2 1 0
Decoder 2진 10진디코더진리표 SN74145 SN74145
Decoder
2진 7 세그먼트 Decoder 2진 (BCD) 7 세그먼트복호기
7447 진리표 Decoder
Seven Segment 7 Segment K : Common Cathode
7 Segment 세븐세그먼트의사용실험 7447 (a) Up/Down Converter (b)
실험결과보고사항및차기과제 실험결과보고사항 74147 에전원을인가하고, D1~D9 까지차례로하나만 0 을입력하고, 나머지는 1 을입력하여 DCBA 출력값을적으시오. 74147 에전원을인가하고, 2 진수를입력하여출력값을적으시오. 7447 에세븐세그먼트를연결하고, 입력을 2 진수로변화시킨후, 값을표 9-3 에완성하시오. 리포트 비동기직렬통신 (Serial Communication) 에관하여아는데로조사하시오. (10 점숙제 ) AVR 및 8051 MCU 에관하여, 아는데로다조사하시오.(30 점숙제 ) 워드로정리하시오. 내부구조, 핀기능, 메모리, 컴파일러, 타이머, 인터럽트, 직렬통신 A/D & D/A 컨버터에관하여아는데로조사하시오.( 워드로정리 )