ARM
A31G123ML + Keil uVision : ADC๋ก ์๋ ๋ก๊ทธ ์ผ์๊ฐ ์ฝ๊ธฐ — ๊ฐ๋ณ์ ํญ/์กฐ๋์ผ์ ์ธก์
๊ฒ์๊ต์
2025. 4. 18. 07:51
๋ฐ์ํ
๐ 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 ์ถ๋ ฅ์ผ๋ก ์์ฉ
๋ฐ์ํ