Verilog HDL and Xilinx ISE 8.1Design 7-Segment Controller[Using Clock Division Module]Contents TOC o "1-2" h z u HYPERLINK l "_Toc140504336" 1. Introduction PAGEREF _Toc140504336 h 1 HYPERLINK l "_Toc140504337" 1) Summary PAGEREF _Toc140504337 h 1 HYPERLINK l "_Toc140504338" 2) Port Design PAGEREF _Toc140504338 h 1 HYPERLINK l "_Toc140504339" 2. Source Code Analysis PAGEREF _Toc140504339 h 2 HYPERLINK l "_Toc140504340" 3. Design process PAGEREF _Toc140504340 h 4 HYPERLINK l "_Toc140504341" 1) Source Code Paste & Synthesize PAGEREF _Toc140504341 h 4 HYPERLINK l "_Toc140504342" 2) Pin Assignment PAGEREF _Toc140504342 h 8 HYPERLINK l "_Toc140504343" 3) Program Download PAGEREF _Toc140504343 h 10 HYPERLINK l "_Toc140504344" 4) Test Picture PAGEREF _Toc140504344 h 121. Introduction1) SummaryHDL 언어를 이용하여 하드웨어를 설계한다는 것은 상당히 많은 이점을 갖고 있는데, 이중 하나는 모듈의 확장성이다. 미리 만들어두었던 모듈은 별도의 변환 작업 없이 다른 모듈에 붙여 이용할 수 있다.이번에는 ARM Study Group의 FPGA 보드에 부착되어 있는 7-Segments를 제어할 것인데, 일정한 시간을 기준으로이전 기술 문서에서 기초적인 클럭 분주 회로를 기술하였고, 모듈을 설계하였다.클럭은 0.5 초에 한번씩 System LED를 점멸하는 기능을 가지고 있었다.이번 Xilinx FPGA 기술 문서는 이전 기술 문서에 제작한 모듈(Name : FirstExam 소스 첨부) 0.5 초마다 7-Segments의 숫자를 증가 시키는 회로를 설계한다.이번 기술 문서부터는 프로젝트 환경 구축이나 PROM 파일 제작, 프로그램 컨피그레이션 등의 기본적인 절차는 어느 정도 생략하고 진행한다. 해당 내용은 “Xilinx PROM Configuration” 문서나 “Xilinx Clock Division” 문서를 참고하면 쉽게 이해할 수 있을 것이다.2) Port Design설계용 개발 툴은 Xilinx社의 ISE 8.1버전을 이용하며, 언어는 Verilog HDL을 이용한다.먼저 아래와 같이 기본적인 포트를 선언한다.input n_rst;// 리셋 버튼input clk;// 클럭 소스output SegA; // 7-Segments Aoutput SegB; // 7-Segments Boutput SegC; // 7-Segments Coutput SegD; // 7-Segments Doutput SegE; // 7-Segments Eoutput SegF; // 7-Segments Foutput SegG; // 7-Segments Goutput SegDP; // 7-Segments DP7-Segment를 제어하기 위해서는 위와 같은 입출력 포트를 필요로 한다.FirstExam에서 이용했던 n_rst 리셋 버튼과 clk 클럭 소스도 마찬가지로 이용된다.2. Source Code Analysis우선, 아래와 같은 소스를 이용하며, 여기서 눈 여겨 봐야할 것은 이전의 소스인 FirstExam 모듈을 가져온다는 점이다.문서의 폴더에는 아래의 FND_Example 모듈에 대한 소스파일(SegmentControll.v)과 이전에 제작했던 클럭 분주 모듈의 소스파일(FirstExam.v)이 첨부되어 있다.모듈에서 clk와 n_Reset은 입력 포트로, 나머지 7-Segment를 제어하는 포트는 회로도에 나와있는 그대로 이름을 지었다.그 외에, FirstExam 모듈에서 0.5초로 분주된 타이밍을 얻기 위한 wire 와 4비트 카운터용 레지스터. 그리고 7-Segment를 좀더 쉽게 제어하기 위한 8비트 레지스터 등을 등록하였다.module FND_Example(clk, n_Reset, SegA, SegB, SegC, SegD, SegE, SegF, SegG, SegDP);// 입력 포트input clk;input n_Reset;// Segment 제어용 출력 포트output SegA;output SegB;output SegC;output SegD;output SegE;output SegF;output SegG;output SegDP;wire second;reg [3:0] BCD;reg [7:0] SevenSeg;// 이전에 만들었던 클럭 분주 모듈인 FirstExam을 불러온다.FirstExam FirstExam(.n_rst(n_Reset), .clk(clk), .out_led(second));// 기준 클럭으로 clk 대신 FirstExam의 시스템 LED 제어용 포트를 받는// second 레지스터를 이용한다.always @ (posedge second or negedge n_Reset)beginif (!n_Reset)// 리셋 버튼이 클릭되면 7-Segment가 0으로 초기화된다.BCD
Verilog HDLExample of Clock DivisionUsing xilinxContents TOC o "1-2" h z u HYPERLINK l "_Toc140316893" 1. Introduction PAGEREF _Toc140316893 h 1 HYPERLINK l "_Toc140316894" 1) Summary PAGEREF _Toc140316894 h 1 HYPERLINK l "_Toc140316895" 2) Base Equation PAGEREF _Toc140316895 h 1 HYPERLINK l "_Toc140316896" 3) Port Design PAGEREF _Toc140316896 h 2 HYPERLINK l "_Toc140316897" 2. Design process PAGEREF _Toc140316897 h 2 HYPERLINK l "_Toc140316898" 1) Source Code & Synthesize PAGEREF _Toc140316898 h 2 HYPERLINK l "_Toc140316899" 2) Pin Assignment PAGEREF _Toc140316899 h 5 HYPERLINK l "_Toc140316900" 3) Implement Design & Make MCS File PAGEREF _Toc140316900 h 8 HYPERLINK l "_Toc140316901" 4) Program Configuration PAGEREF _Toc140316901 h 13 HYPERLINK l "_Toc140316902" 5) Testing Picture PAGEREF _Toc140316902 h 161. Introduction1) SummaryFPGA 뿐만 아니라, 마이크로컨트롤러, 프로세서 등을 이용하여 시간차가 정밀한 작업을 수행할 때 정확한 클럭의 분주를 필요로 하게된다.특히, FPGA로 제어와 같은 자동 작업을 수행하기 위해서 외부에서 입력 받는 클럭 소스는 작업을 진행하는데 가장 기본이 된다.이 문서는 Verilog HDL을 이용하여XC3S400 보드의 50MHz 클럭을 분주하고 0.5 초마다 한번씩 LED를 깜빡이는 회로를 설계한다.2) Base Equation50MHz의 클럭을 분주하기 위하여 26비트의 레지스터를 이용하였고, 0.5초를 표현하기 위하여 50MHz를 반으로 나눠 25MHz를 분기로 LED를 제어한다.간편한 숫자 표기를 위하여 Verilog HDL은 다양한 진법의 표기법을 제공하는데 여기서는 한눈에 알아보기 쉽도록 16진수를 이용한다.26bit = 67,108,863 (Dec) = 3FFFFFF50MHz = 2FA F080 (HEX)25MHz = 17D 7840 (HEX)50MHz = 1Sec25MHz = 0.5Sec1 / 50MHz = 20ns1 / 25MHz = 40ns위와 같이 간단하게 표현할 수 있으며 코딩 시에도 위의 숫자들을 그대로 적용할 수 있다.3) Port Design설계용 개발 툴은 Xilinx社의 ISE 8.1버전을 이용하며, 언어는 Verilog HDL을 이용한다.먼저 아래와 같이 기본적인 포트를 선언한다.input n_rst;// 리셋 버튼input clk;// 클럭 소스output out_led; // 제어용 시스템 LEDn_rst : 리셋 버튼으로 펄스가 로우가 입력신호로 들어가면 동작하게 된다. (ARM Study Group FPGA 보드 p156핀)clk : 클럭 소스가 입력으로 들어간다. (ARM Study Group FPGA 보드 p79핀)out_led : 출력용 시스템 LED로 0.5초마다 한번씩 점등한다. (ARM Study Group FPGA 보드 p150핀)그 외의 레지스터나 와이어에 대해서는 첨부하는 소스를 참고하면 됨.2. Design process1) Source Code & Synthesize먼저 이전에 제작된 FPGA Configuration 문서를 따라 디바이스를 설정하고 작업 환경을 갖춘 뒤, 아래의 프로그램 소스를 복사하여 붙인다.위의 그림은 아래의 소스를 붙인 상태이다.module FirstExam(n_rst,clk,out_led);// Port Defineinput n_rst;input clk;output out_led;// Register Definereg [25:0] test_counts;reg out_led;// test_counts Max value is 50MHz and than define HEX 2fa f080wire CounterMax = (test_counts==26'h2faf080);// 26bit Counter designalways @ (posedge clk or negedge n_rst)if (!n_rst)test_counts
두 바퀴 카트를 이용한도립진자 제어 시스템 설계目 次1.“Inverted pendulum”의 설계 ·················61.1작품의 개요61.2시스템 구성1.2.1 H/W 시스템 블럭도71.2.2 S/W 시스템 블럭도81.3수학적 모델링1.3.1Newton method을 이용한 동력학 방정식 유도91.3.2Lagrangian 함수를 이용한 동력학 방정식 유도151.3.3동력학 방정식의 상태공간 방정식 표현221.3.4DC 모터 운동 방정식 유도251.3.5DC모터 운동 방정식이 포함된 전체 시스템의동력학 방정식/ 상태 공간 방정식291.4제어기 설계322.“Inverted pendulum”의 구현2.1기구부502.2제어보드 설계582.3부품 소개632.4S/W732.5작품 사진871. “Inverted pendulum”의 설계1.1 작품의 개요우리는 긴 막대기를 손가락 끝에 세우고 몸을 중심으로 팔을 회전시키거나 밀고당기면서 긴 막대기가 쓰러지지 않게 할 수 있다. 도립진자(Inverted Pendulum)시스템도 이와 같다.도립진자 시스템은 수레 위의 진자가 적당한 제어 힘이 없는 상황에서 중력에 의해어느 한 쪽으로 넘어지려고 할 때 외부에서 수레에 힘을 가하여 특정 위치와진자의 각도를 유지시키는 시스템을 말한다.이러한 도립진자 시스템은 미사일 제어, 크레인 제어 및 2족 보행 로봇의 자세제어등의 기본이 되는 비선형 시스템의 대표적인 예로서, 현재 산업 전반에 수행되고있는 위치 및 자세 제어 분야의 다양한 시스템에 응용 가능한 시스템이다.손가락 끝에 막대를 올려놓고 평형하게 유지하도록 하는 문제는 발사 초기단계에있는 미사일의 비행자세를 조정하는 문제와 다를 바 없듯이 도립진자의 제어는이것의 축소판으로서 가치가 있다.도립진자 시스템에는 카트 형, 로터리 형 투 링크 형 등 여러 가지 종류가 있다.본 논문에서는 Segway를 모델로 한 두 바퀴 카트 도립진자 시스템을 제어 대상으로선정하여 직접 제어기를 구성하고 제어 대상인 플랜트를 구성해 봄으로써 실a prime 는 pole의 마찰력)theta '' 에 대해서 정리하면theta '' = {-mlx '' -mgl theta +b _{theta } theta '} over {I+ml ^{2}}(식 1. 5)수레의 수평 방향 방정식Mx '' `=`T _{m} -(-H)(H는 관성이므로 입력과는 반대 방향이다. )수레의 운동 방정식Mx '' =T _{m} +H-b _{x} x prime (Tm : 모터 토크,b _{x} x prime : 카트의 마찰력)Mx '' =T _{m} -m(x+lsin theta ) '' -b _{x} x prime (H를 대입하면)=T _{m} -m[x '' +( theta prime cos theta ) prime ]-b _{x} x prime =T _{m} -m[x '' +( theta '' cos theta - theta prime ^{2} sin theta )]-b _{x} x primex '' 에 대하여 정리 하면x '' = {T _{m} +ml( theta prime ^{2} sin theta - theta '' cos theta )-b _{x} x prime } over {M+m}theta prime ^{2} APPROX 0`,````cos theta APPROX 1,````sin theta APPROX theta 라고 하면따라서x '' = {T _{m} -ml theta '' -b _{x} x prime } over {M+m}(식 1. 6)2. Lagrangian 함수를 이용한 동력학 방정식 유도운동 에너지 T에서 위치 에너지 V를 뺀 Lagrangian 함수는 다음과 같이 정의된다.L=T``-`V(식 1. 7)각각의 에너지 T와 V를 구하여 운동 방정식을 정리 할 수 있다.M(cart)xtheta theta theta l theta prime cos theta ll theta prime sin theta mh=l theta prime cos theta l`theta '진자(Pole)와 수레(cart)의 운동에너지 TT=D 제어기 설계본 교재에서 제어 할 Inverted Pendulum의 전달함수는G _{theta } (s)= {theta (s)} over {T(s)} = {1.137} over {s ^{2} -25.72}G _{x} (s)= {x(s)} over {T} = {0.3471s ^{2} -6.166 ^{-16} s-11.14} over {s ^{4} -25.72s ^{2}}이다.위의 전달함수를 아래와 같이 다르게 나타내면G _{x} (s)= {1.137} over {s ^{2} -25.72} TIMES {0.3053s ^{2} -5.423 ^{-16} s-9.798} over {s ^{2}}G _{x} (s)=G _{theta } (s) TIMES G _{x1} (s)와 같이 나타낼 수 있다.Pole의 각도에 대한 전달 함수는 분모가 2차인 시스템이다. 이는 하나의PID 제어기를 설계하여 제어 가능하다. 그리고 Arm의 전달함수는 분모가4차인 시스템이다.이는 두개의 PID 제어기가 필요하다. 그렇지만 본 교재에서는 Pole의전달함수가 Arm의 전달 함수에 포함되는 형태로 표현 가능하다. 그래서본 논문에서는 Pole의 각도를 제어하기 위한 하나의 PID 제어기를 설계하고이를 연계하여 또 다른 하나의 PID 제어기를 통하여 Arm의 각도를 제어 한다.Pole의 전달 함수theta G _{x1} (s) 두개의 PID제어기 설계 형태아래의 블록선도에서 본 교재는 두개의 PID 제어기를 설계하기 위하여4단계의 절차를 거친다.1 단계 : 진자(pole)에 관한 PID 제어기 설계2 단계 : PID 제어기를 포함한 Inner loop 전달함수 계산3 단계 : 카트(cart)을 포함한 전달함수의 PID 제어기 설계4 단계 : 설계된 2개의 PID 제어기를 통한 비선형시스템 simulation1) 1 단계Pole에 관한 PID제어기 설계를 위하여 Matrix을 이용하여 Block Diagram 그리면본 논문에서 제어할 카트 펜들럼은 빠른 응답 속도를 요구한다.이런 경우 보통 PI작하고 나중에 전원이인가되는블록은 나중에 동작하여 오동작을 일으킬 수 있다. 그래서 MCU는 전원을인가하고 리셋을 시켜서 MCU의 모든 내부 상태를 초기화하여 동작 시간을맞추게 된다.MCU에 전원이 인가되면서 그림2.2-4 와 같은 회로에서 전류가 콘덴서와저항을 흐르면서 콘덴서에는 충전이 되게 된다. 그러나 콘덴서에 충전되면서전류량은 감소하고 전류량 감소는 옴의 법칙(V = IR)에 따라서 저항에걸리는 전압도 감소하게 된다. 그리고 충전이 완료되면 더 이상 전류는 흐르지않게 되고 저항에 걸리는 전압이 0V가 되어 그림 2.2-4 와 같은 상태가 된다.따라서 MUC는 2머신 싸이클동안 Low 입력을 받아 MCU는 리셋된다.MCU와의 프로그램 전송을 위하여 ISP Port을 사용하였다Motor Input Part/ Motor DriveMotor Input Part는 모터 드라이브로 들어가는 입력의 신호와 전압을 8pin Header2개를 이용하여 구성하여 놓았다.MCU에서 명령하는 PWM과 Enable, Brake, Directon을 모터 드라이버에 전달하며,모터 전원(Vm : 24V)과 모터드라이버 전원(Vcc : 5V)를 인가한다.Power Part그림 2.2-6은 Power Part로써 LM2575의 회로 구성을 나타내었다. 본 논문에서의 정전압 레귤레이터는 LM2575를 사용하였다.정전압 레귤레이터에는 리니어(Linear) 방식과 스위칭(Switching) 방식이 있다.5V가 필요할 때 리니어 방식으로 보통 7805가 많이 쓰이는데, 7805의 입력전압 범위는 최대 7∼35V이며, 출력전류는 1A이다. 7805를 사용하는 경우,입력과 출력 사이의 전압차이를 7805가 부담해야 하기 때문에 여리 많이 발생한다.발생하는 열은 대략P=(V _{i`n} -V _{out} ) TIMES I _{out}로 나타낼 수 있고, 이것이 모두 열로손실되는 에너지로 베터리를 사용하는 시스템에서는 치명적이고, 부득이한경우는 방열판을 설치해야 한다는 단점이 있다. 하지만 양질의 능53개의 설정가능한 입출력(I/O) 포트, 64핀 TQFP와 64핀 MLF동작 전압, 클럭 주파수ATmega128L : 2.7-4.5V, 0-8MHzATmega128 : 4.5-5.5V, 0-16MHz기본 핀 설명VCC (21, 52) : 공급 전압GND (22, 53) : 접지Port A (PA7~PA0) (51~44) : 포트 A는 내부 풀업 저항을 갖는 8비트의양방향 입출력 포트이다. 외부 메모리를 엑세스 하는 경우에는 A7~A0의어드레스/D7~D0의 데이터 포트로 사용된다.Port B (PB7~PB0) (10~17) : 포트 B는 내부 풀업 저항을 갖는 8비트의양방향 입출력 포트이다.Port C (PC7~PC0) (35~42) : 포트 C는 내부 풀업 저항을 갖는 8비트의양방향 입출력 포트이다. 외부 메모리를 엑세스 하는 경우에는 A8~A15의어드레스 출력 포트로 사용된다.Port D (PD7~PD0) (25~32) : 포트 D는 내부 풀업 저항을 갖는 8비트의양방향 입출력 포트이다.Port E (PE7~PE0) (2~9) : 포트 E는 내부 풀업 저항을 갖는 8비트의 양방향입출력 포트이다.Port F (PF7~PF0) (61~54) : 포트 F는 내부 풀업 저항을 갖는 8비트의양방향 입출력 포트이다.Port G (PG4~PG0) (33, 34, 43, 18, 19) : 포트 G는 내부 풀업 저항을 갖는5비트의 양방향 입출력 포트이다.RESET (20) : 리셋 입력. CPU 리셋. 최소 50ns이 Low(0V)가 되어야 한다.XTAL1 (24) : 오실레이터 입력XTAL2 (23) : 오실레이터 출력AVCC (64) : AVCC는 포트 F의 A/D 컨버터를 위한 전압을 공급하는핀이다. ADC를 사용하지 않는다면 VCC에 연겷하면 된다. 그러나 ADC를사용할 경우에는 LPF를 통하여 VCC에 연결 되어야 한다.AREF (62) : AREF는 A/D 컨버터를 위한 아날로그 레퍼런스 핀 이다PEN (1) : PEN은 SPI 시리얼 프로그램 모드를 위한 프.
ZigBee를 이용한 Home NetworkMonitoring System(The Home Network Monitoring Systemwhich use ZigBee)1.서 론 ..............62.세부적인 구성 ...72.1ATMEGA128의 구조와 기능72.1.1AVR 마이크로 컨트롤러의 개요.............72.1.2ATMEGA128의 기본 구조와 기능.........82.2Zigbee의 특징.....112.2.1Zigbee란...............112.2.2Zigbee의 어원 ......122.2.3Zigbee의 특징 ......122.3CC2420의 구조와 기능......142.4Sensor................172.4.1온도Sensor(Temperature Sensor)..........172.4.2습도Sensor(Humidity Sensor)................192.4.3가스Sens개의 16Bit Timer/ Counter- 2개의 8Bit PWM, 6개의 2~16Bit PWM 출력- 8채널 10Bit A/D Convertor- 2개의 UART- SPI와 TWI 직렬통신 포트- 비교기 내장- 35개의 Interrupt Vector- 6개의 Power 절약 Mode- ATMEGA103과 호환 : 몇 가지 달라지는 사항이 있다.2) ATMEGA128의 핀 배치 ATMEGA128 핀 배치3) ATMEGA128의 내부 구조 ATMEGA128의 내부 구조2.2. Zigbee(IEEE 802.15.4)의 특징2.2.1 Zigbee란ZigBee는 저전력, 저가격, 사용의 용이성을 자랑하는 무선센서네트워크의대표적 기술로 각광을 받고 있으며, 시작은 Home Network의 무선기술로각광을 받았던 HomeRF의 Low Rate Version으로 1988년에 시작되었으며Firefly, RF-Lite 로 이름이 변경된 후 최종적으로 ZigBee로 명명이 되었다.IEEE 802.15.4는 LR-WPAN(LowLate-Wireless Personal Area Network)으로Sensors, interactive toys, smart badges, remote controls, 그리고 home automation 분야에서의 활용을 위해 매우 긴 Battery 수명(수 개월~수 년)과 매우 간단한 network 구조를 갖는 저속의solution을 찾기 위해 제정된 것이다. (2003년 승인)IEEE 802.15는 무선 LAN의 표준화를 진행하는 IEEE 802.11에서 분리된 근 거리 무선통신 표준화 위원회의 명칭이며, IEEE 802.15.4는 ZigBee 표준의 Physical Layer와 MAC Layer를 정의하고 있으며, ZigBee는 "ZigBee is a hardware and software standard based on IEEE 802.15.4 standard " 로 정의 할 수 있다.Zigbee 프로토콜 Stack2.2.2 Zigbee의 어원능- 외부의 0.1uF 캐패시터 4 개 사용- 250 kbit/s 의 통신속도- 저전류 사용, 일반적으로 300uA MAX3232 회로도2.5.2 Star TopologyZigBee는 2가지 topology를 지원하는데 그 중 하나인 Star Topology는 단일 채널(Hop)로 연결된 네트워크 상에서 PAN coordinator와 Network device와의 통신이 이루어지며 Master & slave의 통신방식을 가진다.정보의 흐름이 단순하다는 장점과 중앙 집중화로 인한 잠재적인 병목현상이 존재한다는 단점이 있다.Star TopologyZigBee가 지원하는 topology인 Peer-to-peer topology는 Device 간에 자유롭게통신이 가능하며, Multi-Hop을 사용한다. Peer-to-peer Topology*Full Function Device (FFD)? 어떠한 topology로도 작동이 가능.? network coordinator가 될 수 있다.? coordinator가 될 수 있다.? 다른 장비와 연결될 수 있다.*Reduced Function Device (RFD)? Star Topology로 제한? 네트워크 coordinator가 될 수 없다.? 네트워크 coordinator에만 연결.? 매우 간단한 implementation.3. 시스템 구성3.1 H/W 구성3.1.1 Nano-24의 특징㈜옥타컴의 Nano-24는 유비쿼터스 환경의 기반 기술인 센서 네트워크 환경 개발 및 교육용 실습 키트로, 7개의 센서(온도, 조도, 습도, 가스, 초음파, 초전, 가속도) 입력 값을 받아서 A/D 변환을 하여 RF 모듈에 의해 무선으로 데이터를 주고 받을 수 있다. 마이크로 컨트롤러는 RISC구조를 사용하 는 Atmega128L이며 내부에 128Kbyte의 ISR(In-System Reprogrammable) 기반의 플래시 메모리와 4Kbyte의 내부 SRAM 및 4Kbyte의 EEPROM을 지원한다. 또, 추가적으로 외부 플래시메모리 서 선 택이 가능하다. 은 True값이 들어오면 While Loop를 멈추라는 것이고, 은 True값이 들어오면 While Loop을 실행시키라는 의미이다. 주로 논리적으로 이 해하기가 쉬운 Stop If True을 사용하며 여기에서도 이것을 사용하였다. While Loop->Case Structure는 Text기반의 프로그래밍 언어의 If문과 Case문의 기능을 이Case Structure로 구현할 수 있다. Case Structurefmf 사용하기 위해선 에조건에 입력해 주어야 한다. 예를 들어 Boolean을 연결하면 True와 False의 두 가지 조건에 대한 Case가 생길 것이고 Numeric 0,1,2,3을 입력하면 0,1,2,3의 네 가지 조건에 대한 Case가 생길 것이다. Case Structure(2) String 함수 String Subset 함수-> Serial 통신을 통해 들어오는 Data를 String Subset의 Offset과 Length를 이용하여 필요한 Data의 일부만 빼내어 사용하는 함수이다. 1이란 Data가 들어오면 거실LED가 ON이 되고 3이란 Data가 들어오면 주방LED가 ON이 된다.그에 따라 P란 Data가 들어오면 조도센서, H란 Data가 들어오면 습도센서, T란 Data가 들어오면 온도센서, G란 Data가 들어오면 가스센서에 해당하는Block Diagram이 Display된다. Hexadecimal String To Number-> 16진수값을 10진수로 바꾸어 주는 함수이다. Match Pattern-> String Subset처럼 Offset을 정해 주는 것이 아니라 입력한 Pattern과 일치하 는 곳까지 자동 Offset 을 하고, 이 Pattern에서 이전 String을 빼내거나 이후 String을 빼내고, Offset한 길이를 출력해준다. Concatenate Strings-> 여러 개의 String을 하나로 묶어주는 함수이다. 마우스로 아래부분을 당겨주 면 늘어난다.(3)Cluster함수Cbuf);}void rf_recv_data(UINT16 SrcAddr, UINT8 length, BYTE *data){// Application node idBYTE AppNodeId = data[FIELD_APP_NODE_ID];// Packet typeBYTE PacketType = data[FIELD_PACKET_TYPE];UINT16 TempValue_ing = 0;UINT16 TempValue_dec = 0;UINT16 HumValue = 0;UINT16 GasValue = 0;if (PacketType == SENSOR_DATA_PACKET) {// Sensor lengthBYTE SensorLength = data[FIELD_SENSOR_LENGTH];for (UINT8 i=0 ; i SENSOR_HUM_THRESHOLD) {puts("Hum Turn ONrn");AC_Relay_Ctrl1(TURN_ON);} else if(HumValue < SENSOR_HUM_THRESHOLD){puts("Hum Turn OFFrn");AC_Relay_Ctrl1(TURN_OFF);break;}case 3:int_digit(AppNodeId); puts("Humidity Value : "); int_digit(HumValue); puts("%rn");}{if (AppNodeId == 1){if (HumValue > SENSOR_HUM_THRESHOLD) {puts("Hum Turn ONrn");AC_Relay_Ctrl(TURN_ON);} else if(HumValue < SENSOR_HUM_THRESHOLD){puts("Hum Turn OFFrn");AC_Relay_Ctrl(TURN_OFF);}}}*/} else if (SensorType == SENSOR_GAS) {GasValue = SensorValue;puts("rn"); int_digit(AppNodeId); puts("Gas Value : "); int_digit(GasValue);; i
--직렬 통신 포트 동작--01671162 이상화01671135 안상민01671069 문하성1. 직렬 통신(RS232)개요2. 8051의 직렬포트 개요3. 직렬 포트 제어 레지스터4. 동작모드5. 보레이트의 발생6. 다중 프로세서 직렬 통신7. 키 메트릭스를 이용하여 하이퍼터미널로 문자를 전송하는 프로그램1. 직렬 통신(RS232)의 개요RS232C인터페이스는 직렬 통신방식을 규정하는 권고안으로서 미국의 EIA(Electronic Industries Association)에 의해 규격화되었으며, 정확하게 EIA-RS232C 규격이라고 불린다. 이 RS232C 인터페이스는 원래 밑에 그림과 같이 DTE(Data Terminal Equipment : 데이터 단말장치)와 DCE(Data communication Equipment : 데이터 통신장치)사이의 인터페이스 조건을 결정하기 위해 고안된 권고 규격이다. 여기서 DTE는 컴퓨터 또는 I/O 기기 등의 저에장치이고, DCE는 모뎀등의 회선 단말장치를 말한다. RS232의 규격은 전기적인 특성, 기계적인 특성(커넥터 사양), 인터페이스등을 규정하고 있어서, 현재 모뎀과 컴퓨터 주변장치와의 입/출력 인터페이스로서 널리 사용된다● RS232 신호 및 기능1. FG : 기기에 연결되는 접지선2. TxD : DTE에서 DCE로의 출력 직렬 데이터의 송신선3. RxD : DTE에서 DCE로의 입력 직렬 데이터의 송신선4. RTS(송신요구) : 데이터 송신을 요구하기 위한 제어선이다.5. CTS(송신허가) : DCE가 데이터를 송신할 수 있는 상태임을 알리는 신호6. DSR : 기기의 전원이 ON인지의 여부와 같은 기기의 준비상태를 조사한다.7. DTR : 데이터 터미널이 DSR과 마찬가지로 OK인가를 조사한다8. DCD : 모뎀이 상대편 모뎀과 전화선 등을 통해서 접속이 완료되었을 때, 상대편모뎀이캐리어 신호를 보내오며 이 신호를 검출하였음을 DTE에게 알려주는 신호선9. RI : 상대편 모뎀이 통신을 하기 위해서 먼저 전이때 이 신호를 모뎀이 인식하여 DTE에게 알려주는 신호선핀번호명칭신호방향DTE-DCE기호1기기 접지(frame ground)-FG2송신 데이터(transmitted data)→TxD3수신 데이터(receive data)←RxD4송신 요구(request to send)→5송신 허가(clear to send)←6통신기기 준비 완료(data set ready)←7신호 접지(signal ground)-SG8캐리어 검출(data carrier detect)←20터미널 준비 완료(data terminal ready)→22Ring Indicator←● 전기적 규격 및 사용 커넥터일반 디지털 논리로 원격에 떨어져 있는 장치로 데이터를 정확하게 전송하기에는 전압강하와 잡음으로 인하여 어렵다. 따라서 RE232C에서는 어느 정도의 전압강하가 발생하더라도 어느 정도의 거리는 안전하게 신호를 전송할 수 있도록 각 신호간의 전압차를 늘렸다. “1”의 값을 +12V로, “0”의 값을 -12V로 사용하여 신호간의 전압차를 24V로 만들었다. 이와 같이 신호간의 전압차를 늘렸을 때 약 15m 내의 거리에서 약 19.2Kbps까지의 속도로 전송이 가능하다.RS232C의 전기적인 규격에서는 데이터 선이 -3V 이하일 때 논리 “1”(마크상태), +3V 이상일 때 논리 “0”(스페이스 상태)이 된다. 또한 데이터를 전송하지 않을 때에는 마크 상태로 되도록 규정되어 있다.DB-25 RS-232 코넥터 DB-9 RS-232 코넥터케이블별 핀번호에따른 신호명과 명칭9핀과 25핀 경우 연결 방법● 인터페이스 ICTTL신호를 EIA 레벨(RS232C 레벨)로 변환하기 위해 MAXIX 사에서 만든 MAX232를 널리 사용하고 있다. MAX232DF 사용하는 장점은 RS232C 신호를 송/수신하는데 하나의 IC만을 상용한다는 것과 기존의 방식은 ±12V 전원이 별도로 필요 하였는데 MAX232는 +5V 전원만으로 사용할 수 있다는 것이다.2. 직렬 포트 개요직렬포트는 전이중(full duplex)방식으로수 있다는 점에서 송신과 수신을 번갈아 하는 반이중(half duplex)방식으로 구분된다.8051의 직렬포트는 수신버퍼(receive buffered)방식으로 되어 있는데 이 방식은수신부의 데이터 버퍼가 2중 구조로 되어 있어서 앞에서 수신한 바이트가 수신레지스터(SBUF)로부터 읽혀지기 전에 두 번째 바이트가 수신되어도 오버플로 착오(overflow error)가 발생 되지 않도록 하는 것이다.직렬포트의 송신 및 수신은 SBUF을 통하여 이루어지는데, SBUF의 주소는 송신과 수신 모두 같지만(88H 번지)SBUF에 기록(write)을 하는 것은 물리적으로 전혀 다른 송신 레지스터에 기록하는 것이고, SBUF를 읽어드리는 것은 물리적으로 전혀 다른 수신 레지스터의 내용이다 즉 SBUF라 하더라도 수신과 송신의 경우에 주소는 같아도 실제 사용하는 레지스터는 전혀 다르다.3. 직렬 포트 제어 레지스터● SBUF송신할 데이터와 수신한 데이터를 일시 보존하는 역할이다 즉 데이터를 기록할 때에는송신 레지스터로서의 SBUFtx에 접근되고, SBUF를 읽어드릴 때에는 주소는 동일하나 물리적으로 전혀 다른 수신 레지스터로서의 SBUFrx에 접근된다● SCON 레지스터TI 및 RI 비트각각 1문자의 송신이 완료되어 송신부가 비거나(empty), 1문자가 수신되어 수신부가 차게 되면(full) 1로 세트되어 인터럽트를 발생시키는 플래그TB8 및 RB8 비트모드 2와 모드 3의 11비트 프레임에서 9번째 데이터 비트를 표시모드 1이고 SM2=0인 경우 RB8은 스톱비트 저장SM0∼SM1 비트는 직렬 포트의 동작 모드를 설정SM2 비트1로 설정하면 모드 2와 모드 3에서 9번째 비트가 RB8=1로 수신되었을 경우에만 직렬 포트 인터럽트가 발생되고 RB8=0인 경우에는 인터럽트가 발생되지 않는다. 모드 1에서 SM2=1로 설정하면 데이터 비트에 이어서 스톱 비트가 올바르게 수신된 경우에만 인터럽트가 발생한다.예: MOV SCON, #52H ; 01010010BSM0 SM1 = 0=1 : receive enableTI = 1 : transmit interrupt flagSerial Port Control Register, 98H● PCON 레지스터보율을 제어하고 idle 모드와 power down 모드를 제어하는데 직렬포트에서 필요한 것은보율을 제어하는 SMOD뿐이다 SMOD를 1로 세트해두면 모드 1,2,3에서 보율이 2배이다● 직렬 포트의 인터럽트IE레지스터의 비트 4(ES)와 비트 7(EA)이 세트되어 있으면 벡터 23H의 직렬포트 인터럽트가 발생하면 직렬포트는 수신레지스터( SBUFrx )가 찬다든가 송신레지스터( SBUFtx )가 빌 경우에 RI 또는 TI를 세트시킨다 그런데 직렬포트의 인터럽트 요청선은 한 개 밖에 없어서 RI와 TI는 OR되어 있다. 인터럽트의 소스를 찾은 후에는 RI=0 또는 TI=0과 샅은 명령에 의해서 이들 플래그를 클리어해 주어야한다 그렇지 않으면 동일한 인터럽트가 계속 다시 발생한다.4. 동작모드● 모드 0이 모드는 I/O확장용의 동기식 통신 모드로서 직렬포트가 이모드로 설정되면 동기 클록은TxD를 통하여 나가고 송신 및 수신 데이터는 RxD를 통하여 주고 받는다보율(baud rate)은 발진주파수의 1/12에 고정된다 모드 0에서는 CPU의 기계사이클에 동기하여 송수신이 이루어지기 때문이다.※모드 0의 보율 =※모드 0의 기능도● 모드 110비트 프레임의 표준 비동기식 통신 모드로, 모드 0과는 달리 TxD는 데이터 송신RxD는 데이터의 수신으로 사용된다10비트 프레임의 3요소는 ① start비트(“0”)② 8개의 데이터 비트 (LDS부터 송수신)③ stop 비트(“1”)데이터 수신할 때 stop 비트는 SCON 레지스터의 RB8에 들어간다모드 1에 보율은 타이머 1의 오버플로 율 과 보율선택 비트의 값에 따라 다음식과 결정※모드 1의 보율=× (타이머 1의 오버플로 율)타이머 1을 보율생성기로 하기 위해서는 타이머 1 인터럽트 허용 비트를 불허로 해야한다또 타이머 또는 카운터 어느 것으로 해도 해도 되나 일반적으로는 8비트 자동 재로드의 타이머 모드로 한다 이 경우 타이머 0는 타이머 모드 3으로 해두는 것이 일반적이다 타이머 1을 보율생성기로 사용할 경우에는 인터럽트를 불허해야 하기 때문에 타이머 0을 모드 3으로 해두면 TL0와 TH0 각각에 인터럽트를 사용할 수 있기 때문이다 그러나 두개의 타이머 인터럽트가 필요하지 않을 경우에는 어느 모드로 해도 상관은 없다 타이머 1을 자동 재로드으 lxkdlaj 모드로 할 경우의 보율은 다음식으로 표시된다※보율 =×송신 동작SBUF에 송신 데이터를 쓰기하여 개시SBUF 쓰기를 하면 즉시 송신 시프트 레지스터의 9번째 비트에 1이 로드되며, 이것은 수신측에서 스톱 비트로 작용한다.송신측에서 9번째 비트인 스톱 비트(1)를 전송하기 시작하는 순간에 TI를 세트시켜 송신완료 인터럽트를 발생한다.수신 동작REN=1인 상태에서 RxD 신호의 하강 에지가 입력되면 시작스타트 비트(0)가 올바르게 검출되었으면 이후 8비트의 데이터 D0∼D7을 수신하여 시프트 레지스터에 저장※모드 1의 기능도● 모드 2 와 311비트 프레임(1 스타트 비트, 8 데이터 비트, 프로그래머블한 9번째 비트, 1 스톱 비트)의 비동기 전송 모드모드 3과 함께 주로 멀티프로세서 시스템에서 프로세서 사이의 통신에 사용9번째 비트는 SCON 레지스터의 TB8 비트에 라이트함으로써 송신되며, 수신된 9번째 비트는 SCON 레지스터의 RB8 비트에 저장된다.SCON 레지스터에서 SM2=1로 설정하면 RB8 비트가 1로 수신되었을 경우에만 직렬 포트 인터럽트가 발생되고 0으로 수신된 경우에는 인터럽트가 발생되지 않는다.모드 3은 모드 2와 동일한 동작을 수행하며 단지 보레이트만이 다르다.모드 2에서는 보레이트를 시스템 클럭의 1/32이나 1/64로 설정할 수 있는데 비하여, 모드 3에서는 보레이트를 타이머 1이나 타이머 2를 사용하여 임의로 설정할 수 있다.5. 보레이트(Baud rate)의 발생직렬 포트의 동작 모드 1과 3타이머 1을 사용하는 방.