이 튜토리얼에서는 두 ATMEGA8 마이크로 컨트롤러 사이에 직렬 통신 을 설정합니다 . 여기서 설정된 통신은 UART (Universal Asynchronous Receiver Transmitter) 유형입니다. 이 직렬 통신을 통해 다양한 임베디드 시스템에 필요한 두 개의 마이크로 컨트롤러간에 데이터를 공유 할 수 있습니다.
필요한 구성 요소
하드웨어: ATMEGA8 (2 개), 전원 공급 장치 (5v), AVR-ISP PROGRAMMER, 100uF 커패시터 (전원 공급 장치에 연결됨), 1KΩ 저항기 (2 개), LED, 버튼.
소프트웨어: Atmel studio 6.1, progisp 또는 flash magic.
회로도 및 설명
AVR 마이크로 컨트롤러 의 직렬 통신을 이해합시다. 여기서 ATMEGA는 데이터를 다른 ATMEGA에 직렬로 보냅니다. 다른 통신 모드가 있지만 쉬운 통신을 위해 RS232를 선택하고 있습니다. 첫 번째 ATMEGA8의 RS232 핀은 두 번째 ATMEGA8의 RXD 핀에 연결됩니다.
설정된 데이터 통신은 다음을 갖도록 프로그래밍됩니다.
- 8 개의 데이터 비트
- 2 개의 정지 비트
- 패리티 검사 비트 없음
- 2400 BPS (Bits Per Second)의 전송 속도
- 비동기 통신 (두 ATMEGA8간에 클록 공유 없음)
따라서 두 개의 ATMEGA8에 대해 서로 다른 두 개의 세트 레지스터가 있습니다. 하나는 TRANSMITTER 역할을하고 다른 하나는 RECEIVER 역할을합니다.
이제 두 개의 ATmega 마이크로 컨트롤러 사이 의 RS232 인터페이스의 경우 송신기와 수신기에 대해 다음 기능이 충족되어야합니다.
1. 첫 번째 컨트롤러의 TXD 핀 (데이터 수신 기능)은 TRANSMITTER에 대해 활성화되어야하며 두 번째 컨트롤러의 RXD 핀은 RECEIVER에 대해 활성화되어야합니다.
2. 통신이 직렬이기 때문에 데이터 바이트가 수신 될 때마다 알 필요가 있으므로 완전한 바이트가 수신 될 때까지 프로그램을 중지 할 수 있습니다. 이것은 데이터 수신 완료 인터럽트를 활성화하여 수행됩니다.
3. 데이터는 8bit 모드에서 컨트롤러로 송수신됩니다. 따라서 한 번에 두 개의 문자가 컨트롤러로 전송됩니다.
4. 패리티 비트가 없습니다. 모듈이 보낸 데이터에 정지 비트 하나가 있습니다.
위의 기능은 컨트롤러 레지스터에서 설정됩니다. 간단히 논의 할 것입니다.
DARK GRAY (UDRE): (TRASMITTER SIDE)이 비트는 시작시 설정되지 않지만 송신기가 전송할 준비가되었는지 여부를 확인하기 위해 작업 중에 사용됩니다. 자세한 내용은 TRASMITTER SIDE의 프로그램을 참조하십시오.
밝은 회색 (RXC): (수신 측)이 비트는 시작시 설정되지 않지만 수신기가 데이터를 수신 할 준비가되었는지 여부를 확인하는 데 사용됩니다. 자세한 내용은 RECEIVING SIDE의 프로그램을 참조하십시오.
VOILET (TXEN): (TRASMITTER SIDE)이 비트는 TRASMITTER SIDE에서 송신기 핀을 활성화하기 위해 설정됩니다.
RED (RXEN): (RECEIVING SIDE)이 비트는 데이터 수신 기능을 나타냅니다.이 비트는 컨트롤러가 모듈에서 데이터를 수신하도록 설정해야하며 컨트롤러의 RXD 핀도 활성화합니다.
BROWN (RXCIE):이 비트는 성공적인 데이터 수신 후 인터럽트를 받기 위해 설정되어야합니다. 이 비트를 활성화하면 8 비트 데이터 수신 직후 알게됩니다. 여기서는이 비트를 사용하지 않을 것이므로 그대로 둡니다.
PINK (URSEL):이 비트는 UCSRC에서 다른 필요한 비트를 설정 한 후 UCSRC에서 다른 비트를 활성화하기 전에 설정해야합니다. URSEL을 비활성화하거나 0으로 설정해야합니다. 여기서는이 비트를 사용하지 않을 것이므로 그대로 둡니다.
노란색 (UCSZ0, UCSZ1, UCSZ2): (수신 측 및 추적기 측)이 세 비트는 우리가 한 번에 수신하거나 전송하는 데이터 비트 수를 선택하는 데 사용됩니다.
두 ATMEGA 간의 통신은 8 비트 통신으로 설정됩니다. 통신을 테이블과 일치시켜 UCSZ0, UCSZ1을 1로, UCSZ2를 0으로 만듭니다.
수신 측과 송신 측 모두에 설정해야합니다.
주황색 (UMSEL): (수신 측 및 추적기 측)이 비트는 시스템이 비동기 적으로 (둘 다 다른 클록 사용) 또는 동 기적으로 (둘 다 동일한 클록 사용) 통신하는지 여부에 따라 설정됩니다.
두 컨트롤러 모두 시계를 공유하지 않습니다. 둘 다 자체 내부 시계를 사용하기 때문입니다. 따라서 두 컨트롤러 모두에서 UMSEL을 0으로 설정해야합니다.
GREEN (UPM1, UPM0): (수신 측 및 추적기 측)이 두 비트는 통신에서 사용하는 비트 패리티를 기반으로 조정됩니다.
ATMEGA는 데이터 전송 길이가 작기 때문에 패리티없이 데이터를 전송하도록 프로그래밍되어 있으므로 데이터 손실이나 오류가 없음을 분명히 기대할 수 있습니다. 따라서 여기서는 패리티를 설정하지 않습니다. 따라서 UPM1, UPM0을 모두 0으로 설정하거나 모든 비트가 기본적으로 0이기 때문에 남아 있습니다.
파란색 (USBS): (수신 측 및 추적기 측)이 비트는 통신 중에 사용하는 정지 비트 수를 선택하는 데 사용됩니다.
여기서 설정 한 통신은 비동기식이므로보다 정확한 데이터 송수신을 위해서는 두 개의 정지 비트를 사용해야하므로 두 컨트롤러 모두에서 USBS를 '1'로 설정합니다.
전송 속도는 적절한 UBRRH를 선택하여 컨트롤러에서 설정합니다.
UBRRH 값은 전송 속도와 CPU 크리스탈 주파수를 교차 참조하여 선택됩니다.
따라서 상호 참조에 의해 UBRR 값은 '25'로 표시되므로 전송 속도가 설정됩니다.
회로에서 볼 수 있듯이 버튼은 송신기 측에 연결됩니다. 이 버튼을 누르면 8 비트 데이터가 TRANSMITTER에서 전송되고이 데이터는 RECEIVER에서 수신됩니다. 이 데이터를 성공적으로 수신하면 연결된 LED를 켜고 끄며 두 컨트롤러 간의 성공적인 데이터 전송을 보여줍니다.