뻔뻔한avr 프로그래밍 - icbank.combb%b7%bb%b7%c7%d1_avr... · 1 “통신” 관련이야기...
TRANSCRIPT
![Page 2: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/2.jpg)
INDEX“통신” 관련 이야기1 INDEX“시리얼 통신” 관련 이야기2
ATmega128 시리얼 통신 회로도 분석3
ATmega128 시리얼 통신 컨트롤러(USART) 분석4
ATmega128 시리얼 통신 관련 레지스터 분석5
ATmega128 시리얼 통신 실습6
![Page 3: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/3.jpg)
“통신” 관련 이야기1 통신 관련 이야기
동기 (Synchronous) 非 동기 (Asynchronous)
TCP UDPTCP
USART
TWI(I2C)
UDP
UART
GPS, BlueTooth, ZigBee
임베디드 시스템용 시리얼 통신 UART ex) MMI (Man Machine Interface)
통신 속도 시간 (계산) 공식통신 속도 시간 (계산) 공식
![Page 4: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/4.jpg)
“시리얼 통신” 관련 이야기2 시리얼 통신 관련 이야기
CPU
CPU0
01
10 0 0 0 0111TX
UARTcore 0
011
1
Busdata stream
RxUART
0 0 0 0 0111
SerialParallel
start 0 1 2 3 4 5 6 7 8 parity stop stop
Data bit
![Page 5: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/5.jpg)
AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3
![Page 6: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/6.jpg)
AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3
DK128-MAIN 보드 : ISP 회로
![Page 7: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/7.jpg)
AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3
DK128-MAIN 보드 : UART 회로
![Page 8: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/8.jpg)
AT 시리얼 통신 회로도 분석ATmega128 시리얼 통신 회로도 분석3
PC DK 12812V
5V1 threshold 5V1
10
0 0 1
GND
+5V Powered RS-232 Transmitters/Receivers+5V Powered RS-232 Transmitters/Receivers
--> MAX232 와 호환!!
![Page 9: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/9.jpg)
AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4
<-- 16MHz
--> TXD1
<-- RXD1
![Page 10: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/10.jpg)
AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4
Clock Generator
Transmitter다음 번 데이터는 송신 버퍼가
비워질(empty) 때까지 대기(wait)
UDR (Transmit) : 송신 버퍼송신 버퍼 empty
비워질(empty) 때까지 대기(wait)
TRANSMIT SHIFT REGISTER: 한 비트씩 송신(Transmitting)
TXD1
한 비트씩 Loading
Receiver
: 한 비트씩 송신(Transmitting)
Receiver
![Page 11: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/11.jpg)
AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4
Clock Generator
Transmitter
ReceiverRXD1핀으로부터 한 비트씩 수신
RECEIVE SHIFT REGISTER: 한 비트씩 수신 버퍼에 저장
RXD1
UDR (Receive) : 수신 버퍼Stop 비트 : Data 비트 수신이 완료됨을 뜻함!
수신 버퍼 full
![Page 12: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/12.jpg)
AT 시리얼 통신 컨트롤러(USART) 분석ATmega128 시리얼 통신 컨트롤러(USART) 분석4
TXD
RXD
TXD
RXD
PC DK128
RXD
GND
RXD
GND
• Full Duplex 동작
– 직렬 송수신이 독립적
• 비 동기(Asynchronous)와 동기(Synchronous) 모두 동작• 비 동기(Asynchronous)와 동기(Synchronous) 모두 동작
– 일반적으로 UART는 명령어전송을 위해 주로 사용 주로 비 동기
• 5, 6, 7, 8, 9 데이터 비트와 1, 2 스톱 비트no parity
start 0 1 2 3 4 5 6 7 8 parity stop stop
5, 6, 7, 8, 9 데이터 비트 1, 2 스톱비트비트
![Page 13: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/13.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
PC : 하이퍼터미널 (시리얼 가상 에뮬레이터)
DK128 : Firmware
19200-8-N-1
DK128 : Firmware
19200 : 시리얼 통신 속도(Baud rate)
8 : (송수신) 데이터 사이즈 -> ASCII code
N : No Parity
1 : Stop 비트 “1” 비트 사용* 흐름 제어 -> 반드시 “없음” 으로 설정할 것!
![Page 14: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/14.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
UDRn : USARTn I/O Data Register
Register 설명 실제 구현 예
UDRn •송수신 데이터를 저장하기 위한 레지스터 -> 버퍼(Buffer) UDR1 = byte; // 송신할 때
return UDR1; // 수신할 때return UDR1; // 수신할 때
19200-8-N-1
![Page 15: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/15.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
UCSRnA : USART Control and Status Register A
Register 설명 실제 구현 예
Bit 7 –RXC
• USART Receive Complete bitRX 핀으로부터 입력된 수신 데이터(8비트)가 모두 수신 버퍼(UDR)로
while(! (UCSR1A &(1<<RXC1)) );// RXC1 비트가 “1”이 될 때까지RXCn:
USART Receive Complete
• RX 핀으로부터 입력된 수신 데이터(8비트)가 모두 수신 버퍼(UDR)로입력이 완료되는 순간 자동적으로 “1”로 설정됨.
수신 버퍼가 완전히 채워질 때
// RXC1 비트가 “1”이 될 때까지
대기(wait) -> Polling 방식
Bit 5 –UDREn: USART Data
• USART Data Register Empty bit• 송신 버퍼(UDR)가 새로운 데이터를 받을 준비가 되어 있는지 알려줌
송신 버퍼가 완전히 비워질 때
while(!(UCSR1A &(1<<UDRE1)));// UDRE1 비트가 “1”이 될 때까지
대기(wait)
Register Empty
19200-8-N-1
![Page 16: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/16.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
![Page 17: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/17.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
UCSRnB : USART Control and Status Register B
Register 설명 실제 구현 예
Bit 4 –RXENn:
• USART 수신을 활성화(enable)• 수신 버퍼와 관련된 동작이 가능하도록 함
UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);RXENn:
Receiver Enable
• 수신 버퍼와 관련된 동작이 가능하도록 함 ( ) | ( );
Bit 3 –TXENn:
• USART 송신을 활성화(enable)• 송신 버퍼와 관련된 동작이 가능하도록 함
UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);TXENn:
Transmitter Enable
• 송신 버퍼와 관련된 동작이 가능하도록 함 (1<<RXEN) | (0<<UCSZ2);
Bit 2 –UCSZn2:
• UCSRnC의 UCSZn1:0과 함께 송수신 데이터의 사이즈를 결정
• UCSRnC 참조
UCSR1B = (1<<TXEN) | (1<<RXEN) | (0<<UCSZ2);
Character Size
UCSRnC 참조
19200-8-N-1
![Page 18: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/18.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
UCSRnC :UCSRnC : USART Control and Status Register C
Register 설명 실제 구현 예
Bit 5:4 –UPMn1:0: Parity Mode
• Parity 모드 설정 UCSR1C = (0<<UPM1)|(0<<UPM0) | (0<< USBS) | (1<<UCSZ1) | (1 <<UCSZ0);UPMn1 UPMn0 Parity mode
Parity Mode0 0 Disabled
0 1 (Reserved)
1 0 Enabled, Even Parity
1 1 Enabled Odd Parity
Bit 3 –USBSn: Stop Bit
• Stop 비트를 1비트와 2비트 중 어느 것을 할지 설정 UCSR1C = (0<<UPM1)|(0<<UPM0) | (0<< USBS) | (1<<UCSZ1) | (1 <<UCSZ0);
1 1 Enabled, Odd Parity
USBSn Stop-Bit(s)Stop Bit Select 0 1-bit
1 2-bits
19200-8-N-1
![Page 19: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/19.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
Bit 2:1 –UCSZn1:0: Character Si
• UCSRB의 UCSZ2와 함께 송수신 데이터의 사이즈를 결정
• 8비트 데이터 사이즈로 결정함! ASCII codeUCSR1C = (0<<UPM1) | (0<<UPM0) | (0<< USBS) | (1<<UCSZ1) | (1 <<UCSZ0);Character Si
ze| (1 <<UCSZ0);
UCSZn2 UCSZn1 UCSZn0 Character Size
0 0 0 5-bit
0 0 1 6-bit
0 1 0 7-bit
0 1 1 8-bit
1 0 0 Reserved
1 0 1 Reserved
1 1 0 Reserved
1 1 1 9-bit
19200-8-N-1
![Page 20: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/20.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
UBRRnL, UBRRnH :UBRRnL, UBRRnH : USART Baud Rate Registers
Register 설명 실제 구현 예
UBRRnL, UBRRnH
• 시리얼 통신 (송수신) 속도(Baud Rate)를 설정하기 위한 레지스터
19200-8-N-1
![Page 21: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/21.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5
![Page 22: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/22.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5Clock GeneratorUBRRnH 전송 속도 설정
Transmitter
UBRRnL
Next data
UDR (Transmit) : 송신 버퍼송신 버퍼 empty
TRANSMIT SHIFT REGISTER: 송신 시프트 레지스터
TXD1
Receiver
USCRnARXCn
UCSRnB수신 활성화송신 활성화
UCSRnCParity mode 설정
비 설정RXCn
UDREn 송신 활성화data size 설정
Stop 비트 설정data size 설정
![Page 23: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/23.jpg)
AT 시리얼 통신 관련 레지스터 분석ATmega128 시리얼 통신 관련 레지스터 분석5Clock Generator
UBRRnH전송 속도 설정
Transmitter
UBRRnL
Receiver
RECEIVE SHIFT REGISTER RXD1
RXD1핀으로부터 다음 신호 받음
RECEIVE SHIFT REGISTER: 수신 시프트 레지스터
RXD1
UDR (Receive) : 수신 버퍼Stop 비트
수신 버퍼 full수신 버퍼 full
USCRnARXCn
UCSRnB수신 활성화송신 활성화
UCSRnCParity mode 설정
비 설정RXCn
UDREn 송신 활성화data size 설정
Stop 비트 설정data size 설정
![Page 24: 뻔뻔한AVR 프로그래밍 - icbank.comBB%B7%BB%B7%C7%D1_AVR... · 1 “통신” 관련이야기 INDEX 2 “시리얼통신” 관련이야기 3 ATmega128 시리얼통신회로도분석](https://reader031.vdocuments.site/reader031/viewer/2022021801/5b52394b7f8b9adf538cfd34/html5/thumbnails/24.jpg)
AT 시리얼 통신 실습ATmega128 시리얼 통신 실습6예제_Header
#define CPU_CLOCK 16000000
#define BAUD_RATE 19200#define BAUD_RATE_L (CPU_CLOCK/(16l*BAUD_RATE))-1 // 하위 8 비트#define BAUD RATE H ((CPU CLOCK/(16l*BAUD RATE))-1) >> 8 // 상위 4 비트#define BAUD_RATE_H ((CPU_CLOCK/(16l BAUD_RATE)) 1) >> 8 // 상위 4 비트
- - - - 0 0 0 0 UBRRnH
case1) UBRR=51(0011 0011)인 경우
0 0 0 0
0 0 1 1 0 0 1 1UBRRnH
UBRRnL
case2) UBRR=416(0001 1010 0000)인 경우
- - - - 0 0 0 1
1 0 1 0 0 0 0 0UBRRnH
UBRRnL
* 110100000의 하위 8비트(1010 0000)는 UBRRnL (BAUD_RATE_L)에 할당
상위 4비트 값만 걸러내기 위해 0001 1010 0000 를 8번 오른쪽으로 Shift 시켜 남아 있는 값만 걸러내면 됨!
0 0 0 1 1 0 1 0 0 0 0 0 >> 8
0 0 0 0 0 0 0 0 0 0 0 1