๋ฐ์ํ
๐ A31G123ML + Keil uVision โ ADC๋ก ์๋ ๋ก๊ทธ ์ผ์๊ฐ ์ฝ๊ธฐ
์ด๋ฒ ํธ์์๋ ABOV A31G123ML์ ๋ด์ฅ ADC๋ฅผ ํ์ฉํด ๊ฐ๋ณ์ ํญ์ด๋ ์กฐ๋์ผ์(LDR) ๋ฑ์ ์๋ ๋ก๊ทธ ์ ๋ ฅ๊ฐ์ ์ฝ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ UART๋ก ์๋ฆฌ์ผ ์ถ๋ ฅํ๋ ์ค์ต์ ์งํํฉ๋๋ค.
๐งฐ ์ค๋น๋ฌผ
- ABOV A31G123ML ๋ณด๋
- ๊ฐ๋ณ์ ํญ ๋๋ LDR ์กฐ๋์ผ์
- 10kฮฉ ์ ํญ
- USB to UART ๋ชจ๋
๐ ํ๋ก ์ฐ๊ฒฐ
- ์ผ์ ์ถ๋ ฅ โ AIN0 (P2.0)
- GND โ ์ผ์ ํ๋จ
- 5V โ ์ผ์ ์๋จ
๐ป ์ฝ๋ ์์: ADC ๊ฐ ์ฝ๊ณ UART๋ก ์ถ๋ ฅ
#include "A31G123.h"
void uart_send(char c) {
while (!(UART1->STAT & (1 << 1)));
UART1->TXD = c;
}
void uart_print(const char* str) {
while (*str) uart_send(*str++);
}
void uart_print_num(uint16_t value) {
char buf[10];
sprintf(buf, "%d\r\n", value);
uart_print(buf);
}
void uart_init(void) {
SYSCON->SYSAHBCLKCTRL |= (1 << 12);
UART1->BAUD = 52;
UART1->CTRL = (1 << 0) | (1 << 2);
}
void adc_init(void) {
SYSCON->SYSAHBCLKCTRL |= (1 << 24); // ADC CLK enable
ADC->CR = (1 << 0); // AIN0 ์ ํ
ADC->CTRL = (1 << 0); // Enable ADC
}
uint16_t adc_read(void) {
ADC->CR |= (1 << 24); // Start
while (!(ADC->STAT & (1 << 0))); // ์๋ฃ ๋๊ธฐ
return ADC->DR & 0x3FF; // 10๋นํธ ๊ฒฐ๊ณผ
}
int main(void) {
uart_init();
adc_init();
while (1) {
uint16_t value = adc_read();
uart_print("ADC Value: ");
uart_print_num(value);
for (volatile int i = 0; i < 800000; i++);
}
}
โ ๊ฒฐ๊ณผ ํ์ธ
- ํฐ๋ฏธ๋(9600bps)์์ "ADC Value: xxxx" ํํ๋ก ์ถ๋ ฅ๋จ
- ์กฐ๋ ๋ณํ or ๊ฐ๋ณ์ ํญ ํ์ ์ ๋ฐ๋ผ ๊ฐ์ด ๋ณํํจ
๐ ๋ง๋ฌด๋ฆฌ
์ด๋ฒ ํธ์์๋ ADC๋ฅผ ์ฌ์ฉํ์ฌ ์ผ์๊ฐ์ ์ธก์ ํ๊ณ ,
์ด๋ฅผ UART๋ก ์ค์๊ฐ ์ถ๋ ฅํ๋ ํ๋ฆ์ ์ตํ์ต๋๋ค.
๋ค์์ ์ด ๊ฐ์ ๊ธฐ์ค๊ฐ๊ณผ ๋น๊ตํด ๋์ ์ ์ดํ๊ฑฐ๋,
PWM ์ถ๋ ฅ์ผ๋ก ์์ฉ
๋ฐ์ํ