AVR ATmega128(7)
-
GPIO
1. 입출력 사용하기 ATmega128에는 64개의 핀이 있다. 그 중 59개의 사용 가능한 핀이 있으며, 각 핀들은 일반 입출력 핀으로 사용하거나, 제조사에서 미리 설정한 기능을 작동하게 만들 수 있다. 이번에는 제조사의 기능이 아닌 일반 입출력 핀을 사용하는 방법을 알아볼 것이다. 아두이노에서는 핀을 설정하는 함수가 있어 간편하게 사용할 수 있지만 AVR은 아두이노의 간편한 함수들을 사용할 수 없어 레지스터를 직접 건드려야 한다. void setup() { // put your setup code here, to run once: pinMode(3, OUTPUT); PinMode(4, INPUT); } 위의 아두이노 함수를 AVR로 바꿔보겠다. 참고로 아두이노 우노, 나노 등 AVR 8비트 MCU를 ..
2023.03.07 -
UART 활용
UART를 더 쉽게 사용하기 위해 코드를 분리하였다. /* * UART.h * * Created: 2023-03-06 오후 2:14:16 * Author: yrt12 */ #ifndef UART0_H_ #define UART0_H_ #include void UART0_init(); void UART0_Transmit( unsigned char data ); unsigned char UART0_Receive(); void UART0_print(char *str); uint8_t UART0_available(); void UART0_ISR_Process(); uint8_t UART0_readyRxFlag(); void UART0_clearRxFlag(); void UART0_setRxFlag(); uint8..
2023.03.06 -
UART
1.UART UART는 비동기 직렬 통신 방식 중 하나이다. I2C와 비교해 보면, 데이터를 보낼 때 클록을 사용하지 않고, 통신에 데이터 선을 한 개만 사용해 수신과 송신을 한 번에 할 수 없는 I2C와 달리, TxD(송신), RxD(수신) 두 개의 선을 사용해 송수신을 동시에 할 수 있다. 이렇게 송신과 수신을 동시에 할 수 있는 통신 방법을 Full Duplex(전이중) 통신이라고 한다. AVR은 비동기와 동기 통신 모두를 지원하는 USART를 사용한다. UART I2C SPI 통신 방식 비동기 동기 동기 사용 핀 Rxd, Txd SDA, SCK MISO, MOSI, CLK 송수신 여부 전이중 반이중 전이중 연결 가능한 디바이스 1:1 1:N 1:N 통신속도 표시 BaudRate / bps bps ..
2023.03.06 -
I2C(TWI) LCD
1. I2C방식 I2C는 2개의 핀으로 여러개의 디바이스를 연결할 수 있게 해주는 2방향 직렬 통신이다. SCL(Serial Clock), SDA(Serial Data)의 두 핀을 사용하며, 동기 통신(어떠한 신호를 기준으로 데이터를 보내는 통신) 방식이다. 하나의 Master(기준 Clock을 발생하는 기기)가 나머지 Slave와 통신한다. SCL은 데이터 동기 속도이므로 Data 송수신 속도이고, SDA는 1비트 단위로 Data를 직렬로 통신한다. 또, 선 1가닥으로 Read Write를 모두 진행하기 때문에 한번에 하나의 행동만 가능하다. 이러한 방식을 반이중 통신 (Half DUflex)라고 한다. 디바이스들은 각각 고유 주소를 가지고 있는데, 주소는 7비트값이므로, 0~127까지의 값으로 표시될..
2023.03.03 -
초음파센서 드라이브 만들기
같은 폴더 안에 driver 폴더를 만들고 초음파 폴더를 만들어준다. 이전 코드의 초음파센서 관련 함수를 모두 복붙해서 Ultrasonic.c에 복사해준다. /* * Ultrasonic.c * * Created: 2023-03-03 오후 1:13:48 * Author: yrt12 */ #include "Ultrasonic.h" uint8_t ultrasonicDistanceFlag; void Ultrasonic_timerStart() { USONIC_TCNT = 0; TCCR1B |= 1
2023.03.03 -
AVR초음파 센서
이번에는 외부 인터럽트와 타이머를 사용해서 초음파 센서를 배워볼 것이다. 타이밍 다이그램을 보면, 10us이상의 신호를 주면, 초음파의 Trig신호에서 40kHz의 초음파 신호 8개가 나가게 된다. 직후, Echo핀의 핀 Level이 HIGH로 올라간 후, 위의 초음파 신호가 되돌아오면 Echo핀이 0으로 떨어지게 된다. 여기서 거리를 알려면, 거리 = 속도 * 시간을 이용해서 소리의 속도 * Echo핀이 High였다가 Low가 된 시간을 곱하면 거리를 알 수 있게된다. 이제 초음파 센서로부터 오는 시간을 알기 위해 외부 인터럽트를 알아보자. 1.외부 인터럽트 아트메가 128은 8개의 인터럽트 핀이 있다. 아두이노에서는 PulseIn()함수로 펄스의 시간을 셀 수 있는데, PulseIn함수는 atmega..
2023.03.03