시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6, 7

Size: px
Start display at page:

Download "시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6, 7"

Transcription

1 CHAPTER 12 시리얼통신 가. 레지스터구조이해하기 나. 하이퍼터미널을이용하여로봇제어하기

2 시리얼통신 (USART) 범용동기및비동기시리얼수신기와송신기 (USART) 는매우유연한시리얼통신장치이다. 주요특징은다음과같다. w 송수신레지스터가독립적으로운용되는전이중방식. w 비동기또는동기동작. w 마스터또는슬레이브동기동작. w 고해상도전송속도생성기. w 5, 6, 7, 8, 또는 9 비트의데이터와 1 개또는 2 개의정지비트직렬프레임 을지원. w 홀수또는짝수패리티비트생성및하드웨어에의한패리티검사지원. w 데이터오버런 (Overrun) 검출장치. w 오류감지 (Framing error) 를도용. w 노이즈필터링검출및디지털저역통과필터지원. w TX Complete, TX Data Register Empty, RX Complete 별도의세가지인터 럽트지원. w 멀티프로세서통신모드. w 비동기통신모드에서의보율더블러 (Baud rate doubler) USART 송신기의단순블록다이어그램은그림 8.1에나타낸다. CPU 접근 I/O 레지스터및 I/O 핀은굵은글씨로표시된다. 그림 8.1에서점선으로처리된부분은 Clock generator, Transmitter, Receiver 세부분으로구성되어있으며, 이세부분은제어레지스터를공통으로사용하고있다. Clock generator는동기슬레이브동작에서사용하는외부클록입력과, 보율발생장치로구성되어있고, Transmitter는단일쓰기버퍼, 시프트레지스터, 패리티발생기등으로이루어져있으며, 단일쓰기버퍼는프레임간에지연시간없이연속적인데이터를보낼수있게해준다. Receiver는 USART 모듈의가장복잡한구조이며, 클록및데이터복구장치로이루어져있다. 여기서데이터복구장치는비동기데이터수신에서사용하고, 패리티검사기와제어로직, 시프트레지스터와두개의수신버퍼 (UDR) 로이루어져있다.

3 [ 그림 8.1] USART 블록다이어그램 가. 레지스터구조이해하기 1) 클록발생장치 클록발생장치는송신및수신의가장기본적인클록을만들어낸다. USART 모듈은 Normal Asynchronous mode, Double Speed Astnchronous mode, Master Synchronous mode, Slave Synchronous mode 등네가지의모드가있다. UCSRC 레지스터의 UMSEL 비트를설정하여동기및비동기방식을선택할수있다. 비동기모드에서만지원되는보율더블러는 UCSRA 레지스터의 U2X를설정하여속도를두배로증가할수있다. 동기모드로설정되었을경우에 (UMSEL=1), XCK 핀 (DDR_XCK) 의데이터방향레지스터는클록소스가내부 (Master mode) 에있는지, 아니면외부 (Slave mode) 에있는지를결정한다. 즉, XCK 핀은동기모드에서만활용된다. 그림 8.2에클록발생장치를나타낸다.

4 [ 그림 8.2] 클록발생장치 그림 8.2의신호에대한설명은아래와같다. w txclk : 송신클록 ( 내부신호 ). w rxclk : 수신클록 ( 내부신호 ). w xcki : XCX 핀으로부터의입력 ( 내부신호 ), Slave Synchronous mode에서지원. w xcko : XCK 핀에대한출력 ( 내부신호 ), Master Synchronous mode에서지원. w fosc : XTAL 핀주파수 ( 시스템클록 ) 내부클록발생장치는 Asynchronous 및 Synchronous Master mode에서사용되며, USART 모듈의보율발생레지스터 (UBRR) 는다운카운터로동작하며프리스케일러또는보율발생장치의기능을한다. 시스템클록 ( ) 과동기해서동작하는다운카운터는 UBRRL 레지스터에서새로운값을쓰던지아니면카운터가 0 이되면값이로드된다. 이클록이바로보율발생장치클록의출력이된다. ( ) 송신기는보율발생클록의 2, 4, 8 분주로, 수신기는 2, 8, 16 분주로동작하며, UMSEL, U2X 그리고 DDR_XCK 비트의설정에따라서달라진다. 그림 8.3에보율발생계산식및각보드에따른 UBRR 값을나타낸다. [ 그림 8.3] Baud Rate Register 계산식

5 여기서, BAUD는 Baud rate(bps) 이고, 는시스템클록을의미하며, UBRR은 UBRRH와 UBRRL 레지스터를의미한다. Synchronous Master Mode에서지원하는외부클록은 XCK 핀으로입력되는외부클록으로송신및수신기로사용될때에지검출기에의해서검출된다. 이과정에서두개의 CPU 클록지연과최대외부 XCK 주파수는다음식으로제한이된다. UMSEL=1 로설정하여동기모드인경우에, XCK 핀은클록입력 (Slave) 또는클록 출력 (Master) 으로사용된다. RXD 의데이터입력은 XCK 클록에지에서샘플링되며 이과정을그림 8.4 에나타낸다. [ 그림 8.4] 동기모드에서의 XCK 타이밍 UCSRC 레지스터의 UCPOL은 XCK 클록에지가어떤데이터샘플링에서사용되는지또는데이터변환에사용되는지를결정한다. 그림 118에나타냈듯이 UCPOL이 0 이면, 데이터는 XCK의상승에지에서변하고, XCK의하강에지에서샘플링된다. 반대로 UCPOL이 1 로설정되면, 데이터는 XCK의하강에지에서변하고 XCK의상승에지에서샘플링된다. 2) Frame format 직렬데이터프레임은동기비트인시작과정지비트를포함한문자를의미하는 것으로여기에는에러검출을위한패리티비트가추가될수도있다. ATmega128 의 USART 의프레임은다음과같다. w w 1 start bit 5, 6, 7, 9 data bit

6 w w no, even or odd parity bit 1 or 2 stop bit 데이터프레임은 start bit로시작하여 LSB 비트순서대로전송하며, 전체 9비트인 MSB가전송되면완료된다. 패리티비트가있으면 MSB비트다음에위치하고 stop bit가위치한다. 프레임전체가송신이완료되면, 새로운프레임이오거나 idle 상태가된다. 그림 8.5에프레임조압을나타낸다. [ 그림 8.5] 데이터프레임 w w w w St : start bit(low) (n) : Data bit(0~8) P : Parity bit(even 또는 odd) Sp : Stop bit(high) w IDLE : 데이터가없는경우로언제나 High 상태가된다. 패리티비트는모든데이터비트의 exclusive-or 를이용하여계산하는데, odd parity 가설정되면 exclusive-or 결과같의역이되고, 다음과같은식이성립된다. 여기서, 은 even parity 를이용한패리티비트이고, 는 odd parity 를이용 한패리티비트이다. 3) USART 초기화 USART 의초기화는통신이시작되기전에설정되어야만한다. 일반적인초기화는 보율을설정하고, 프레임및송수신을결정하면되며, 초기화과정에는인터럽트를 disable 하여야한다. 아래의예제는초기화과정을나타낸다. void USART_Init(unsigned int baud)

7 /* Set baud rate */ UBRRH = (unsigned char)(baud>>8); UBRRH = (unsigned char)baud; /* Enable receiver and transmitter */ UCSRB = (1<<RXEN) (1<<TXEN); /* Set frame format : 8 bit data, 2stop bit */ UCSRC = (1<<USBS) (3<<UCSZ0); 4) USART 의송신장치 USART의송신기는 UCSRB 레지스터의 TXEN 비트를 1 로설정함으로써 enable된다. 송신기가 enable된경우에는 TXD 핀의범용포트의동작은되지않으며, USART의데이터출력용으로이용된다. 보율, 동작모드, 데이터프레임등의설정은송신을하기전에설정되어야만하고, 동기모드로동작하는경우에는 XCK의클록은송신클록으로사용된다. 데이터송신은전송할데이터가송신버퍼에로드되면초기화된다. 그러면 CPU는 UDR에값을써서송신버퍼의내용을로드한다. 시프트레지스터가다음데이터를송신할준비가되어있으면, 송신버퍼에있는데이터가시프트레지스터로이동한다. 다음예제에 USART의송신기가 Data Register Empty(UDRE) 플래그를이용하여송신하는과정을나타냈다. void USART_Transmit(unsigned char data) /* Wait for empty transmit buffer */ while (!(UCSRA & (1<<UDRE))); /* Put data into buffer, sends the data */ UDR = data; UCSZ=7 인경우, 즉 9 비트데이터인경우에는 9 번째비트는 UCSRB 레지스터의 TXB8 비트가 1 로설정되어있어야한다. 다음예제에 9 번째비트를송신하는 과정을나타낸다. void USART_Transmit(unsigned char data)

8 /* Wait for empty transmit buffer */ while (!(UCSRA & (1<<UDRE))); /* Copy 9 th bit from r17 to TXB8 */ UCSRB &= ~(1<<TXB8); if (data & 0x0100) UCSRB = (1<<TXB8); /* Put LSB data(r16) into buffer, sends the data */ UDR = data; USART의송신기는 USART Data Register Empty(UDRE), Transmit Complete(TXC) 등의상태를나타내는 2개의플래그레지스터가있다. UDRE 플래그는송신버퍼가새로운데이터를받을준비가되어있다고알려주는역할을하며, 송신버퍼가비어있을때 1 로 Set 되며, 아직시프트레지스터에옮겨지지않은송신할데이터가있는경우에는 0 으로클리어된다. UCSRB 레지스터의 Data Register Empty Interrupt Enable(UDRIE) 비트를 1 로설정하면 UDRE 인터럽트가수행된다. 물론여기서전체인터럽트는 enable되어있어야만한다. UDRE 플래그는 UDR 에새로운값을쓰게되면 0 으로클리어된다. 인터럽트에의해서데이터가전송이되면, UDR 인터럽트서비스루틴은 UDRE 플래그를클리어하기위해서 UDR 에새로운데이터를써넣든지아니면 UDR 인터럽트를 disable해야만한다. 그렇지않으면, 인터럽트가종료한후에도새로운인터럽트가발생하게된다. Transmit Complete(TXC) 플래그는송신시프트레지스터에있는전체프레임이시프트로출력하고송신버퍼에현재새로운데이터가존재하지않으면, 1 로 Set 된다. TXC플래그비트는송신완료인터럽트가실행되거나, TXC 비트에 1 로덮어쓰면 0 으로클리어된다. TXC 플래그가 RS485 방식과같은반이중통신방식에서사용된다. UCSRB 레지스터의 Transmit Complete Interrupt Enable(TXCIE) 비트가 1 로 Set 되면, USART Transmit Complete 인터럽트가실행된다. 물론여기서전체인터럽트는 enable되어있어야만한다. USART Transmit Complete 인터럽트를사용할경우에는인터럽트가수행되고나면 TXC 비트는자동으로클리어되므로 TXC 플래그를클리어할필요는없다. 5) USART 의수신장치 UASRT의수신기는 UCSRB 레지스터의 Receive Enable(RXEN) 비트를 1 로설정함으로써 enable된다. 수신기가 enable된경우에는 RXD 핀의범용포트의동작은되지않으며, USART의데이터입력용으로이용된다. 보율, 동작모드, 데이터프레임등의설정은수신을하기전에설정되어야만하고, 동기모드로동작하는경우

9 에 XCK의클록은송신클록으로사용된다. 수신기는유효한시작비트가입력되면수신하기시작하고, 각각의데이터비트는보율또는 XCK 핀에서샘플링하여프레임의철번째정지비트가수신될때까지수신시프트레지스터에데이터를시프트한다. 첫번째정지비트가수신되면, 즉전체직렬프레임이수신시프트레지스터에수신완료되면, 수신시프트레지스터의내용을 UDR 레지스터를통하여읽을수있다. 다음예제는 Receive Complete(RXC) 플래그를기초로하여간단한 USART 수신기능을나타낸다. void USART_Transmit(unsigned char data) /* Wait for data to be received */ while (!(UCSRA & (1<<RXC))); /* Get and return received data from buffer */ return UDR; UCSZ=7 인경우, 즉 9 비트데이터인경우에는 9 번째비트는 UCSRB 레지스터의 RXB8 비트가 1 로설정되어있어야한다. 다음예제는 9 번째비트를수신하는 과정을나타낸다. unsigned int USART_Receive(void) unsigned char status, resh, resl; /* Wait for data to be received */ while (!(UCSRA & (1<<RXC))); /* Get status and 9 th bit, then data */ /* from buffer */ status = UCSRA; resh = UCSRB; resl = UDR; /* If error, return 1 */ if (status & (1<<FE) (1<<DOR) (1<<PE) return 1; /* Filter the 9 th bit, then return */ resh = (resh>>1) & 0x01; return((resh<<8) resl);

10 USART 수신기는수신의상태를나타내는 Receive Complete(RXC) 플래그가있어서수신버퍼에아직읽지않은데이터가있는지를나타낸다. 아직읽지않은데이터가있으면 1 로표시되고, 수신버퍼가비어있는경우에는 0 으로표시된다. UCSRB 레지스터의 Receive Complete Interrupt Enable(RXCIE) 비트가 1 로 Set 되면, USART Receive Complete 인터럽트가수행된다. 물론전체인터럽트는수행되어있어야만한다. 수신완료인터럽트가수행되면, 수신완료인터럽트서비스루틴에서 RXC 플래그를클리어하기위해서는 UDR에있는수신데이터를읽으면된다. 그렇지않으면인터럽트가종료하여도새로운인터럽트가발생하게된다. USART의수신기는 Frame Error(FE), Data OverRun(DOR), Parity Error(PE) 등의세가지에러플래그가있으며, UCSRA를읽어서접근할수있다. FE 플래그 PE 플래그 DOR 플래그 수신버퍼에저장된다음프레임의첫정지비트의상태를나타낸다. 정지비트가정상적으로읽혀지면 FE 플래그는 0 으로된 다. 수신버퍼에있는다음프레임에패리티에러가발생한경우에표 시된다. 수신버퍼가꽉찬경우에데이터의손실상태를나타낸다. DOR은수신버퍼가가득찬경우, 수신시프트레지스터에새로운대기문자가있는경우, 새로운시작비트가검출된경우에발생된다. 6) 멀티프로세서통신모드 UCRSA 레지스터의 Multi-processor Communication Mode(MPCM) 비트를 1 로설정하여멀티프로세서기능을사용할수있다. 멀티프로세서통신모드를 1개의마스터 MCU가여러개의슬래이브 MCU에게특정주소를전송함으로써 1개의슬레이브를지정하여데이터를전송하는동작모드이다. 만약에수신기가 5~8 비트로설정된데이터프레임으로설정되어있으면, 첫번째정지비트는프레임이데이터정보인지어드레스정보인지를가리킨다. 만약수신기가 9비트로설정되어있으면, 9번째비트 (RXB8) 는어드레스또는데이터를표시하게된다. 프레임지정비트 ( 첫번째비트또는 9번째비트 ) 가 1 로설정되면프레임은어드레스정보를나타내고, 0 으로설정하면데이터프레임이다. 다음순서에의해서진행된다. w 송신을담당한마스터 MCU 는특별한모드설정이필요없고, 여러개의수 신을하는슬레이브 MCU 는 UCSRA 레지스터의 MPCM 비트를 1 로설정 하여어드레스프레임이수신되기를기다린다.

11 w w w w 마스터 MCU는 8개의데이터비트에지정하려고하는어드레스와 UCSRA 레지스터의 TXB8을 1 로만든어드레스프레임을송신한다. 모슬레이브 MCU는이어드레스프레임을수신하여자신에게해당되는어드레스인지를판별하, 이것이자신의어드레스인것을확인한 1개의슬레이브 MCU만이 MPCM비트를 0: 으로클리어하여이후에전송될데이터프레임을수신할수있도록한다. 나머지의선택되지않은슬레이브 MCU들은계속하여 MPCM비트를 1 로유지하여어드레스프레임이수신되기를기다린다. 선택된슬레이브 MCU는데이터프레임을수신하고이것이완료되면다시 MPCM비트를 1 로설정하여어드레스프레임의수신대기상태로진입하게된다. 7) USARTn 레지스터 Atmega128에는두개의 Universal Synchronous and Asynchronous serial Receiver and Transmitter(USART) 가있다. 구분은 0 과 1 로하고있으며각각의 USART는독립적인송수신버퍼를가지고있고하드웨어적으로분리되어있지만 UDR이라는명칭은동일하게사용된다. 우선 USART에대해이해하기전에 UART 비동기통신에대해서이해하여야한다. 일반적인통신은 Serial방식과 Parallel방식의통신방식이있다. 시간을기준으로데이터가순차적으로전송되면 Serial방식이고, 같은시간에한번의데이터가여러개의전송선로를통해서전송되면 Parallel 이다. 이때어떤것이좋다고는말할수없다. 일반적으로 PC에서사용되는 USB COM 단자, SATA등과같은방식은 Serial방식이고 CPU에서 RAM과같은곳의데이터를읽기위한선로는여러개의선로에데이터가동시에전달되고, 일반적으로부르는 BUS방식은 Parallel방식이다. 두가지통신방식중 ATmega128에서사용할통신방식은 Serial방식이다. 시리얼통신방식에서도두가지의방식이세부적으로나누어진다. 첫번째동기통신과비동기통신으로나누어지는데동기통신방식은데이터가전송될때전기적으로신호선에신호가전달될때는 Analog신호가전송되는것이아니라 Digital신호를전달하는방식을사용한다. 이때 On과 Off의신호의조합으로 8bit를전송하여데이터를만드는방법과 16bit의데이터를조합하여데이터를만드는방법등과같은여러가지방법적은구분으로나누어진다. 이때 On과 Off신호가송신측과수신측에서언제보내는지확인할수있도록타이밍을만들어주는선로가존재하여신호를보내주면동기방식의통신이되고, 수신측에서언제들어올지모르는데이터를기다리며송신측에서는시간에상관없이데이터를송신하면

12 비동기받는측에서는언제올지모르는통신을사용하게된다. 비동기와동기의가장큰차이는동기는데이터선외에추가적으로동기를맞춰주는전송선로가존재하게되고일반적인컴퓨터에서사용하는 Dsub-9pin의경우동기를맞춰주는 PIN이할당되어있다. 그러면비동기통신방법에서의문이발생될것이다언제데이터가수신될지모르는과정에서어떻게신호를잡아낼수있을까항상그신호만감지하고있는것이아닌데라고생각이들것이다. 이러한에러를피하기위해서소프트웨어적인방법이아닌하드웨어적인방법을마이크로컨트롤러에서는사용된다. 일반적으로비동기통신방식의가장기본적인방법으로양방향통신조건에서 Tx, Rx, GND 세가지의신호선연결만으로통신을수행한다. 통신의발전과전송데이터증가에따른신호선의전압레벨및조건이변했을뿐기본적인바탕은위의방법만으로충분하다. 비동기통신방법에서가장중요한요소는전송통신의규약이다. 일반적으로사용하는데이터형태는전송을알리는스타트비트 1bit 데이터 8bit Stop비트, 1bit등과같은형태로전송된다. 실제로 8bit를전송하기위해서 10비트를사용하고전송된데이터의결함을검사하기위해서결함검사를목적으로한패리티비트를추가적으로넣는경우, Stop비트는 2bit를넣어다양한형태로데이터전송의무결성을입증할만한정보들을포함하여보낸다. 이같은이유는고속으로많은데이터를송수신할때믿을만한정보인가를판단하여사용유무를검사하기위함이다. 하지만일반적으로 8bit를한개씩전송하는경우는없다고생각해도무방하다. 시스템의용도와크기에따라다르지만 frame 이라는부르는형태의데이터조합을순차적으로보내어그안에서다시시작을알리는바이트형태의데이터와데이터무결성을검사하기위한 checksum, CRC코드등을추가하여무결성을검사한다. ATmega128에서 TxD핀에출력을내보내기위해서는전송 UDR 버퍼에보내고자하는데이터를쓰면된다. 쉬프트레지스터에서시간에따라자동적으로신호를전송해준다. 이같은기능은내부에하드웨어적으로수행되며, 소프트웨어에서는 UDR에단순히보내고자하는데이터를쓰기만하면된다. 이때내부에서패리티비트제너레이터가있어설정에따라자동적으로계산해서출력을구성한다. 반대로수신할때는마이크로컨트롤러가기능을수행해도수신측에서하드웨어적으로신호를검출한다. 신호검출은전송속도와상관관계를가지며, 수신측과송신측은송수신속도를알고있어야만정확한데이터를검출할수있다. RxD포트를통해서신호 (On, Off) 가들어오게되고, 이때스타트비트데이터패리티비트등과같은신호를검출하여수신쉬프트레지스터로한비트씩전송하게되고, 이때규약에따라다르지만 8비트설정 7비트 6비트등과같이설정된비트가전송이완료되면, 인터럽트가발생되거나수신완료레지스터를검색하여사용자로하여금수신이완료되었음을확인할수있다. 예제를이용하여사용될통신방식은비동기, 양방향통신을사용하고, Start비트는 1비트 Stop비트, 1비트패리티

13 비트는 0, 데이터크기 8bit, 통신속도는 bps으로가장범용적으로사용하는통신방식을구현해보도록하겠다. 우선그림 8.6과같이레지스터를살펴보면 UDRn 레지스터는데이터를송신수신할때사용되는레지스터로데이터를입력시키는데사용된다. [ 그림 8.6] UDRn 레지스터 그림 8.7과같이 UCSRnA 레지스터는사용중인 UART기능에서버퍼의송신및수신이완료되었는지에대한상태를읽을수있다. 특히인터럽트방식을쓰지않고수신상태를확인하기위해서반드시확인할수있는레지스터이며, 송신시버퍼에데이터가시간차를가지고전송되어지기때문에전송이완료되지않은상태에서데이터를다시 UDRn에다시쓰게되면버퍼에이중으로쓰이게되고전송시데이터가제대로전달되지않기때문에송신시에도반드시체크해야되는레지스터다. [ 그림 8.7] UCSRnA 레지스터 그림 8.8과같이 USCRnB 레지스터는통신사용시발생되는인터럽트를제어할수있다. 송신완료인터럽트, 수신완료인터럽트를설정할수있도록비트 7번과 6 번에설정할수있고설정값은 1 로설정함으로서사용가능하다반드시인터럽트사용을설정해놓으면 AVR Studio 4에서지원하는 WinAVR에 signal.h 파일인헤더파일을참조하여인터럽트벡터영역의함수를추가해야한다. 만약함수가없을경우마이크로컨트롤러는동작을멈추고정지하게된다. [ 그림 8.8] UCSRnB 레지스터

14 TXENn와 RXENn비트는송수신에대해각각사용이가능하게할것인가에대한사용성을결정하는레지스터비트이다. 송수신은각각의설정이별개로가능하기때문에송신만쓰는경우, 수신만쓰는경우와두가지를모두쓰는경우등에대해서설정할수있다. 그외에특별히비트 1(RXB8n) 은 9비트송신시 UDRn은 8비트레지스터이기때문에 8번째비트를읽어낼수없다. 그래서특별히 USCRnB의비트 1(RXB8n) 을읽으면수신된 8번째비트를읽어낼수있다. 이와반대로 0번비트 (TXB8n) 는 9비트전송시 8번째비트를전송할버퍼가없기때문에반대로 USCRnB의 0번에써주고전송하면된다. 이때수신시 UDRn을먼저읽고다음으로 USCRnB의 1번비트를읽어야하며, 송신시 USCRnB의 0번비트에데이터를먼저쓰고 UDRn에써야전송이된다. 그림 8.9와같이 UCSRnC 레지스터는상태제어용레지스터이다. 위에서언급한동기 / 비동기, Stop비트, 패리티비트, 전송데이터비트수등을설정할수있다. [ 그림 8.9] UCSRnC 레지스터 그림 8.10 과같이 UMSELn(USARTn Mode Select) 비트는그림 8.6 과같이 1 이면 USARTn 모듈을동기전송모드로설정하고, 0 이면비동기전송모드로 설정한다. [ 그림 8.10] UMSELn Bit 설정 UPMn1, 0(Parity Mode) 비트는그림 8.11과같이 1 로설정하면패리티를발생시키고검사를할수있다. 송신기는자동적으로각프레임의송신데이터에패리티비트를더하여송신한다. 수신기는 UPM0 비트와수신된데이터를비교한다. 만약에오류가발생하면 UCSRnA 레지스터의 PE 플래그가 1 로 Set 된다.

15 [ 그림 8.11] UPMn Bit 설정 USBSn(Stop Bit Select) 비트는그림 8.12 와같이 0 이면 USARTn 모듈에서데 이터포맷을구성하는 Stop 비트를 1 개로설정하고, 1 이면 Stop 비트를 2 개로설 정한다. [ 그림 8.12] USBSn Bit 설정 UCPOLn 비트는그림 8.13 과같이설정한다. [ 그림 8.13] UCPOLn Bit 설정 UCSZn1, 0(Chracter Size) 비트는그림 8.14 와같이 UCSRnB 레지스터의 UCSZn2 비트와함께전송문자의데이터비트수를설정하는데사용된다. [ 그림 8.14] UCSZn Bit 설정

16 마지막으로그림 8.15와같이 UBRRnL, UBRRnH 레지스터이다. 비동기통신에서가장중요한요소를설정하는 Baud Rate Register이다. 즉통신속도를정의하는레지스터로 H는상위 L은하위를나타내고총길이로보면 16비트레지스터라고할수있다. [ 그림 8.15] UBRRnL, UBRRnH 레지스터 많은사용자들이이러한기능을먼저설명하고나면복잡해지기시작한다. 많은기능중에사용자가원하는기능은단순할때가많기때문이다. 시리얼통신도이와마찬가지일것이다. 일반적인통신에서 Stop 1비트패리티는경우에따라쓰이는곳과쓰지않는곳이있고, 데이터크기는대부분의많은프로그램에서 8비트의데이터크기를가진다. 이때자주쓰이는통신속도는 9600bps와 38400bps, bps 등과같이몇가지만주로쓰이기때문이다. 9600bps이하로전송하면통신의속도가느리기때문에자주쓰이지않는다. bps 란초당보내는비트수이며, 가령 Start 1비트, Data 8비트, Stop 2비트, Parity 1비트를합치면 12비트가된다. 이때 9600bps로전송하면초당 800개의 8비트데이터를보낼수있다. 하지만 bps로전송시 9600개의 8비트데이터를전송한다. 최근에쓰이는통신속도및데이터크기에비해서작은용량이지만이정도로도많은시스템에서필요한정보는전달가능한속도이다 bps이상전송속도를증가하게되면전송선로길이에따른감쇠에따른문제와상관관계가발생되지만, 데이터가손실되거나왜곡등과같은변형의문제와관련이발생하여통신상의문제가발생할수있다. 자그럼본격적으로역으로프로그램을작성해보도록하자. 설정은아래와같다. w 시리얼통신포트0 사용. w 전송속도 bps. w Stop 비트 1 비트. w 패리티비트없음.

17 w 데이터비트 8비트. w 송수신동시에가능. w 송신인터럽트사용안함, 수신인터럽트사용함. 위의사실을바탕으로프로그램을해보도록하겠다. 우선통신속도설정을먼저하도록하자통신속도는 bps이다. 실제로통신속도또한메인클록주파수와상관관계를가지고있다. 그만큼메인클록주파수는중요함을한번더상기하도록하자. 이때계산방법은그림 8.16과같이계산하는방법이있지만특별한경우범용으로사용하지않는속도의경우계산하여연결해야하지만범용적으로사용하는속도는이미다계산을해서테이블화해서제공된다. [ 그림 8.16] 보율설정수식표 [ 그림 ] 자주사용되는주파수에대한 UBRR 값

18 [ 그림 ] 자주사용되는주파수에대한 UBRR 값 (1) [ 그림 ] 자주사용되는주파수에대한 UBRR 값 (2) 보율설정은메인클록주파수에따라서설정값이달라지며, Timer/Counter와같이계산하였을때카운터값이소수점자리에오차가발생하였던것과동일하게통신에서도메인클록주파수에따라송수신간의에러가그림 8.14와같이존재한다. 통신의에러가발생하지않도록 CRX10에서는 MHz라는클록을사용하게된이유이다.

19 그림 8.17에서확인한봐와같이 bps 사용시 16MHz에서도 -3.5% 라는에러가존재한다. 통신에서설계상의에러율은데이터가많으면많을수록더많은에러를발생시킨다. 그렇기때문에완벽한통신을위해서는 Error가 0% 인영역에서사용하는것이마이크로컨트롤러를사용하여통신을하게되는기본동작에서최종적으로에러를줄일수있는요소로작용한다. [ 그림 8.17] 일반적으로사용되는발진기주파수에대한 UBRR 설정값과오차율 MHz에서 bps를전송할때 UCSRnA의 1번비트 (U2Xn) 설정값에따라서 UBRR의값이변하게된다. U2Xn을 0 으로설정하면 UBRR에 7 을 U2Xn에 1 로설정시 UBRR에 15 로설정해야한다. 테이블을보고간단히값을대입해서입력만시키면된다. 이때표의값은 10진수이다. UCSR0A레지스터는 5번비트 (UDRE0) 을 1 로설정해주어야한다. 기본적으로리셋이후에초기화되지만확인차원에서한번더 1 로설정해주자. UCSR0A 는 0x20으로설정하고, UCSR0B는아래와같이설정할수있다. Bit7 RXCIEn : RX Complete Interrupt Enable 수신완료시인터럽트사용여부. Bit6 TXCIEn : TX Complete Interrupt Enable 송신완료시인터럽트사용여부. Bit4 RXENn : Receiver Enable 수신기능을사용여부. Bit3 TXENn : Transmitter Enable 송신기능사용여부.

20 UCSR0B는위 4가지비트에대해서체크해준다. 하지만 Bit6번은송신시인터럽트는사용하지않는다고했기때문에설정하지않는다. UCSR0B은 0x98로설정한다. 이제마지막으로 UCSR0C을설정하여야한다. UCSR0C는아래와같이설정할수있다. bit6 bit5~4 bit3 bit2~1 UMSELn: USART Mode Select. UPMn1:0 : Parity Mode. USBSn : Stop Bit Select. UCSZn1:0 : Character Size. bit6의경우 0 일때 Asynchronous Operation 비동기통신으로동작하고 1 일때 Synchronous Operation 동기통신으로동작한다. 이미언급했듯이비동기통신으로설정하기때문에 0 으로설정된다. bit5번과 bit4번은패리티비트를체크한다. 패리티비트란보내는데이터에서이진수로계산하였을때 1의개수가짝수나홀수로개수를조정하여마지막에 1bit를더해서전송하는방식이다. 만약 0x0a를전송하고패리티를짝수패리티로설정할경우 0x0a를이진수로변경하면 0b 으로 1의개수가 2개이므로짝수가된다. 이때패리티는 0 으로설정된다. 만약 0x1a일경우이진수로표기하면 0b 으로 1의개수가 3개가된다. 이때패리티는짝수를맞추기위해서마지막에 1을더붙여서보내게된다. 현재에는패리티를쓰지않기때문에 bit5번과 bit4번은각각 0 으로설정한다. bit3은 Stop비트와관련된비트이다. Stop비트는데이터전송이완료된후끝에 1 을붙여서보내는통신데이터전송완료를나타내는비트로 1비트를전송하는방법과 2비트를전송하는방법두가지로나누어진다. Stop비트는 1비트를한다. 그러므로 0 이된다. bit2~1은 UCSR0B의 bit2와연결된다. 표를보면전송할데이터의비트수를정의할수있다. 특별한경우를제외하고는 8bit를거의대부분에서장치나시스템에서사용된다. UCSZ12에는 0, UCSZ11에는 1, UCSZ10에는 1 을설정한다. 최종적으로 UCSR0C에 0x06으로설정한다. 예제를통해실질적으로동작해본다. 아래와같이프로그램을입력한다 #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> SIGNAL(SIG_UART0_RECV)

21 설명 usinged char uart_buffer; uart_buffer = UDR0; PORTB = ~PORTB; void main(void) cli(); DDRE = 0x20; DDRB = 0x80; UBRR0H = 0; UBBR0L = 7; UCSR0A = 0x20; UCSR0B = 0x98; UCSR0C = 0x06; sei(); while(1) while((ucsr0a & 0x20) == 0x00); UDR0 = 0x30; 5. : 시리얼통신데이터수신이완료되면인터럽트가요청되고함수로프로그램이점프하여 안의구문을수행하게된다. 7. : 캐릭터형의 uart_buffer의지역변수를할당한다. 8. : uart_buffer 의변수에 UDR0의데이터를옮긴다. 이때수신완료와관련된레지스터들이초기화되어새로운데이터를수신할수있다. 만약이때다른데이터가수신되어옮기기전에데이터가수신되면데이터 Overflow 레지스터비트가 Set 되어검사를할수있다. 인터럽트방식을사용하였기때문에수신이완료된상태에서데이터를바로옮기기때문에검사를할필요가없다. 9. : PORTB의출력을반전하여출력한다. 14. : DDRE에 0x20을설정하였다. USART포트 RXD0 가 PORTE 0번에 TXD0 가 PORTE 1번에연결되어있기때문에 PORTE 0번은입력으로 PORTE 1번은출력으로설정하였다. 15. : DDRB 에 0x80을설정하여 PORTB 7번에연결되어있는 LED를활성화한다.

22 16, 17. : USART0 를사용하기위하여제일먼저 Baud Rate를설정한다. 설정값은 MHz를기준으로 UCSR0A의 1번비트 U2X1의설정값을 0 으로설정하였고, 표에의해서 10진수 7이라는값을하위바이트에설정한다. 만약설정표에서 400이라는값을입력해야한다면, 16진수로바꾸어상위값은 UBBR0H 에하위값은 UBBT0L 에설정해야한다. 18. : UCSR0A에 0x20을설정하여 UDRE0에 1 로설정하여 UDR0에데이터가없음을설정한다. 19. : UCSR0B 에 0x98을설정하여수신완료시인터럽트사용, 송수신을동시에사용하겠다고설정한다. 20. : UCSR0C 에 0x06을설정하여비동기통신, 패리티비트없음, Stop비트 1비트, 전송데이터 Size 8비트로설정한다. 24. : while문을사용하여루프조건을발생시킨다. 발생조건은 UCSR0A와 0x20을엔드연산하여 0 과같으면참인조건으로루프를수행하게되고만약참이아니면루프를빠져나오게된다. 이렇게조건을걸어서검사하는이유는마이크로프로세서수행시간이빠르기때문에 UDR0에데이터를중복해서써버리면데이터가전송하기전에 UDR0의값을바꿔버리는현상으로데이터가전송중에겹쳐버리게된다. 이러한점을없애기위해서사용자가데이터를검사하여전송할수있도록 UCSR0A 의 5번비트가전송이완료되고 UDR0가비어있으면 1 로설정되게한다. 바로이점을이용하여 UDR0에데이터를쓰고, 전송이되기전까지기다리거나프로그램에서 UDR0 에데이터를써야할때다른쪽프로그램에서만약데이터를전송하기위해서쓴상태에바로써버리면중복되어서온전한데이터전송이불가능하여검사를한다. 25. : 검사를마치고 UDR0에 0x30이라는데이터를전송하라는의미이다. 이때 UDR0에는데이터가존재하고전송쉬프트레지스터에서전송을메인클록동기에맞춰서스스로전송하고사용자의프로그램은다른작업을전송중에수행할수있으며, 전송이완료되면인터럽트를발생시켜수신과마찬가지로특정함수로빠뜨릴수있지만여기에서는인터럽트를발생시키지않고전송할때검사를하는방법을사용하여전송하였다. 0x30은 ASCII코드에서숫자 0 을의미한다. USART0을이용하여레지스터를설정하고동작시켜보았다. UDR0에 0x30이라는데이터를전송하였지만전송상대가 PC가될수도있고, 다른마이크로컨트롤러가될수도있다. 기본적으로 C언어는 ASCII코드를이용하여문자를전송할수있는시스템구비하였다. 만약 ASCII데이터전송목적이아니라면사용자가원하는데이터를전송하여도상관없지만문자를전송해야한다면, ASCII데이터를전송하여데이터를보내야한다. 일반적으로 PC에서사용되는방식은 ASCII코드방식으로텔넷이

23 나모뎀등과통신을할때일반적인 16진수의 HEX데이터를전송하면이상한문자로깨져서나오게됨을알수있다. ASCII코드는부록을참조한다. USART0번의통신을이용하여컴퓨터에서 'b' 를입력받을때마다 LED를 On, Off 를반복하는프로그램을아래조건에맞추어전프로젝트의소스를주석처리한후에작성한다 w w w w w w w 시리얼통신포트0 사용전송속도 bps 스탑비트 1비트패리티비트없음데이터비트 8비트송수신동시에가능송신인터럽트사용안함, 수신인터럽트사용함 #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> SIGNAL(SIG_UART0_RECV) usinged char uart_buffer; uart_buffer = UDR0; if(uart_buffer == ' b') PORTB = ~PORTB; void main(void) cli(); DDRE = 0x20; DDRB = 0x80; UBRR0H = 0; UBBR0L = 7; UCSR0A = 0x20;

24 설명 UCSR0B = 0x98; UCSR0C = 0x06; sei(); while(1) 5. : USART0 가수신이완료되어인터럽트가발생하면이곳으로점프하여 의프로그램이수행된다. 7. : 캐릭터형태의변수 uart_buffer를만든다. 8. : 만들어진캐릭터형변수에 UDR0의값을이동시킨다. 9. : 만약 uart_buffer 에캐릭터형 b 와같다면아래 를수행한다. 데이터수신시 HEX값으로 8비트를수신하지만 C언어에서 ASCII값을받아들이고문자를쓸수있도록 를써서문자를검색하도록하였다. 이때 b는소문자영어 b이므로 0x63이라는숫자로대입된다. 11. : PORTB의출력을반전시킨다. 17. : DDRE에 0x20을설정한다. USART포트 RXD0 가 PORTE 0번에 TXD0 가 PORTE 1번에연결되어있기때문에 PORTE 0번은입력으로 PORTE 1번은출력으로설정한다. 18. : DDRB 에 0x80을설정하여 PORTB 7번에연결되어있는 LED를활성화한다. 19, 20. : USART0 을사용하기위하여제일먼저 Baud Rate를설정한다. 설정값은 MHz를기준으로 UCSR0A의 1번비트 U2X1의설정값을 0 으로설정하였고, 표에의해서 10진수 7이라는값을하위바이트에설정한다. 만약설정표에서 400이라는값을입력해야한다면, 16진수로바꾸어상위값은 UBBR0H 에하위값은 UBBT0L 에설정해야한다. 21. : UCSR0A 에 0x20을설정하여 UDRE0에 1 로설정하여 UDR0에데이터가없음을설정한다. 22. : UCSR0B 에 0x98을설정하여수신완료시인터럽트사용, 송수신을동시에사용하겠다고설정한다. 23. : UCSR0C에 0x06을설정하여비동기통신, 패리티비트없음, Stop비트 1비트, 전송데이터 Size 8비트로설정하였다. 응용예제로 1 초마다동작하는타이머를 Timer/Counter0 서비스를이용해만들고, 매 1 초일때모니터상에 1second 라는문구를발생시킨다. 이때 USART 설정은 아래기준에따른다. w 시리얼통신포트 0 사용

25 w w w w w w 전송속도 bps 스탑비트 1비트패리티비트없음데이터비트 8비트송수신동시에가능송신인터럽트사용안함, 수신인터럽트사용함 #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> unsigned int time_interval; SIGNAL(SIG_UART0_RECV) unsigned char uart_buffer; uart_buffer = UDR0; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; time_interval++; int main(void) cli(); DDRE = 0x20; UBRR0H = 0; UBBR0L = 7; UCSR0A = 0x20; UCSR0B = 0x98; UCSR0C = 0x06; TCCR0 = 0x06; TCNT0 = 0xff - 115; sei(); TIMSK = 0x01;

26 29. while(1) while(time_interval <= 500); 32. while((ucsr0a & 0x20) == 0x00); 33. UDR0 = '1'; // while((ucsr0a & 0x20) == 0x00); 35. UDR0 = 's'; // while((ucsr0a & 0x20) == 0x00); 37. UDR0 = 'e'; // while((ucsr0a & 0x20) == 0x00); 39. UDR0 = 'c'; // while((ucsr0a & 0x20) == 0x00); 41. UDR0 = 'o'; // while((ucsr0a & 0x20) == 0x00); 43. UDR0 = 'n'; // while((ucsr0a & 0x20) == 0x00); 45. UDR0 = 'd'; 46. time_interval = 0; : time_interval 이라는 int 형변수를만든다. 6. : USART0 수신완료시수신인터럽트발생하고, 점프하여 안의수행한다. 11. : Timer/Counter0 서비스인터럽트발생시수행중문작업을중단하고 안을수행한다. 14. : time_interval 값을증가시킨다. 20~24. : 시리얼통신비동기 bps 의속도 Stop비트1 비트패리티비트없음데이터크기 8비트, 송수신동시에사용, 수신인터럽트사용의설정이다. 25~28. : Timer/Counter0 을 256분주에카운터값 256으로설정하여 2ms의타이설머카운터이벤트를 TIMSK에 0x01로설정하여활성화한다. 명 31. : time_interval 의값이 500이하일때참조건이므로루프를수행한다. 하지만 500과같거나높아지면거짓의조건이되므로아래프로그램을수행한다. 500이라는 time_interval 은타이머서비스인터럽트루틴발생시 11번으로점프하고 14번에서증가한다. 즉타이머서비스인터럽트루틴에서는증가만시키고메인함수내의 while문에서검사한다. 32. : USART0 의전송버퍼 UDR0의데이터를쓸수있는지검사한다. 33. : UDR0에 1 이라는 ASCII값을써준다. 코드값은 0x31이다. 34. : USART0 의전송버퍼 UDR0의데이터를쓸수있는지검사한다. 현재조

27 건에서는 33번에서 UDR0에데이터를쓰고바로내려왔기때문에검사조건이초기에는참으로루프에머물게될것이다. 하지만 1 의전송이완료되면검사조건이거짓이되면서아래구문을수행한다. 35. : UDR0에 s 이라는 ASCII값을써준다. 코드값은 0x73이다. 36. : USART0 의전송버퍼 UDR0의데이터를쓸수있는지검사한다. 37. : UDR0에 e 이라는 ASCII값을써준다. 코드값은 0x65이다. 38. : USART0 의전송버퍼 UDR0의데이터를쓸수있는지검사한다. 39. : UDR0에 c 이라는 ASCII값을써준다. 코드값은 0x63이다. 40. : USART0 의전송버퍼 UDR0의데이터를쓸수있는지검사한다. 41. : UDR0에 o 이라는 ASCII값을써준다. 코드값은 0x6f이다. 42. : USART0 의전송버퍼 UDR0의데이터를쓸수있는지검사한다. 43. : UDR0에 n 이라는 ASCII값을써준다. 코드값은 0x6e이다. 44. : USART0 의전송버퍼 UDR0의데이터를쓸수있는지검사한다. 45. : UDR0에 n 이라는 ASCII값을써준다. 코드값은 0x64이다. 46. : time_interval 값을 0 으로초기화하여, 다음또메인함수의루프가돌때다시 1초를만들어주기위한시간을검사할수있도록시간을초기화해준다. 나. 하이퍼터미널을이용하여로봇제어하기 하이퍼터미널이란프로그램은 Serial 통신을지원하며 TCP/IP도지원한다. 윈도우기반의 C++ 또는 C# 으로통신프로그램을개발하여로봇과의통신테스트를진행하지만먼저간단한기본적인테스트는보통하이퍼터미널을이용한다. Window XP OS는하이퍼터미널이기본프로그램으로등록되어있어바로사용할수있지만 Window 7에서는제공하지않아외부에서다운받아사용한다. 로봇을사용하기에앞서먼저준비해야할것은 USB To Serial 케이블또는사용자의컴퓨터에 Serial 단자가존재한다면 Serial To Serial 케이블을준비하여로봇에연결한다. 단, 그림 8.18과같이 Serial 단자는수놈이어야한다. [ 그림 8.18] Serial 단자

28 하이퍼터미널프로그램을실행하면그림 8.19 와같이나타나며, 로봇과커넥션하 기위해커넥션이름을입력한다. [ 그림 8.19] 하이퍼터미널프로그램 그림 8.20 과같이현재연결된 Serial 케이블의 ComPort 를선택하고통신속도외 에설정값을선택하여 확인 버튼을클릭한다. [ 그림 8.20] 하이퍼터미널프로그램커넥션설정 만약연결된케이블의 ComPort 를모른다면그림 8.21 과같이오른쪽클릭한다. [ 그림 8.21] 내컴퓨터오른쪽클릭

29 다음으로그림 8.22 와같이 장치관리자 를클릭한다. [ 그림 8.22] 내컴퓨터오른쪽클릭 장치관리자를보면포트 (COM & LPT) 가있으며, 활성화시키면그림 8.23 과같 이나타난다. CRX10 에는블루투스가장착되어있어컴퓨터에블루투스동글을연결 하여사용해도무방하다. 블루투스동글을이용할시 유선케이블을이용할시 [ 그림 8.23] 내컴퓨터오른쪽클릭 그림 8.24 와같이연결이완료된모습을볼수있다. [ 그림 8.24] 내컴퓨터오른쪽클릭

30 간단한 Serial 통신예제를이용하여로봇을제어해보자. 1) 활용실습 Q : 8.1_ 문자 A 를하이퍼터미널출력창에출력하기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> volatile unsigned char u8_make_time_var; unsigned char u8_usart_receive_data; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial() DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00;

31 void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; int main(void) unsigned char uartdata; cli(); port_initial(); basic_timer_initial(); uart_initial(); sei();

32 make_time(); make_time(); make_time(); uartdata='a'; while(1) usart_tx_data(uartdata); make_time(); Q : 8.2_ 3 개의 PSD 센서의데이터를하이퍼터미널에출력하기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> volatile unsigned char u8_make_time_var; unsigned char u8_usart_receive_data; unsigned char adc_result[3]; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0;

33 void port_initial() DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void adc_initial(void) ADCSRA = 0x86; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data;

34 void adc_read(void) ADCSRA &= 0x7f; ADMUX = 0x20; ADCSRA = 0xc0; while((adcsra & 0x10)!= 0x10); adc_result[0] = ADCL; adc_result[0] = ADCH; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; int main(void) unsigned char uartdata; cli(); port_initial(); basic_timer_initial(); uart_initial(); sei(); make_time(); make_time(); make_time(); uartdata=','; while(1) adc_read(); usart_tx_data(adc_result[0]); usart_tx_data(uartdata); usart_tx_data(adc_result[1]); usart_tx_data(uartdata);

35 usart_tx_data(adc_result[2]); usart_tx_data(uartdata); make_time(); Q : 8.3_ PSD 센서의데이터를 Cm 로변환하여하이퍼터미널출력창에출력 하기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> volatile unsigned char u8_make_time_var; unsigned char u8_usart_receive_data; unsigned char adc_result[3]; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial() DDRA = 0xff; DDRB = 0xf7;

36 DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void adc_initial(void) ADCSRA = 0x86; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void adc_read(void) ADCSRA &= 0x7f;

37 ADMUX = 0x20; ADCSRA = 0xc0; while((adcsra & 0x10)!= 0x10); adc_result[0] = ADCL; adc_result[0] = ADCH; ADCSRA &= 0x7f; ADMUX = 0x21; ADCSRA = 0xc0; while((adcsra & 0x10)!= 0x10); adc_result[1] = ADCL; adc_result[1] = ADCH; ADCSRA &= 0x7f; ADMUX = 0x22; ADCSRA = 0xc0; while((adcsra & 0x10)!= 0x10); adc_result[2] = ADCL; adc_result[2] = ADCH; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; double PSDADC(double adc) double k, returnk; int k1; k = 5 * adc / 255; if (k >= 1.3) k1 = (int)(-(k ) * 14 / 1.8); else if (k >= 0.9 && k < 1.3)

38 k1 = (int)(-(k - 2.1) * 10 / 0.4); else if (k >= 0.5 && k < 0.9) k1 = (int)(-(k - 1.3) * 30 / 0.4); else if (k >= 0.4 && k < 0.5) k1 = (int)(-(k ) * 20 / 0.15); else k1 = 80; returnk = (double)k1; return returnk; int main(void) unsigned char uartdata; cli(); port_initial(); basic_timer_initial(); uart_initial(); sei(); make_time(); make_time(); make_time(); uartdata=','; while(1) adc_read(); usart_tx_data((int)psdadc(adc_result[0])); usart_tx_data(uartdata); usart_tx_data((int)psdadc(adc_result[1]));

39 usart_tx_data(uartdata); usart_tx_data((int)psdadc(adc_result[2])); usart_tx_data(uartdata); make_time(); Q : 8.4_ 로봇에장착된 4 개의버튼을 1, 2, 3, 4 로지정하여 버튼을눌렀을때하이퍼터미널출력창에출력하기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> volatile unsigned char u8_make_time_var; unsigned char u8_usart_receive_data; unsigned char u8_io_read; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial() DDRA = 0xff;

40 DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void adc_initial(void) ADCSRA = 0x86; void port_read(void) u8_io_read = PIND & 0xf0; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00);

41 UDR0 = tx_data; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; int main(void) unsigned char uartdata; cli(); port_initial(); basic_timer_initial(); uart_initial(); sei(); make_time(); make_time(); make_time(); uartdata='a'; while(1) port_read(); usart_tx_data(u8_io_read); make_time(); Q : 8.5_ 키보드에서 C 를입력하며로봇의도트매트릭스에서 C 를출력 하기 A : #include <avr/io.h>

42 #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> #include<util/delay.h> volatile unsigned char u8_make_time_var; unsigned char u8_usart_receive_data; unsigned char u8_io_read; #define dot_o 0 #define dot_x 1 #define dot_c 2 unsigned char ccc[8] = 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80 ; unsigned char row[3][8] = 0x3C,0x7E,0xC3,0xC3,0xC3,0xC3,0x7E,0x3C, 0x81,0xC3,0x66,0x3C,0x3C,0x66,0xC3,0x81, 0x3C,0x7E,0xC3,0xC3,0xC3,0xC3,0x66,0x66 ; void print(int n,int time) int i,l; for(l=0;l<time;l++) for(i=0;i<8;i++) PORTA=ccc[i]; PORTC=row[n][i]; _delay_ms(1); SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0;

43 void port_initial() DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void adc_initial(void) ADCSRA = 0x86; void port_read(void) u8_io_read = PIND & 0xf0;

44 void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; int main(void) unsigned char uartdata; cli(); port_initial(); basic_timer_initial(); uart_initial(); sei(); make_time(); make_time(); make_time(); uartdata='a'; while(1) if(u8_usart_receive_data=='c') print( dot_c, 500); make_time();

45 Q : 8.6_ 키보드의방향키중 W 를누르면로봇이전진하게하기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> #include<util/delay.h> volatile unsigned char u8_make_time_var; volatile unsigned int cnt; unsigned char adc_result[8]; unsigned char u8_usart_receive_data; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial() DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00;

46 void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void pwm_initial(void) TCCR1A = 0xa2; TCCR1B = 0x19; TCCR1C = 0x00; ICR1 = 200; OCR1A = 0; OCR1B = 0; OCR1C = 0; TCCR3A = 0xc2; TCCR3B = 0x1a; TCCR3C = 0x00; ICR3 = 1000; OCR3A = 500; OCR3B = 100; OCR3C = 0; void usart_tx_data(unsigned char tx_data)

47 while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void motor_r_foward(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x80; void motor_r_back(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x40; void motor_l_foward(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x08; void motor_l_back(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x10; void Motor_control_Forwards(unsigned char right, unsigned char left) motor_r_foward(); motor_l_foward(); OCR1A = right; OCR1B = left; void Motor_control_Backwards(unsigned char right, unsigned char left)

48 motor_r_back(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Left(unsigned char right, unsigned char left) motor_r_foward(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Right(unsigned char right, unsigned char left) motor_r_back(); motor_l_foward(); OCR1A = right; OCR1B = left; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; cnt++; int main(void) cli(); port_initial();

49 basic_timer_initial(); pwm_initial(); uart_initial(); sei(); make_time(); make_time(); while(1) if(u8_usart_receive_data=='w') Motor_control_Forwards(130,130); else Motor_control_Forwards(0,0); make_time(); Q : 8.7_ 키보드의방향키중 S 를누르면로봇이후진하게하기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> #include<util/delay.h> volatile unsigned char u8_make_time_var; volatile unsigned int cnt; unsigned char adc_result[8]; unsigned char u8_usart_receive_data;

50 SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial() DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06;

51 void pwm_initial(void) TCCR1A = 0xa2; TCCR1B = 0x19; TCCR1C = 0x00; ICR1 = 200; OCR1A = 0; OCR1B = 0; OCR1C = 0; TCCR3A = 0xc2; TCCR3B = 0x1a; TCCR3C = 0x00; ICR3 = 1000; OCR3A = 500; OCR3B = 100; OCR3C = 0; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void motor_r_foward(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x80; void motor_r_back(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x40;

52 void motor_l_foward(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x08; void motor_l_back(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x10; void Motor_control_Forwards(unsigned char right, unsigned char left) motor_r_foward(); motor_l_foward(); OCR1A = right; OCR1B = left; void Motor_control_Backwards(unsigned char right, unsigned char left) motor_r_back(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Left(unsigned char right, unsigned char left) motor_r_foward(); motor_l_back(); OCR1A = right; OCR1B = left;

53 void Motor_control_Right(unsigned char right, unsigned char left) motor_r_back(); motor_l_foward(); OCR1A = right; OCR1B = left; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; cnt++; int main(void) cli(); port_initial(); basic_timer_initial(); pwm_initial(); uart_initial(); sei(); make_time(); make_time(); while(1) if(u8_usart_receive_data=='s') Motor_control_Backwards(130,130); else

54 Motor_control_Forwards(0,0); make_time(); Q : 8.8_ 키보드의방향키중 A 를누르면로봇이좌로회전하게하기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> #include<util/delay.h> volatile unsigned char u8_make_time_var; volatile unsigned int cnt; unsigned char adc_result[8]; unsigned char u8_usart_receive_data; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial()

55 DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void pwm_initial(void) TCCR1A = 0xa2; TCCR1B = 0x19; TCCR1C = 0x00; ICR1 = 200; OCR1A = 0; OCR1B = 0; OCR1C = 0; TCCR3A = 0xc2;

56 TCCR3B = 0x1a; TCCR3C = 0x00; ICR3 = 1000; OCR3A = 500; OCR3B = 100; OCR3C = 0; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void motor_r_foward(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x80; void motor_r_back(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x40; void motor_l_foward(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x08; void motor_l_back(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x10;

57 void Motor_control_Forwards(unsigned char right, unsigned char left) motor_r_foward(); motor_l_foward(); OCR1A = right; OCR1B = left; void Motor_control_Backwards(unsigned char right, unsigned char left) motor_r_back(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Left(unsigned char right, unsigned char left) motor_r_foward(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Right(unsigned char right, unsigned char left) motor_r_back(); motor_l_foward(); OCR1A = right; OCR1B = left; void make_time(void)

58 while(u8_make_time_var <= 50) u8_make_time_var = 0; cnt++; int main(void) cli(); port_initial(); basic_timer_initial(); pwm_initial(); uart_initial(); sei(); make_time(); make_time(); while(1) if(u8_usart_receive_data=='a') Motor_control_Left(130,130); else Motor_control_Forwards(0,0); make_time(); Q : 8.9_ 키보드의방향키중 D 를누르면로봇이우로회전하게하기 A : #include <avr/io.h>

59 #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> #include<util/delay.h> volatile unsigned char u8_make_time_var; volatile unsigned int cnt; unsigned char adc_result[8]; unsigned char u8_usart_receive_data; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++; SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial() DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01;

60 void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void pwm_initial(void) TCCR1A = 0xa2; TCCR1B = 0x19; TCCR1C = 0x00; ICR1 = 200; OCR1A = 0; OCR1B = 0; OCR1C = 0; TCCR3A = 0xc2; TCCR3B = 0x1a; TCCR3C = 0x00; ICR3 = 1000; OCR3A = 500; OCR3B = 100; OCR3C = 0; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void motor_r_foward(void)

61 PORTE = PORTE & 0x3f; PORTE = PORTE 0x80; void motor_r_back(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x40; void motor_l_foward(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x08; void motor_l_back(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x10; void Motor_control_Forwards(unsigned char right, unsigned char left) motor_r_foward(); motor_l_foward(); OCR1A = right; OCR1B = left; void Motor_control_Backwards(unsigned char right, unsigned char left) motor_r_back(); motor_l_back(); OCR1A = right; OCR1B = left;

62 void Motor_control_Left(unsigned char right, unsigned char left) motor_r_foward(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Right(unsigned char right, unsigned char left) motor_r_back(); motor_l_foward(); OCR1A = right; OCR1B = left; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; cnt++; int main(void) cli(); port_initial(); basic_timer_initial(); pwm_initial(); uart_initial(); sei(); make_time(); make_time();

63 while(1) if(u8_usart_receive_data=='d') Motor_control_Right(130,130); else Motor_control_Forwards(0,0); make_time(); Q : 8.10_ 키보드의방향키를조이스틱으로활용하여로봇을자유롭게움직이 기 A : #include <avr/io.h> #include <avr/iom128.h> #include <avr/interrupt.h> #include <avr/signal.h> #include<util/delay.h> volatile unsigned char u8_make_time_var; volatile unsigned int cnt; unsigned char adc_result[8]; unsigned char u8_usart_receive_data; SIGNAL(SIG_OVERFLOW0) TCNT0 = 0xff - 115; u8_make_time_var++;

64 SIGNAL(SIG_UART0_RECV) u8_usart_receive_data = UDR0; void port_initial() DDRA = 0xff; DDRB = 0xf7; DDRC = 0xff; DDRD = 0x00; DDRE = 0xfb; DDRF = 0x00; DDRG = 0x00; void basic_timer_initial(void) TCCR0 = 0x06; TCNT0 = 0xff - 115; TIMSK = 0x01; void uart_initial(void) UBRR0H = 0; UBRR0L = 7; UCSR0A = (0<<RXC0) (1<<UDRE0); UCSR0B = 0x98; UCSR0C = 0x06; void pwm_initial(void) TCCR1A = 0xa2; TCCR1B = 0x19;

65 TCCR1C = 0x00; ICR1 = 200; OCR1A = 0; OCR1B = 0; OCR1C = 0; TCCR3A = 0xc2; TCCR3B = 0x1a; TCCR3C = 0x00; ICR3 = 1000; OCR3A = 500; OCR3B = 100; OCR3C = 0; void usart_tx_data(unsigned char tx_data) while((ucsr0a & 0x20) == 0x00); UDR0 = tx_data; void motor_r_foward(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x80; void motor_r_back(void) PORTE = PORTE & 0x3f; PORTE = PORTE 0x40; void motor_l_foward(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x08;

66 void motor_l_back(void) PORTG = PORTG & 0xe7; PORTG = PORTG 0x10; void Motor_control_Forwards(unsigned char right, unsigned char left) motor_r_foward(); motor_l_foward(); OCR1A = right; OCR1B = left; void Motor_control_Backwards(unsigned char right, unsigned char left) motor_r_back(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Left(unsigned char right, unsigned char left) motor_r_foward(); motor_l_back(); OCR1A = right; OCR1B = left; void Motor_control_Right(unsigned char right, unsigned char left) motor_r_back();

67 motor_l_foward(); OCR1A = right; OCR1B = left; void make_time(void) while(u8_make_time_var <= 50) u8_make_time_var = 0; cnt++; 2) 응용문제 1 시리얼통신을이용하여두개의숫자를 PC 에서전송하고, 마이크로컨트롤러 는두개의수신데이터의차를구해서다시 PC 에전송하기 2 로봇에장착된 4 개의버튼을 1, 2, 3, 4 로지정하여버튼을 눌렀을때하이퍼터미널출력창에출력하기 3 키보드에서 C 를입력하며로봇의도트매트릭스에서 C 를출력하기 4 키보드의 W 를누르면로봇이전진하게하기 5 키보드의 S 를누르면로봇이후진하게하기 6 키보드의 A 를누르면로봇이좌로회전하게하기 7 키보드의 D 를누르면로봇이우로회전하게하기 8 키보드의활용하여로봇을자유롭게움직이기

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The 6 th Lecture 유명환 ( yoo@netplug.co.kr) 1 2 통신 관련이야기 시리얼통신 관련이야기 INDEX 3 ATmega128 시리얼통신회로도분석 4 ATmega128 시리얼통신컨트롤러 (USART) 분석 5 ATmega128 시리얼통신관련레지스터분석 6 ATmega128 시리얼통신실습 1 통신 관련이야기 동기

More information

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR

UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ UL UART PORT1 void UAR IMC-V0.1 예제소스파일 1. UART 소스코드 (page 1-3) 2. Encoder 소스코드 (page 4-7) 3. ADC 소스코드 (page 8-10) UART.h #ifndef _UART_H_ #define _UART_H_ #define DIR_TXD #define DIR_RXD sbi(portd,4) cbi(portd,4) #define CPU_CLOCK_HZ

More information

Microsoft PowerPoint - Chapter 8_USART Serial Communication

Microsoft PowerPoint - Chapter 8_USART Serial Communication MEC382 마이크로프로세서응용및실습 USART Serial Communication Jee-Hwan Ryu School of Mechanical Engineering 통신방법 병렬통신 고속데이터전송이필요한곳에서이루어짐 여러개의라인에서동시에이루어짐 직렬통신 한라인에서이루어짐 데이터의송수신속도가느리다 라인수적고멀리까지통신 동기식, 비동기식있음 동기식 : 기준클럭인동기클럭라인과데이터송

More information

2주차: 입출력 제어 복습

2주차: 입출력 제어 복습 마이크로프로세서 응용및실습 ` 13-14 주차 : 직렬통신 (2) 한철수 전자공학과 2/35 직렬통신과병렬통신 직렬통신 한가닥의선으로송수신할데이터를차례대로전송하는방식 장점 : 통신선로가적기때문에경제적임 단점 : 전송속도가느림. 송수신약속이복잡해짐 병렬통신 여러가닥의선으로동시에여러개의데이터를전송하는방식 장점 : 전송속도가빠름 단점 : 직렬통신보다비쌈 3/35

More information

목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기

목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기 Chapter. 8 UART HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. UART와 RS232 개요 2. ATMega128의 USART 포트 3. UART로 Hello 보내기 4. UART로 PC와데이터주고받기 UART 와 RS232 개요 UART(Uiversal Asychroous Receiver/Trasmitter) 시리얼기반의통신방식으로일반적으로

More information

Microsoft PowerPoint - AVR 시리얼 통신.ppt [호환 모드]

Microsoft PowerPoint - AVR 시리얼 통신.ppt [호환 모드] AVR UART 통신 류대우 davidryu@newtc.co.kr 시리얼 (Serial) 통신이란? Serial 통신은하나의신호선을이용해서데이터를비트단위로보내는방식 8 비트비동기식통신콘트롤러 (UART : Universal Asynchronous Receiver Transmitter) 데이터는 LSB 부터 MSB 순으로데이터전송 Serial interface

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 8주차중간고사 ( 인터럽트및 A/D 변환기문제및풀이 ) Next-Generation Networks Lab. 외부입력인터럽트예제 문제 1 포트 A 의 7-segment 에초시계를구현한다. Tact 스위치 SW3 을 CPU 보드의 PE4 에연결한다. 그리고, SW3 을누르면하강 에지에서초시계가 00 으로초기화된다. 동시에 Tact 스위치 SW4 를 CPU 보드의

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)

More information

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D> 뻔뻔한 AVR 프로그래밍 The 4 th Lecture 유명환 ( yoo@netplug.co.kr) 1 시간 (Time) 에대한정의 INDEX 2 왜타이머 (Timer) 와카운터 (Counter) 인가? 3 ATmega128 타이머 / 카운터동작구조 4 ATmega128 타이머 / 카운터관련레지스터 5 뻔뻔한노하우 : 레지스터비트설정방법 6 ATmega128

More information

MAX232 MAXIM사에서생산되는 RS-232통신을가능토록해주는송수신 IC이다. 송수신드라이브를각각 2개씩가지고있다. AVR과컴퓨터가인식하는 0과 1의값이다르기때문에.. 마이컴컴퓨터 이차이를해결해주는것이다. 0 0V -10V 1 5V 10V TTL IC 의전원단자와다

MAX232 MAXIM사에서생산되는 RS-232통신을가능토록해주는송수신 IC이다. 송수신드라이브를각각 2개씩가지고있다. AVR과컴퓨터가인식하는 0과 1의값이다르기때문에.. 마이컴컴퓨터 이차이를해결해주는것이다. 0 0V -10V 1 5V 10V TTL IC 의전원단자와다 Code Vison AVR C ATmega 8535 RS232 시리얼통신 컨넥터와신호선 RS232 통신을위한컨넥터는 9핀과 25핀컨넥터가있으나, 최근에는 9핀컨넥터를많이사용한다. 실제데이터가송수신되는핀은 TXD(3) 와 RXD(2) 이고기능은다음과같다. 9 핀컨넥터의모습 TXD - Transmit Data 비동기식직렬통신장치가외부장치로데이터를보낼때, 직렬통신데이터가나오는신호선

More information

슬라이드 1

슬라이드 1 마이크로컨트롤러 2 (MicroController2) 2 강 ATmega128 의 external interrupt 이귀형교수님 학습목표 interrupt 란무엇인가? 기본개념을알아본다. interrupt 중에서가장사용하기쉬운 external interrupt 의사용방법을학습한다. 1. Interrupt 는왜필요할까? 함수동작을추가하여실행시키려면? //***

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729> 7주차 AVR의 A/D 변환기제어레지스터및관련실습 Next-Generation Networks Lab. 3. 관련레지스터 표 9-4 레지스터 ADMUX ADCSRA ADCH ADCL 설명 ADC Multiplexer Selection Register ADC 의입력채널선택및기준전압선택외 ADC Control and Status Register A ADC 의동작을설정하거나동작상태를표시함

More information

ATmega128

ATmega128 ATmega128 외부인터럽트실습 Prof. Jae Young Choi ( 최재영교수 ) (2015 Spring) Prof. Jae Young Choi 외부인터럽트실험 외부인터럽트를사용하기위해관렦레지스터를설정 일반적으로 I/O 포트에대한설정이끝난후에외부인터럽트나타이머 / 카운터설정 PE4~7 번까지 4 개의외부인터럽트 INT4~INT7 까지사용 외부인터럽트사용법요약

More information

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63>

<4D F736F F D20BDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCADB0ADC1C2202D203420C7C1B7CEB1D7B7A1B9D62E646F63> 라인트레이서강좌 4. 프로그래밍 2005년 8월 1일류대우 (davidryu@newtc.co.kr) 1. 라인트레이서란? 라인트레이서는정해진주행선을따라움직이는자율이동로봇이다. 현재공장자동화부분에서이용되고있는무인반송차가라인트레이서이다. 라인트레이서의기본적인원리는주어진주행선을센서로검출하여이것에따라목적위치까지이동하는것이다. 라인트레이서는크게 3부분 - 컨트롤러부,

More information

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고

인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고 CHAPTER 7 인터럽트 가. 레지스터구조이해하기 나. 엔코더제어하기 인터럽트 (Interrupt) 범용입출력포트에서입출력의내용을처리하기위해매번입출력을요구하는플래그를검사하는일 (Pollong) 에대하여마이크로컨트롤러에게는상당한시간을소비하게만든다. 인터럽트란 CPU가현재처리하고있는일보다급하게처리해야할사건이발생했을때, 현재수행중인일을중단하고급한일을처리한후에본래의일을다시수행하는것을말한다.

More information

<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770>

<BDC7C7E83720BFB9BAF1BAB8B0EDBCAD2E687770> 제목 : 실험 #7 예비보고서 USART 통신제어 실험목적 - RS-232C 통신규격에대해이해한다. - ATmega128의 USART0과 USART1을이용한동기및비동기 RS-232C 통신방법을알아본다. 실험장비 - ATmega128(AVR Chip), MAX232CPE Chip, RS-232C 케이블 실험이론 - RS-232C 통신 직렬통신에는동기식과비동기식통신방법이있는데,

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F > 10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절

More information

정보보안 개론과 실습:네트워크

정보보안 개론과 실습:네트워크 ` 마이크로프로세서설계및실습 12-13 주차강의자료 학습목표 A/D 변환기의제어방법을이해한다 능숙하게 A/D 변환기를제어할수있도록반복실습한다 2/28 아날로그 - 디지털변환회로 아날로그 - 디지털변환회로 (A/D 변환회로 ) 는, 아날로그전기신호를디지털전기신호로변환하는전자회로이다 A/D 컨버터 (ADC: Analog-to-digital converter) 라고도불린다

More information

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - (Asynchronous Mode) - - - ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 - UART (Univ ers al As y nchronous Receiver / T rans mitter) 8250A 8250A { COM1(3F8H). - Line Control Register

More information

BY-FDP-4-70.hwp

BY-FDP-4-70.hwp RS-232, RS485 FND Display Module BY-FDP-4-70-XX (Rev 1.0) - 1 - 1. 개요. 본 Display Module은 RS-232, RS-485 겸용입니다. Power : DC24V, DC12V( 주문사양). Max Current : 0.6A 숫자크기 : 58mm(FND Size : 70x47mm 4 개) RS-232,

More information

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee

Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee Chapter. 14 DAC 를이용한 LED 밝기제어 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. D/A 변환기 2. 병렬 D/A 변환기로 LED 밝기제어하기 3. 직렬 D/A 변환기로 LED 밝기제어하기 D/A 변환기 D/A 변환기 (Digital to Analog Converter) 디지털데이터를아날로그전압으로변환하는소자 A/D변환기와함께마이크로프로세서응용회로에서널리사용됨.

More information

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을

가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을 CHAPTER 5 도트매트릭스제어하기 가. 도트매트릭스제어하기 가. 도트매트릭스제어하기 단일 LED와는다르게도트매트릭스를구동시는구동전류가프로세서에서출력되는전류보다사용량을더많이필요하기때문에 TTL 계열의 IC로구동시키기에는무리가따른다. 이러한문제를해결하기위해서사용전압, 전류정격이높은달링턴트랜지스터가어레이형태로들어있는 ULN2803을이용한다. 이 IC에는 8개의

More information

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729>

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202831C1D6C2F72C2032C1D6C2F729> 1주차 ATmega128의구조와메모리 Next-Generation Networks Lab. 1. ATmega128의특징 고성능, 저전력의 8 비트마이크로컨트롤러 진보된 RISC 구조 대부분단일클럭에서실행되는강력한 133개의명령어구조 16MHz에서거의 16MIPS로동작 32개의 8 bit 범용작업레지스터와추가된주변장치제어레지스터 2 사이클내에서수행되는강력한곱셈기내장

More information

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2

인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 ATmega128 인터럽트 1 제 04 강 인터럽트 (Interrupt) 인터럽트개요외부인터럽트참고 ) FND 회로실습및과제 인터럽트 * 인터럽트처리메커니즘 ATmega128 인터럽트 2 인터럽트 ( 계속 ) ATmega128 인터럽트 3 * 인터럽트벡터 (P.104 표 7.1 참조 ) : 35 개 인터럽트 ( 계속 ) * 인터럽트허용 / 금지메커니즘 ATmega128

More information

데이터 통신

데이터 통신 직 / 병렬통신 1. 병렬전송 2. 직렬전송 3. RS-232 통신 4. RS-422 통신 5. RS-485 통신 직 / 병렬통신 1 전송방식 직 / 병렬통신 2 1 병렬전송 병렬전송 한번에 1 개의비트가아닌 n 개의그룹의비트를전송 n 비트를전송하기위해 n 개의전선을사용 장점 직렬전송에비해 n 배만큼전송속도가증가 단점 가격이비싸다 짧은거리만가능 직 / 병렬통신

More information

ATmega128 교재 - 8장 EEPROM.hwp

ATmega128 교재 - 8장 EEPROM.hwp 8.1 EEPROM 과 Flash Memory ATmega128에는프로그램메모리로서 128KB의플래시메모리를내장하고있고데이터메모리로서 4KB의 EEPROM을내장하고있다. EEPROM과플래시메모리는하나의뿌리에서발전해온매우유사한메모리이지만사용방법이서로다르다. 이것들은오늘날독립된메모리소자로서도널리사용되고있으므로충분히알아둘필요가있다. EEPROM(Electrically

More information

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드]

Microsoft PowerPoint - 제5장 인터럽트 (HBE-MCU-Multi AVR).ppt [호환 모드] Chapter. 5 인터럽트 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기 인터럽트 1. 폴링과인터럽트그리고인터럽트서비스루틴 2. ATMega128 인터럽트 3. 인터럽트로 LED 점멸시키기 4. 인터럽트로스톱워치만들기

More information

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM

1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT, TIM AVR (ATmega2560) 보고서 2013 년 6 월 14 일 스마트컨트롤러 2013 조유진 1. 기본설정 목차 1-1. 설치해야할프로그램및파일 1-2. 프로그램올리기 1-3. MAKEFILE 2. 캐릭터 LCD(PORT) 3-1. 개요 3-2. 사용하는레지스터 3-3. Source Code 3-4. 실습사진 3. 타이머카운터및초음파센서활용 (PORT,

More information

개요

개요 Application Note (003) 시리얼인터페이스 (RS232/RS422/RS485) Version 1.0 솔내시스템주식회사 1. 개요 는 RS232, RS422, RS485등 3개의시리얼인터페이스를지원합니다. 사용자는 의설정용유틸리티인 ezconfig를이용해서 3개의인터페이스중에서하나를선택하여설정할수있습니다. 1.1. RS232 Ground를기준으로한전압을이용해서통신하는형태입니다.

More information

슬라이드 1

슬라이드 1 AVR(Atmega128) Interrupt 1 Interrupt Polling 사용자가명령어를사용하여입력핀의값을계속읽어서변화를알아냄 모든경우의입력또는값의변화에대응하여처리가가능 Interrupt MCU 자체가하드웨어적으로그변화를체크하여변화시에만일정한동작 하드웨어적으로지원되는몇개의입력또는값의변화에만대응처리가가능 처리속도는일반적인경우인터럽트가빠름 인터럽트발생시

More information

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터

HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터 HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR 편 ) 마이크로컨트롤러기능 제 6 장타이머와카운터 타이머와카운터 1. 클럭과카운터 2. ATMega128 의타이머 / 카운터 3. 8 비트타이머 / 카운터의일반동작모드 4. 타이머로 LED 점멸시키기 5. 타이머로디지털시계만들기 타이머 / 카운터 타이머와카운터 정확한시간의측정이필요하다.( 자명종과스톱워치

More information

C & System

C & System 1-1 마이크로컨트롤러 (MCU) MCU = CPU Core(Architecture) + Peripherals(Controllers) 1 1-2 마이크로컨트롤러동작구조 1-3 AVR ATmega128 특징 뛰어난성능 (Advanced RISC Architecture) Most Single Clock Cycle Execution 32 X 8bit General

More information

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx #include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의

More information

[8051] 강의자료.PDF

[8051] 강의자료.PDF CY AC F0 RS1 RS0 OV - P 0xFF 0x80 0x7F 0x30 0x2F 0x20 0x1F 0x18 0x17 0x10 0x0F 0x08 0x07 0x00 0x0000 0x0FFF 0x1000 0xFFFF 0x0000 0xFFFF RAM SFR SMOD - - - GF1 GF0 PD IDL 31 19 18 9 12 13 14 15 1 2 3 4

More information

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기

목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기 Chapter. 13 KeyPAD 를이용한비밀번호입력기 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. 키패드 (KeyPAD) 2. KeyPAD 를이용한비밀번호입력기 키패드 (KeyPAD) 키패드 (KeyPAD) 마이크로컨트롤러활용에서사용자의입력을받아들이기위한장치 전화기, 컴퓨터, 핸드폰, 냉장고등거의모든가전제품에서사용 키패드인터페이스방식

More information

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63>

<4D F736F F D20C0DBC7B0C6ED5FBDBAC5D7C7CE20B6F3C0CEC6AEB7B9C0CCBCAD20B0B3B9DF2E646F63> 테핑라인트레이서개발하기 류대우 (davidryu@newtc.co.kr) 1. 센서보드 적외선센서 1. 적외선센서 (Photo Sensor) 라인트레이서나마이크로마우혹은다른마이크로로봇에서센서로사용하는것중가장많이사용하는것이 photo sensor입니다. 거리의측정에도사용되지만원거리는잘사용하지않고근거리를측정하고자할때사용되기도하며물체의유 / 무등많은곳에서사용되고있습니다.

More information

OCW_C언어 기초

OCW_C언어 기초 초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향

More information

CANTUS Evaluation Board Ap. Note

CANTUS Evaluation Board Ap. Note Preliminary CANTUS - UART - 32bits EISC Microprocessor CANTUS Ver 1. October 8, 29 Advanced Digital Chips Inc. Ver 1. PRELIMINARY CANTUS Application Note( EVM B d ) History 29-1-8 Created Preliminary Specification

More information

OSTSen-PIR100 사용자설명서 Ver 1.1 Onsystech OSTSen-PIR100 V1.1 1 of 8 Onsystech

OSTSen-PIR100 사용자설명서 Ver 1.1 Onsystech OSTSen-PIR100 V1.1 1 of 8 Onsystech OSTSen-PIR100 사용자설명서 Ver 1.1 Onsystech OSTSen-PIR100 V1.1 1 of 8 Onsystech 1. 제품소개 1) 제품특징 OSTSen-PIR100은 UART 인터페이스를통하여인체모션감지 (PIR) 데이터를제공하는센서모듈입니다. 이센서모듈은사용자가편리하게다양한분야에적용할수있도록소형으로제작되었습니다. ( PIR: Pyroelectric

More information

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음 CHAPTER 9 둘중하나선택하기 관계연산자 두개의피연산자를비교하는연산자 결과값은참 (1) 아니면거짓 (0) x == y x 와 y 의값이같은지비교한다. 관계연산자 연산자 의미 x == y x와 y가같은가? x!= y

More information

OSTSen-THL100 사용자설명서 Ver 1.1 Onsystech OSTSen-THL100 Ver1.1 1 of 8 Onsystech

OSTSen-THL100 사용자설명서 Ver 1.1 Onsystech OSTSen-THL100 Ver1.1 1 of 8 Onsystech OSTSen-THL100 사용자설명서 Ver 1.1 Onsystech OSTSen-THL100 Ver1.1 1 of 8 Onsystech 1. 제품소개 1) 제품특징 OSTSen-THL100은 UART 인터페이스를통하여온도, 습도, 조도데이터를제공하는센서모듈입니다. 이센서모듈은사용자가편리하게다양한분야에쉽게적용할수있도록소형으로제작되었습니다. PC에서 OSTSen-THL100의온도,

More information

Microsoft PowerPoint - 9.Serial.pptx

Microsoft PowerPoint - 9.Serial.pptx 8051 Serial 통신 Mode 0 : 동기통신 Mode 123 1,2,3 : 비동기통신 dolicom@naver.com http://blog.naver.com/dolicom /d li 통신시동시에보내는데이터비트수 패럴럴통신 (Parallel) 두지점간데이터시데이터연결수가많다. 8비트를많이사용 LPT(Printer), SCSI(HDD), ATAPI(HDD)

More information

2 Mitsubishi FX Series Computer Link MITSUBISHI FX SERIES COMPUTER LINK 시스템구성 시스템설정 사용예 사용예 사용예

2 Mitsubishi FX Series Computer Link MITSUBISHI FX SERIES COMPUTER LINK 시스템구성 시스템설정 사용예 사용예 사용예 Mitsubishi FX Series Computer Link 2 Mitsubishi FX Series Computer Link MITSUBISHI FX SERIES COMPUTER LINK... 1 1. 시스템구성... 3 2. 시스템설정... 4 3. 사용예... 6 3.1. 사용예 1... 6 3.2. 사용예 2... 9 4. 케이블연결도... 13 4.1.

More information

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역

Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역 Section 03 인터럽트활성화와인터럽트서비스루틴연결 33/82 Section 03 인터럽트활성화와인터럽트서비스루틴연결 34/82 장치에대한인터럽트설정과활성화 내부장치에대한특수레지스터존재 장치의특성을반영한동작설정용또는상태관찰용비트로구성 인터럽트사건의발생패턴을설정해야함 인터럽트활성화비트를 1 로셋하여, 인터럽트발생을허락» 전제, 전역인터럽트활성화비트가 1 로셋되었을때

More information

DSP_MON 프로그램 메뉴얼

DSP_MON 프로그램 메뉴얼 UART_ 통신프로토콜사용자메뉴얼 리얼시스 TEL : 031-342-3000 FAX : 031-343-0003 주소 : 경기도안양시동안구호계동 1027번지안양IT밸리 504호 - 1 - [ 공통용어설명 ] 통신프로토콜 UART_ Analyzer 통신프로토콜공통형식 1. 동작요청명령및정상응답구조 시작문자 명령코드 Hex ASCII 데이터문자열 Check Sum

More information

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074>

<4D F736F F F696E74202D2037C0E55FC0CEC5CDB7B4C6AEC0C720B5BFC0DB2E707074> 7 장. 인터럽트의동작 한국산업기술대학교 이응혁교수 WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,

More information

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx

Microsoft PowerPoint Android-SDK설치.HelloAndroid(1.0h).pptx To be an Android Expert 문양세강원대학교 IT 대학컴퓨터학부 Eclipse (IDE) JDK Android SDK with ADT IDE: Integrated Development Environment JDK: Java Development Kit (Java SDK) ADT: Android Development Tools 2 JDK 설치 Eclipse

More information

OSTSen-MOS100 사용자설명서 Ver 1.1 Onsystech OSTSen-MOS100 Ver of 8 Onsystech

OSTSen-MOS100 사용자설명서 Ver 1.1 Onsystech OSTSen-MOS100 Ver of 8 Onsystech OSTSen-MOS100 사용자설명서 Ver 1.1 Onsystech OSTSen-MOS100 Ver 1.1 1 of 8 Onsystech 1. 제품소개 1) 제품특징 OSTSen-MOS100은 UART 인터페이스를통하여토양수분데이터를제공하는센서모듈입니다. 이센서모듈은사용자가편리하게다양한분야에적용할수있도록소형으로제작되었습니다. PC에서는 OSTSen-MOS100에서제공하는토양수분데이터를

More information

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우. 소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423

More information

슬라이드 제목 없음

슬라이드 제목 없음 ETOS-DPS-X Guide AC&T SYSTEM 1 ETOS-DPS-X 개요 ETOS-DPS-X Field Bus Network 중 Profibus-DP Network 에연결되는장비. ProfiBus-DP Network 시스템에 DP 통신을지원하지않는현장장비에대한통신서버기능구현. Profibus-DP Slave 동작하기때문에반드시 DP-Master 모듈이있는시스템에서적용가능.

More information

ISP and CodeVisionAVR C Compiler.hwp

ISP and CodeVisionAVR C Compiler.hwp USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler

More information

Mango-E-Toi Board Developer Manual

Mango-E-Toi Board Developer Manual Mango-E-Toi Board Developer Manual http://www.mangoboard.com/ http://cafe.naver.com/embeddedcrazyboys Crazy Embedded Laboratory www.mangoboard.com cafe.naver.com/embeddedcrazyboys CRZ Technology 1 Document

More information

lecture4(6.범용IO).hwp

lecture4(6.범용IO).hwp 제 2 부 C-언어를 사용한 마이크로컨트롤러 활용기초 66 C-언어는 수학계산을 위해 개발된 FORTRAN 같은 고급언어들과는 달 리 Unix 운영체제를 개발하면서 같이 개발된 고급언어이다. 운영체제의 특성상 C-언어는 다른 고급언어에 비해 컴퓨터의 하드웨어를 직접 제어할 수 있는 능력이 탁월하여 마이크로프로세서의 프로그램에 있어서 어셈블 리와 더불어 가장

More information

중간고사

중간고사 중간고사 예제 1 사용자로부터받은두개의숫자 x, y 중에서큰수를찾는알고리즘을의사코드로작성하시오. Step 1: Input x, y Step 2: if (x > y) then MAX

More information

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기

목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기 Chapter. 9 A/D 컨버터 HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. A/D 컨버터개요 2. ATMega128 의 A/D 컨버터기능 3. A/D 컨버터로광센서읽기 A/D 컨버터개요 A/D 컨버터 (Aalog-to-Digital Coverter) 아날로그신호를컴퓨터가읽을수있는병렬또는직렬의디지털데이터로변환하여주는장치 측정하려는아날로그물리량의범위및시스템의응용목적에따라분해능이나정밀도가적합한것을사용.

More information

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR)

Microsoft PowerPoint - 제3장 GPIO 입출력 제어 (HBE-MCU-Multi AVR) 한백전자기술연구소 HBE-MCU-Multi 로배우는 마이크로컨트롤러 (AVR편) 마이크로컨트롤러기능 제 3 장 GPIO 입출력제어 GPIO 입출력제어 1. HBE-MCU-Multi 구동 2. 마이크로컨트롤러와 GPIO 3. AVR 마이크로컨트롤러의입출력포트 4. GPIO 를이용하여 LED 켜기 5. GPIO를이용한스위치눌러 LED 불켜기 6. GPIO 를이용하여

More information

Microsoft Word _whitepaper_latency_throughput_v1.0.1_for_

Microsoft Word _whitepaper_latency_throughput_v1.0.1_for_ Sena Technologies 백서 : Latency/Throughput Test September 11, 2008 Copyright Sena Technologies, Inc 2008 All rights strictly reserved. No part of this document may not be reproduced or distributed without

More information

<4D F736F F D20B1E2BCFAC0DAB7E1202D20454F435220B8F0B5E5B9F6BDBA20C5EBBDC5C1A6C7B020BBE7BFEBB9FD202D F302E646F63>

<4D F736F F D20B1E2BCFAC0DAB7E1202D20454F435220B8F0B5E5B9F6BDBA20C5EBBDC5C1A6C7B020BBE7BFEBB9FD202D F302E646F63> 통신설정 1. Parity Bit 가무엇인가요? 어떻게설정해야합니까? 시설치단계에서통신케이블을연결하고, PCON 또는 PDM 등을통해설정을변경하여시스템과연결하고자할때 EOCR 통신제품에서지원하는프로토콜은 Modbus-RTU 로서, 데이터는 8 비트로구성되며, 데이터의무결성을검증하기위하여데이터비트에 parity bit 1 비트를더해서함께보냅니다. Even Parity

More information

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다. C 언어와 Assembly Language 을사용한 Programming 20011.9 경희대학교조원경 1. AVR Studio 에서사용하는 Assembler AVR Studio에서는 GCC Assembler와 AVR Assmbler를사용한다. A. GCC Assembler : GCC를사용하는경우 (WinAVR 등을사용하는경우 ) 사용할수있다. New Project

More information

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D>

<4D F736F F F696E74202D2037C0E55FC0CCC0C0C7F55FBFCFBCBA205BC8A3C8AF20B8F0B5E55D> 7 장. 인터럽트의동작 한국산업기술대학교 이응혁 ehlee@kpu.ac.kr WWW.ROBOTICSLAB.CO.KR 1 7.1 인터럽트 (Interrupt) 개요 인터럽트개념 프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생 비동기적으로처리 다른프로그램이수행되는동안여러개의사건을처리할수있는메커니즘 인터럽트가발생하면마이크로컨트롤러는현재수행중인프로그램을일시중단하고,

More information

AVR Atmega128

AVR Atmega128 AVR Atmega128 외부인터럽트 중원대학교최재영 인터럽트와폴링 MCU 에서입력을받아들이는방법은폴링방식과인터럽트방식이있음 - 폴링 (Polling) 방식 : 사용자의명령어에의해서하드웨어의변경사항을주기적으로읽어들이는방식 주기적으로하드웨어의변화를체크하기때문에사용자의프로그래밍에따라다양핚변화에대응이가능하지만 CPU 의점유율이높기때문에반응속도가느리다. 인터럽트 (Interrupt)

More information

목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기

목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기 Chapter. 10 외부메모리인터페이스 HBE-MCU-Multi AVR Jaeheung, Lee 목차 1. ATMega128의외부메모리인터페이스 2. TEXT LCD 3. TEXT LCD에글자쓰기 4. SRAM 5. 외부메모리인터페이스에 SRAM붙이기 ATMega128 의외부메모리인터페이스 ATMega128 의외부메모리인터페이스 칩외부에더큰용량의메모리나별도의주변장치들을연결하기위한인터페이스

More information

API 매뉴얼

API 매뉴얼 PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations

More information

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770>

<BDC7C7E83520BFB9BAF1BAB8B0EDBCAD2E687770> 제목 : 실험 #5 예비보고서 Interrupt 제어 실험목적 - Interrupt에대한기초지식을알아본다. - Atmega128의 Interrupt를사용해보고, 동작방식과동작방법및특징을확인한다. 실험장비 - ATmega128(AVR Chip), Switch, LED(Green-LED) 실험이론 - 인터럽트 (Interrupt) 인터럽트는프로그램이수행되고있는동안에어떤조건이발생하여수행중인프로그램을일시적으로중지시키게만드는조건이나사건의발생을말한다.

More information

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는

-. Data Field 의, 개수, data 등으로구성되며, 각 에따라구성이달라집니다. -. Data 모든 의 data는 2byte로구성됩니다. Data Type는 Integer, Float형에따라다르게처리됩니다. ( 부호가없는 data 0~65535 까지부호가있는 Dong Yang E&P 인버터 Modbus Monitoring Protocol 2018. 08. 27 Sun Spec (Modbus-RTU) -. Modbus Protocol 각 Field에대한설명 Frame갂의구별을위한최소한의시갂 BaudRate 9600에서 1bit 젂송시갂은 Start 0.104msec, (3.5 character Times, 1 Character

More information

Requirement Definition Wheel Motor 작동하는경우장애물인식후 - Ultrasonic Sensor 홀수번누를경우 +10 Touch Sensor 누를경우 TouchSensor 계속누르고있을경우 (0.5) +10 짝수번누를경우 -10 빛이어두워졌다다

Requirement Definition Wheel Motor 작동하는경우장애물인식후 - Ultrasonic Sensor 홀수번누를경우 +10 Touch Sensor 누를경우 TouchSensor 계속누르고있을경우 (0.5) +10 짝수번누를경우 -10 빛이어두워졌다다 AutoDriveRobot Analysis Requirement Definition Wheel Motor 작동하는경우장애물인식후 - Ultrasonic Sensor 홀수번누를경우 +10 Touch Sensor 누를경우 TouchSensor 계속누르고있을경우 (0.5) +10 짝수번누를경우 -10 빛이어두워졌다다시밝아졌을경우 - Light Sensor Break

More information

Microsoft Word - PLC제어응용-2차시.doc

Microsoft Word - PLC제어응용-2차시.doc 과정명 PLC 제어응용차시명 2 차시. 접점명령 학습목표 1. 연산개시명령 (LOAD, LOAD NOT) 에대하여설명할수있다. 2. 직렬접속명령 (AND, AND NOT) 에대하여설명할수있다. 3. 병렬접속명령 (OR, OR NOT) 에대하여설명할수있다. 4.PLC의접점명령을가지고간단한프로그램을작성할수있다. 학습내용 1. 연산개시명령 1) 연산개시명령 (LOAD,

More information

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc NTAS and FRAME BUILDER Install Guide NTAS and FRAME BUILDER Version 2.5 Copyright 2003 Ari System, Inc. All Rights reserved. NTAS and FRAME BUILDER are trademarks or registered trademarks of Ari System,

More information

1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64), 3(x32), 4(x16),

1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64), 3(x32), 4(x16), All In OneSTEP MBCD-13A ( 스텝모터용 1 축컨트롤러 / 드라이버일체형 ) 사용설명서 MotionBank 1. 제품규격및특징 구분 규격및특징 입력전압 DC 12~30V 모터구동방식 Bipolar 방식 최대모터전류 Max 3.0A 초기설정정지전류 :4(0.46A), 구동전류 :18(1.75A) 분주비 0(x256), 1(x128), 2(x64),

More information

Microsoft PowerPoint - es-arduino-lecture-03

Microsoft PowerPoint - es-arduino-lecture-03 임베디드시스템개론 : Arduino 활용 Lecture #3: Button Input & FND Control 2012. 3. 25 by 김영주 강의목차 디지털입력 Button switch 입력 Button Debounce 7-Segment FND : 직접제어 7-Segment FND : IC 제어 2 디지털입력 : Switch 입력 (1) 실습목표 아두이노디지털입력처리실습

More information

Chapter ...

Chapter ... Chapter 4 프로세서 (4.9절, 4.12절, 4.13절) Contents 4.1 소개 4.2 논리 설계 기초 4.3 데이터패스 설계 4.4 단순한 구현 방법 4.5 파이프라이닝 개요*** 4.6 파이프라이닝 데이터패스 및 제어*** 4.7 데이터 해저드: 포워딩 vs. 스톨링*** 4.8 제어 해저드*** 4.9 예외 처리*** 4.10 명령어 수준

More information

PowerPoint Template

PowerPoint Template 16-1. 보조자료템플릿 (Template) 함수템플릿 클래스템플릿 Jong Hyuk Park 함수템플릿 Jong Hyuk Park 함수템플릿소개 함수템플릿 한번의함수정의로서로다른자료형에대해적용하는함수 예 int abs(int n) return n < 0? -n : n; double abs(double n) 함수 return n < 0? -n : n; //

More information

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD Code Vison AVR C ATmega8535 ATmega8535 제어실습 Chapter 1 I / O 포트제어하기 FND 제어 FND에는 Vcc를이용하는애노드 (anode) 형과 Gnd를이용하는 cathode형이있다. LED가여러개모여있다생각하고 LED선택에따라문자와숫자를만들어낼수있다. 최대한많은영문자를만들기위해대문자와소문자를혼합한다. ( 표현가능한문자

More information

SRC PLUS 제어기 MANUAL

SRC PLUS 제어기 MANUAL ,,,, DE FIN E I N T R E A L L O C E N D SU B E N D S U B M O TIO

More information

Microsoft Word - EWKit-RS232.doc

Microsoft Word - EWKit-RS232.doc EWKit-RS232(WAM-424XSS 장착상태 ) 사진 구성품 (Test Board, USB Power Cable, RS-232 Cable) EM Tech 대전대덕구대화동 289-1 공구상가 5 동 227 호 TEL: (042) 623-4470 http://www.wgmsk.com - 1 - www.wgmsk.com 2 6 EWKit-RS232 및 AFSKtest

More information

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074> Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법

More information

(8)

(8) 5-8. RS232 비동기통신예제 목표 : DSP28x 에는 2 개의비동기통신 (SCI) 이있다. EDU2812 KIT 에서 1 개의 SCI 는부트및데이터모니터링용으로사용하고, 나머지 1 개는 RS232C 형태로커넥터 (CN6) 에접속되어있다. 본예제에서는이 RS232C 통신을사용하여송수신인터럽트처리등에대해서학습해본 다. PC 에서특정문자를보내면일련의문자열로응답하는프로그램을작성해본다.

More information

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - chap06-2pointer.ppt 2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.

More information

Microsoft PowerPoint - chap05-제어문.pptx

Microsoft PowerPoint - chap05-제어문.pptx int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.

More information

T100MD+

T100MD+ User s Manual 100% ) ( x b a a + 1 RX+ TX+ DTR GND TX+ RX+ DTR GND RX+ TX+ DTR GND DSR RX+ TX+ DTR GND DSR [ DCE TYPE ] [ DCE TYPE ] RS232 Format Baud 1 T100MD+

More information

슬라이드 1

슬라이드 1 Hardware/Iot Hacking AVR 프로그래밍 mongii@grayhash 마이크로컨트롤러소개 MCU = Micro Controller Unit 한마디로 작은 CPU 혹은작은컴퓨터 특수목적을수행하는소형화된 CPU 주변장치를추가해나가며기능확장 (Control) 가능 주로 C언어를이용하여프로그래밍 칩내부에 RAM과 ROM 등을포함 System on a

More information

1

1 - - - Data Sheet Copyright2002, SystemBase Co, Ltd - 1 - A0 A1 A2 CS0#, CS1# CS2#, CS3# CTS0#, CTS1# CTS2, CTS3# D7~D3, D2~D0 DCD0#, DCD1# DCD2#, DCD3# DSR0#, DSR1# DSR2#, DSR3# DTR0#, DTR1# DTR2#, DTR3#

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 KeyPad Device Control - Device driver Jo, Heeseung HBE-SM5-S4210 에는 16 개의 Tack Switch 를사용하여 4 행 4 열의 Keypad 가장착 4x4 Keypad 2 KeyPad 를제어하기위하여 FPGA 내부에 KeyPad controller 가구현 KeyPad controller 16bit 로구성된

More information

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>

<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074> SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......

More information

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070> #include "stdafx.h" #include "Huffman.h" 1 /* 비트의부분을뽑아내는함수 */ unsigned HF::bits(unsigned x, int k, int j) return (x >> k) & ~(~0

More information

고급 프로그래밍 설계

고급 프로그래밍 설계 UNIT 13 라즈베리파이블루투스 광운대학교로봇 SW 교육원 최상훈 Bluetooth Module 2 Bluetooth Slave UART Board UART 인터페이스용블루투스모듈 slave/device mode 라즈베리파이 GPIO 3 < 라즈베리파이 B+ 의 P1 헤더핀 GPIO 배치도 > wiringpi 라이브러리 4 라즈베리파이 GPIO 라이브러리

More information

V. 통신망 기술

V. 통신망 기술 오류검출기법 데이터전송오류 (error) 를검출하는기법 메시지전송시오류검출코드를데이터꼬리부분에부착하여전송하고수신측에서는이를사용하여오류발생여부판단 오류검출기법 패리티검사 블록합검사 (block sum check) 순환중복검사 (CRC : Cyclic Redundancy Check) 1 오류검출의기본원리 E= f(data) E,E = 오류검출코드 f = 오류검출함수

More information

Microsoft Word doc

Microsoft Word doc 2. 디바이스드라이버 [ DIO ] 2.1. 개요 타겟보드의데이터버스를이용하여 LED 및스위치동작을제어하는방법을설명하겠다. 2.2. 회로도 2.3. 준비조건 ARM 용크로스컴파일러가설치되어있어야한다. 하드웨어적인점검을하여정상적인동작을한다고가정한다. NFS(Network File System) 를사용할경우에는 NFS가마운트되어있어야한다. 여기서는소스전문을포함하지않았다.

More information

AN_0005B_UART

AN_0005B_UART CANTUS-CAN - UART - 32bits EISC Microprocessor CANTUS Ver 1.1 April 24, 213 Advanced Digital Chips Inc. Ver 1.1 CANTUS Application Note History 213-2-19 Released 213-4-24 Modified CANTUS-CAN CANTUS-CAN

More information

API 매뉴얼

API 매뉴얼 PCI-DIO12 API Programming (Rev 1.0) Windows, Windows2000, Windows NT and Windows XP are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations mentioned

More information

(MHT-SB112\273\347\276\347\274\255.hwp)

(MHT-SB112\273\347\276\347\274\255.hwp) 무한테크 Digital I/O Board MHT-SB112 경기도의왕시고천동 290-2 대영골든밸리 902 호 http:// Tel : 031-450 - 6737 Fax : 031-450 - 6738 Email : info@moohantechbiz 차례 1 사용되는용도및특징 2 구성요소 3 인터페이스구성 4 아날로그입력 5 통신프로토콜 6 딥스위치설정 7 PCB

More information

Microsoft PowerPoint - 제7장 타이머와 PWM (HBE-MCU-Multi AVR).ppt [호환 모드]

Microsoft PowerPoint - 제7장 타이머와 PWM (HBE-MCU-Multi AVR).ppt [호환 모드] Chapter. 7 타이머와 PWM HBE-MCU-Multi AVR Jaeheug, Lee 목차 1. PWM(Pulse Width Modulatio) 2. 8비트타이머 / 카운터의동작모드 3. 16비트타이머 / 카운터 4. PWM으로 LED 밝기조절하기 5. 타이머로버저울리기 PWM(Pulse Width Modulatio) 펄스 (Pulse) 와펄스폭 (Pulse

More information

Microsoft Word - IRM9600x Spec.doc

Microsoft Word - IRM9600x Spec.doc IRM-9600x EM Tech 대전대덕구대화동 289-1 공구상가 5 동 227 호 TEL: (042) 623-4470 - 1 - 1. 주요기능및규격 PWM 변조방식 (Carrier Frequency: 307.2 KHz) Scrambler & Descrambler 기능통신지연 : 2.5 Bit 이하 ( 송신기 : 1Bit, 수신기 : 1.5 Bit) 빠른자동모드전환

More information

Microsoft PowerPoint - polling.pptx

Microsoft PowerPoint - polling.pptx 지현석 (binish@home.cnu.ac.kr) http://binish.or.kr Index 이슈화된키보드해킹 최근키보드해킹이슈의배경지식 Interrupt VS polling What is polling? Polling pseudo code Polling 을이용한키로거분석 방어기법연구 이슈화된키보드해킹 키보드해킹은연일상한가! 주식, 펀드투자의시기?! 최근키보드해킹이슈의배경지식

More information

윈도우즈프로그래밍(1)

윈도우즈프로그래밍(1) 제어문 (2) For~Next 문 윈도우즈프로그래밍 (1) ( 신흥대학교컴퓨터정보계열 ) 2/17 Contents 학습목표 프로그램에서주어진특정문장을부분을일정횟수만큼반복해서실행하는문장으로 For~Next 문등의구조를이해하고활용할수있다. 내용 For~Next 문 다중 For 문 3/17 제어문 - FOR 문 반복문 : 프로그램에서주어진특정문장들을일정한횟수만큼반복해서실행하는문장

More information

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션 실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3

More information

Nordic Chipset BLE Test Application Note

Nordic Chipset BLE Test Application Note Nordic Chipset BLE Test Application Note 20151218 차례 차례........................................................................... ii 1. Nordic nrf52 Series 제품테스트방법...............................................

More information

CHAPTER 2 마이크로컨트롤러구조이해하기 가. ATmega128 기능 나. CRX10 구조

CHAPTER 2 마이크로컨트롤러구조이해하기 가. ATmega128 기능 나. CRX10 구조 CHAPTER 2 마이크로컨트롤러구조이해하기 가. ATmega128 기능 나. CRX10 구조 가. ATmega128 기능 1) 기능 고성능저전력 AVR 8비트마이크로컨트롤러 고급 RISC 구조 - 133개의강력한명령어 - 최대단일주기클록수행 - 32 8 범용레지스터 + 주변기기제어레지스터 - 완전한정적동작 - 16 MHz에서 16 MIPS(Million Instruction

More information

I/O (GPIO) 제어 I/0 제어 ATmega128의 I/O 구성및특징 I/O PORT 구성 8비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT A ~PORT F) 6개 5비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT G) 1개 I/O PORT 특징

I/O (GPIO) 제어 I/0 제어 ATmega128의 I/O 구성및특징 I/O PORT 구성 8비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT A ~PORT F) 6개 5비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT G) 1개 I/O PORT 특징 AVR - Chapter 5 류대우 davidryu@ewtc.co.kr I/O (GPIO) 제어 I/0 제어 ATmega128의 I/O 구성및특징 I/O PORT 구성 8비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT A ~PORT F) 6개 5비트 / 양방향 / 범용 / 병렬 I/O포트 (PORT G) 1개 I/O PORT 특징 Read-modify-Write

More information

K&R2 Reference Manual 번역본

K&R2 Reference Manual 번역본 typewriter structunion struct union if-else if if else if if else if if if if else else ; auto register static extern typedef void char short int long float double signed unsigned const volatile { } struct

More information