Document Details

CuteWatermelonTourmaline

Uploaded by CuteWatermelonTourmaline

Kangwon National University

Tags

embedded systems programming microcontrollers electronics

Summary

This document provides notes on embedded systems, covering topics such as serial communication (including UART, I2C, SPI), LCD displays, and FND displays. The notes also incorporate examples of programming in C using wiringPi. It's a useful instructional resource for undergraduate students in electronics or embedded systems.

Full Transcript

임베디드 시스템 Embedded Systems Serial | LCD | FND | IR Serial(1/3) 직렬(Serial) 통신 하나 혹은 두개의 의 신호선을 이용하여 데이터(1bit)를 주고 받는 통신 여러 개의 신호를 보내는 병렬(parallel) 통신의 반대 개념 논리 값 1(HIGH)와 0(LOW)으로 구성된 데이터 직렬 통신 방식 동기식과...

임베디드 시스템 Embedded Systems Serial | LCD | FND | IR Serial(1/3) 직렬(Serial) 통신 하나 혹은 두개의 의 신호선을 이용하여 데이터(1bit)를 주고 받는 통신 여러 개의 신호를 보내는 병렬(parallel) 통신의 반대 개념 논리 값 1(HIGH)와 0(LOW)으로 구성된 데이터 직렬 통신 방식 동기식과 비동기식 Single-ended & Differential 전이중 방식과 반이중 방식 통신 오류 검출 방식 핸드 셰이크(Hand Shaking) 패리티 비트(Parity bit) CRC(Cyclic Redundancy Check) Serial(2/3) 동기식과 비동기식 동기식(Synchronous): 클럭 신호를 이용하여 동기화 I2C, SPI, I2S 비동기식(Asynchronous): 통신 속도를 동일하게 설정하여 통신 UART, RS-422, RS-232C, USB Serial(3/3) 전이중통신과 반이중통신 RX(Reciever)와 TX(Transmitter)의 여부에 따라 구분 UART UART(Universal Asynchronous Receiver & Transmitter) 병렬 데이터를 직렬 방식으로 전환하여 데이터를 전송하는 방식 비동기식의 전이중 직렬 통신이며 클럭 신호없이 baud rate를 이용하여 통신 속도를 조절 디버깅용 문자출력(printf), 시스템간의 데이터 교환, AT 등에 활용 EIA(The Electronic Industry Alliance) 통신 표준: RS-232, RS-422, RS-485 I2C(1/4) I2C 통신 I2C(Inter-Integrated Circuit): 두 개의 버스를 이용한 직렬 데이터 통신 방식 Master와 Slave로 구분되며, Master와 Slave 간에 1 : n 연결이 가능하다. SCL(Serial Clock): 클럭을 통한 동기화를 위한 핀 SDA(Serial Data): 데이터를 주고 받기 위한 핀 Address: slave에 주어지는 고유한 주소 값 I2C(2/4) I2C 통신 방식 두 핀 모두 기본 값은 HIGH 이며, SDA가 LOW 로 떨어질 때 시작 신호로 판단하여 통신이 시작된다. 통신할 Slave 주소를 송신하여 해당 주소의 Slave와 통신을 수행 SCL이 LOW 일 때, 데이터를 비트로 변환한다. SCL이 HIGH 일 때, 데이터를 읽어온다. Master는 두 핀 모두 HIGH 일 때, SDA를 HIGH로 변경하여 통신을 종료한다. I2C(3/4) I2C 통신의 장단점 장점 2개의 입출력 핀과 소프트웨어를 이용하여 여러 장치들과 Master & Slave 사이의 반 이중 통신 제어 시스템 동작 중 일 때도 I2C 버스에 추가 제거가 가능하다. SCL 핀으로 클록을 맞추어서 동작하는 동기방식으로 안정적이다. 하드웨어 구성이 간단하며 대화형 동작 가능하다. 멀티 마스터 설정 가능 칩 생산 비용과 설계비용, 기기의 전력 소모 감소 단점 최대 100kHz 또는 고속 최대 400kHz까지의 다른 통신에 비교적 저속의 데이터 전송 저속 주변 장치와의 데이터 통신 및 주변 장치의 동작 모드 설정에 적합 동시 양방향 통신 불가 7bit 주소 길이 제한으로 최대 128개 Slave 장치 주소 충돌 가능성 높음 I2C(4/4) I2C 핀맵 LCD(1/8) LCD (Liquid Crystal Display) ASCII 문자를 표현할 수 있는 장치 LCD(2/8) Text LCD 모듈의 제어 명령 ASCII 문자를 표현할 수 있는 장치 LCD(3/8) Text LCD 모듈의 제어 명령 ASCII 문자를 표현할 수 있는 장치 LCD(4/8) PCF8574 IC 2개의 핀을 사용하는 I2C 방식의 집적회로 LCD(5/8) 라이브러리 함수 LCD(6/8) 라이브러리 함수 LCD(7/8) 라이브러리 함수 LCD(8/8) #include //- I2C 통신기반 LCD 슬레이브 설정 #include pcf8574Setup(RS_PIN, 0x27); //- P0핀 - LCD의 RS 연결, 주소 지정 #include //- P1핀 - LCD의 RW 연결, 동작모드 설정 #include pinMode (RW_PIN, OUTPUT); digitalWrite (RW_PIN, LOW); #define BASE_ADDR 100 //- P3핀 - LCD의 Backlight 연결 #define RS_PIN BASE_ADDR //- 100 pinMode (BL_PIN, OUTPUT); #define RW_PIN BASE_ADDR+1 //- 101 digitalWrite (BL_PIN, HIGH); //- Backlight ON #define EN_PIN BASE_ADDR+2 //- 102 //- LCD 제어 핸들 #define BL_PIN BASE_ADDR+3 //- 103 int fd = lcdInit (2, 16, 4, RS_PIN, EN_PIN, D4_PIN, D5_PIN, D6_PIN, #define D4_PIN BASE_ADDR+4 //- 104 D7_PIN, 0,0,0,0 ); #define D5_PIN BASE_ADDR+5 //- 105 while(1){ #define D6_PIN BASE_ADDR+6 //- 106 lcdClear(fd); //- LCD화면 지우기 #define D7_PIN BASE_ADDR+7 //- 107 delay(500); lcdPosition (fd, 2, 0); // 윗줄 2번째 칸 int main (void){ lcdPuts (fd, "Hello, World!"); //- 문자열 출력 //- wiringPi 초기화 lcdPosition (fd, 2, 1); // 아랫줄 2번째 칸 if( wiringPiSetup() == -1){ lcdPuts (fd, "* Good Luck *"); //- 문자열 출력 printf("Setup Fail ~!!"); delay(2000); return -1; } } lcdClear(fd); //- LCD화면 지우기 delay(500); return 0; } 컴파일 ex) gcc -o [실행파일명] [코드파일] -lwiringPi -lwiringPiDev 4-FND(1/6) FND(Flexible Numeric Display) 7-segment: 7개의 LED 소자를 8자 모양으로 배치하여 0~9까지 숫자를 표현하는 장치 VCC와 GND에 연결된 방식에 따라 캐소드(Cathode)와 애노드(Anode)로 구분 4-FND(2/6) 7-Segment의 원리 캐소드 타입 각 LED 소자의 공통 단자는 GND에 연결되어 있다. 각 LED를 켜기 위해선 HIGH, 끄기 위해선 LOW를 인가한다. 7-Segment 문자 & 숫자 표시 값 4-FND(3/6) 4-Digit 7-Segment 7개의 LED 핀과 더불어 각 자리를 제어하는 핀이 추가되었다. 4-digit 7 seg의 핀 맵 4-FND(4/6) 4-FND의 연결회로 4-FND(5/6) TM1637 라이브러리 4-FND(6/6) #include #include #include "TM1637.h" while(1){ #define CLK_PIN 9 unsigned char BitSelect = 0; #define DIO_PIN 8 i = count; int main(void){ count ++; int8_t NumTab[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; if(count == sizeof(NumTab)) count = 0; int8_t ListDisp; for(BitSelect = 0;BitSelect < 4;BitSelect ++){ unsigned char i = 0, count = 0; ListDisp[BitSelect] = NumTab[i]; delay(150); i++; //- wiringPi 초기화 if(i == sizeof(NumTab)) i = 0; if( wiringPiSetup() == -1){ } printf("Setup Fail ~!!"); TM1637_display(0,ListDisp); return -1; TM1637_display(1,ListDisp); } TM1637_display(2,ListDisp); //- 2개 핀 동작 모드 설정 TM1637_display(3,ListDisp); pinMode(CLK_PIN,INPUT); delay(500); pinMode(DIO_PIN,INPUT); } delay(200); return 0; TM1637_init(CLK_PIN,DIO_PIN); } TM1637_set( BRIGHTEST, 0x40, 0xc0 ); 컴파일 ex) gcc -o [실행파일명] [코드파일] TM1637.c -lwiringPi IR(1/4) IR Receiver 적외선 리모컨 또는 적외선 송신기에서 보내는 적외선 신호를 받는 장치 자연광의 IR의 간섭을 피하기 위해 38KHz 주파수를 이용 통상적으로 NEC 포멧을 이용한다. IR(2/4) NEC Leader Code(9ms) + Space(4.5ms) + Data Word(54ms) 32bit = Address code(8bit) + Address Code1의 보수(8bit) + Data code(8bit) + Data code 1의 보수(8bit) IR(3/4) PIGPIO 설치 (필요한 경우에만 수행) 아래의 절차를 순차적으로 수행 wget https://github.com/joan2937/pigpio/archive/master.zip unzip master.zip cd pigpio-master make sudo make install 출처: https://abyz.me.uk/rpi/pigpio/download.html IR(4/4) #include "irpigpio.h" #include #include "irpigpio.h" #include #include #define IR_PIN 18 #include #define LED 27 #define IR_PIN 18 #define BUTTON_0 951308750 #define LED 27 #define BUTTON_1 271208262 int deviceSetup(){ int deviceSetup(){ if (gpioInitialise()

Use Quizgecko on...
Browser
Browser