전체 글(32)
-
Verilog
반 가산기 설계 반가산기는 이전 자리수에서 올라온 올림수(carry)를 고려하지 않고 입력 두개만 고려하는 가산기를 반 가산기라 한다. 진리표 : x y co s 0 0 0 0 0 1 0 1 1 0 0 1 1 1 1 0 논리식 s = x ^ y; // sum co = x & y; //carry out 모듈 정의 //1 module HA( input wire x, y, output wire co, s, reg co, s, ); //2 module HA(x,y,co,s); intput x, y; output co, s; 모듈은 c언어의 함수 선언과 유사하게 선언한다. 1번처럼 모듈을 선언할 때 내부 변수를 넣어도 되고 2번처럼 먼저 선언한 뒤 나중에 wire나 reg등을 따로 정의해도 된다. 모델링 방법 구..
2023.03.08 -
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