이 블로그는 임베디드 컴퓨터를 이용한 장치(시스템) 개발과 원격제어에 필요한 지식을 공유 하기 위한 블로그 입니다.
실제 개발과 프로그램 예를 위하여 Microchip 사의 ATmega128를 사용한 보드와 Arduino Mega 보드(ATmega2560), Raspberry Pi, Raspberry Pi Pico, WiFi 모듈을 사용 합니다.

atmega2560-interfacing

Device interface and control
  AVR과 다른 장치의 Interfacing

    이 장에서는 Embedded Computer(Controller)에 장치를 연결(Interface) 하고, 장치를 제어 하는 프로그램(Device driver)을 작성 하는 능력을 배양 하기 위하여 자주 사용 되는 장치의 실제 예를 들어 설명 한다.





  • DC Motor 제어를 위한 구성도와 프로그램 예
    • DC Motor 제어를 위한 구성도
    • Dual Full-Bridge Driver L298 : L298.pdf
    • DC Motor 제어 보오드 회로 예: DC_Motor_controller.pdf
    • DC Motor 제어 프로그램 예: cho_DC_motor_control_basic_2560.zip
    • 실험을 위한 회로 구성
      • PC와 AVR 사이에 UART 통신선을 연결한다.
        • Arduino Mega 2560를 사용하는 경우 2560 Pin name과 Mega board pin name mapping table을 참고하여 신호선을 연결한다.

          참고자료: Arduino Mega 2560 PIN mapping table

        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Mega board의 TXD1(PD3)를 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Mega board의 RXD1(PD2)를 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Mega board의 GND를 연결한다.
        • 주: UART1은 "USB --> UART(RS232) 변환 모듈"를 사용(USB Port를 Serial Port로 변환)하여 연결한다. Mega board의 UART0는 개발 Tool에서 사용하기 때문에 이 예서는 UART 통신 실험에 UART1을 사용한다.

          참고자료: USB - Serial 변환 모듈

      • Mega board에 LCD display module의 신호를 연결한다.
        • LCD 제어 신호(RS, R/W, Enable)를 연결한다.
        • LCD Data 신호(Data0, Data1, Data2, Data3)를 연결한다.
        • Contrast adjustment 선을 연결한다.
          • GND: LCD 모듈 1번 핀
          • Vdd: LCD 모듈 2번 핀
          • Contrast adjustment: LCD 모듈 2번 핀. 5 에서 10K 가변저항을 사용하여 "LCD 모듈 4Bit Interface 예"와 같이 연결한다.
          • 주: 처음 LCD display module을 연결한 경우에는 Contrast adjustment 가변저항을 조정하여 LCD에 문자가 잘 보이도록 하여야 한다.

          참고자료: LCD Module을 사용 하여 Data Bit를 4Bit만 사용한 Interfacing 예(Port A 사용)

      • Mega board에 Keypad를 연결한다.
      • 참고자료: Keypad Interfacing

      • 위 "DC Motor 제어를 위한 구성도"를 참고하여 Motor controller와 DC Motor 연결한다.
        • Mega PB5 <-> Motor controller Enable 신호를 연결한다.
        • Mega PG0 <-> Motor controller Direction 신호를 연결한다.
        • Mega 5V, GND <-> Motor controller 5V, GND 신호를 연결한다.
        • 필요한 경우 Motor controller에 모터 구동 전원를 연결한다.
        • Motor controller에 모터를 연결한다.
    • 실험 방법
      • cho_DC_motor_control_basic_2560.zip 파일을 Download하여 압축을 해제한다.
      • cho_DC_motor_control_basic_2560.hex를 개발 보드에 Upload 한다.
      • 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
      • 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
      • 실험:
        • 개발 보드의 Reset SW를 누르면 모니터와 LCD에 모터 제어에 필요한 명령을 설명하는 메세지와 현재 명령(Command: )과 PwmDuty(PwmDuty: )가 출력된다.
        • 명령을 입력하면 실행 결과가 모니터와 LCD에 출력된다.
        • 모니터 프로그램에서 명령 입력하기: gnu_sciutil.c에 있는 SCI_InChar() 함수에서 return rx0_char(); 이 실행되도록 설정한다.
        • Keypad에서 명령 입력하기: gnu_sciutil.c에 있는 SCI_InChar() 함수에서 return get_key(); 이 실행되도록 설정한다.
        • 주: 모니터 프로그램과 Keypad 둘중 하나에서 명령을 수신할 수 있도록 설정하여야 한다.


  • Servo Motor 제어를 위한 구성도와 프로그램 예
    • Servo Motor 제어 구성도
    • Servo Motor SG90의 제어 신호(Timming 과 Angle)
    • 주: 0°: 1500uSec, 90 ↔ 1000uSec , Duty(uSec) = 1500uSec + (angle * 125 / 90)

    • Servo Motor 제어 프로그램 예: cho_servo_motor_control_2560.zip
    • 실험을 위한 회로 구성
      • PC와 Mega board 사이에 UART 통신선을 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 RXD와 Mega board의 TXD1(PD3)를 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 TXD와 Mega board의 RXD1(PD2)를 연결한다.
        • 컴퓨터(USB --> UART(RS232) 변환 모듈)의 GND와 Mega board의 GND를 연결한다.
      • 위 "Servo Motor 제어를 위한 구성도"를 참고하여 Mega board와 Servo Motor를 연결한다.
        • Mega PB5 <-> Servo Motor 제어 신호(보통 Orange 색 선을 사용)를 연결한다.
        • Mega 5V <-> Servo Motor 5V(보통 Red 색 선을 사용)를 연결한다.
        • Mega GND <-> Servo Motor GND(보통 Brown 색 선을 사용)를 연결한다.
    • 실험 방법
      • cho_servo_motor_control_2560.zip 파일을 Download하여 압축을 해제한다.
      • cho_servo_motor_control_2560.hex를 개발 보드에 Upload 한다.
      • 모니터 프로그램(예: OC-Console, Tera Term)을 설치(이미 설치되어 있는 경우에는 실행만 하면됨)하고 실행 한다.
      • 모니터 프로그램에서 필요한 설정(Serial Port와 Baudrate 등을 설정)을 한다.
      • 실험:
        • 개발 보드의 Reset SW를 누르면 모니터에 Servo Motor 제어에 필요한 명령을 설명하는 메세지가 출력된다.
        • 모니터 프로그램에서 명령을 입력하면 실행 결과가 모니터에 출력된다.
        • 주: 명령을 입력하는 함수(SCI_InSDec_OP_code())는 일반적인 연산에 사용하는 함수를 사용하여 약간 복잡하다. 본인이 간단한 rx0_char() 함수를 만들어 이용하여도 된다.


  • Android Bluetooth 환경을 이용한 AVR Controller 제어
  • 이 예는 Bluetooth 통신을 이용 하여 휴대폰과 AVR Controller 사이에 Serial 통신 기능을 구현 하고, 휴대폰을 이용 하여 AVR Controller를 제어 하는 예 이다.

    • Bluetooth 통신( PC <-> 휴대폰) 시스템 구성도
    • Bluetooth Module 예
    • 실험 환경 설정
      • Android Phone에 BlueTerm(Bluetooth 통신을 지원 하는 터미널 프로그램)을 설치 한다.
      • 개발 보오드에 Bluetooth 모듈 설치 하기
        • 개발 보오드(UART1 사용)와 Bluetooth 모듈 사이에 아래와 같이 전원과 UART 통신에 필요한 신호를 연결 한다.

        • 개발 보오드 VCC(5V) -> Bluetooth 모듈 VCC(5V)
        • 개발 보오드 GND -> Bluetooth 모듈 GND
        • 개발 보오드 RxD(PD2) <-> Bluetooth 모듈 TxD
        • 개발 보오드 TxD(PD3) <-> Bluetooth 모듈 RxD
      • Bluetooth 모듈 Baud rate
        • 블루투스 모듈에 따라 미리 설정된 Baud rate 가 다르기 때문에 확인 하여야 한다.
        • 블루투스 모듈과 통신에 사용 하는 개발 보오드 UART 모듈(여기서는 UART1을 사용 하였음)의 Baud rate는 블루투스 모듈에 미리 설정 되어 있는 Baud rate와 일치 하도록 설정 하여야 한다.
          • 아래 휴대폰과 개발 보오드 사이의 문자 통신 실험인 경우 예:
            • cho_uart_bluetooth_basic.zip을 다운로드 하여 cho_uart_init.c File에서 UART1(UART0는 개발 보오드에서 사용 한다.)의 Baud rate 값을 블루투스 모듈 Baud rate 값으로 설정 하여야 한다.
            • 예: HC-06 모듈: 9600, JMOD-BT-1 모듈: 19200
    • 휴대폰에 블루투스 모듈 등록 하기
      • 개발 보오드의 전원을 연결 하면 Bluetooth 모듈의 전원 LED가 점멸 한다.
      • 휴대폰에서 블루투스 -> 검색을 하면 연결 가능한 디바이스 목록에 디바이스 이름이 표시 된다.(예: HC-06 , JCNET-BT 등)
      • 연결 할 디바이스을 선택(예: HC-06 , JCNET-BT 등) 하고 Pin 번호(Default: 1234 or 0000)를 입력 한다.
    • 휴대폰에서 블루투스 모듈 연결 하기
      • 블루투스 통신에 사용할 앱(Apps)을 선택(Blue Term) 하여 실행 한다.
      • Connect device 명령을 실행 하면 연결 가능한 디이바이스가 표시 된다.
      • 연결 할 디이바이스를 선택 하고, 연결에 성공 하면 Connected: Device Name(예: HC-06) 메세지가 표시 된다.
    • 휴대폰과 개발 보오드 사이의 문자 통신 실험
      • Board를 PC의 USB Port에 접속 한다.
      • cho_uart_bluetooth_basic_2560.zip 을 다운로드 하여 .Hex File을 개발 보오드에 설치 한다.
      • PC 장치관리자 -> 포트(COM & LPT) -> Silicon Labs CP210x USB to UART Bridge(장치 이름은 개발 보오드에 따라 다르게 표시 됨)의 포트 번호를 확인 한다.
      • PC에서 터미널 프로그램(Tera Term or OC Console 등)을 실행 하고, 설정 -> 시리얼 포트(E)… -> 시리얼포트 설정 창에서 포트(장치 관리자에서 확인한 번호) 번호, 속도(B): 19200, 데이터(D): 8bit, 패리티(A): none, Stop bit(S): 1 bit 로 설정 한다.
      • Android Phone에서 BlueTerm를 실행 하고, 메뉴 -> Connect device -> Device Name(예: HC-06)을 선택 한다.
      • Connected: Device Name 메시지를 확인 한다.
      • Android Phone의 BlueTerm에서 영문자를 입력 하면 PC의 터미널에 문자가 출력 된다.
      • PC의 터미널 프로그램에서 영문자를 입력 하면 Android Phone의 BlueTerm에 문자가 출력 된다.
    • 휴대폰을 이용한 개발 보오드의 LED 제어 실험
      • 휴대폰에서 LED 제어 명령(문자)을 입력 하면 개발 보오드 상의 LED 가 명령에 따라 동작 한다.
      • 실험에 필요한 설정은 윗 예와 같기 때문에 생략 한다.
      • cho_bluetooth_led_basic_2560.zip 을 다운로드 하여 .Hex File을 개발 보오드에 설치 한다.
      • LED 제어 명령(문자)
        • S: Turn Off
        • L: Shift Left
        • R: Shift Right
        • B: Blinking