[ATtiny1616] ADC 함수 만들기
·
b. 임베디드/AVR
ADC 기능과 특징입니다. 기존에 사용하는 ADC들과 큰 차이는 없을 것 같습니다. 블럭 다이어그램입니다. 초기화 방법과 동작 방법이 친절하게 나열되어 있습니다. 이것을 그대로 따라 진행해보면 다음과 같습니다. void adcInit(void) { ADC0.CTRLA = ADC_RESSEL_10BIT_gc | ADC_ENABLE_bm; // 10bit 동작 ADC0.CTRLC = ADC_PRESC_DIV256_gc | ADC_REFSEL_VDDREF_gc; // ADC_PRESC_DIV256_gc } uint16_t adcRead(uint8_t ch) { uint16_t ret; switch(ch) { case 1:ADC0.MUXPOS= ADC_MUXPOS_AIN1_gc;break; case 2:ADC0..
[아두이노] 74HC4051 모듈 사용하기
·
b. 임베디드/아두이노
74HC4051은 멀티플렉서로서 부족한 GPIO를 확장 가능하도록 만든 핀입니다. 근데 4051은 아날로그 즉 ADC도 확장이 가능합니다. 멀티플렉서는 특별한건 많이 없습니다. 용도에 맞게 연결해서 사용만 하면 됩니다. 데이터 시트를 한번 살펴보겠습니다. 일단 기본 특징입니다. 아날로그 입력 범위는 +5V ~ -5V까지입니다. 저항 값이 전압에 따라 달라짐을 확인 할 수 있습니다. 다음은 핀 연결방법입니다. 해당 핀들은 모듈로서 나와 있는 핀이 아니고 IC로서 나와 있는 부분임으로 혼동하시면 안됩니다. 모듈과 IC SYMBOL을 꼭 확인하셔야 합니다. 저의 경우는 Enable핀(Active LOW)과 VEE를 GND에 연결하였습니다. 다음은 S0~S2 입력 신호에 따른 출력채널입니다. 그럼 코드를 작성해..
[ATtiny1616] TCB를 이용한 millis()함수 만들기
·
b. 임베디드/AVR
TCB는 16bit 타이머이고 간단한 기능과 특징들이 정리되어 있습니다. 다음은 블럭다이어그램입니다. CTRLA, CTRLB 레지스터를 이용해서 Clock과 Mode를 설정한다는 것을 유추할 수 있습니다. 다음은 타이머 클럭 로직입니다. 클럭은 CLK_PER나 CLK_TCAn을 이용해서 설정이 가능합니다. 일단 어떤 모드를 사용할지 정해야 하는데 저는 기본적인 Periodic Interupt Mode를 사용할 예정입니다. 모드에 대한 자세한 내용은 데이터시트를 보면 상세히 나와 있습니다. 한번 검토해 보는 것을 추천드립니다. 타이머 설정 코드를 보면 먼저 TCB0.CTRLA 에서 타이머 클럭 및 모드, 타이밍 등등을 미리 설정합니다. void timerInit(void) { // millis Timers..
[ATtiny1616] GPIO 예제
·
b. 임베디드/AVR
이번에는 간단하게 GPIO 설정 및 사용을 해봅니다. 모든 MCU 기본이라 쉽게 접근이 가능할 것으로 예상합니다. 먼저 블럭 다이어그램을 봅니다. DIRn 을 통해서 입력, 출력 여부를 설정해줘야합니다. PORTx.PINnCTRL의 INVEN Bit와 PULLUPEN Bit를 통해서 Invert 출력, 내부 풀업 기능을 설정 가능합니다. void gpioInit(void) { // 출력 PORTA.DIRSET= PIN1_bm; PORTB.DIRSET= PIN0_bm | PIN1_bm; // 입력 PORTA.DIRCLR= PIN4_bm; PORTA.PIN4CTRL |= PORT_PULLUPEN_bm; PORTB.DIRCLR = PIN3_bm; PORTB.PIN3CTRL |= PORT_PULLUPEN_bm;..
[ATtiny1616] 메인 Clock 설정
·
b. 임베디드/AVR
해당 클럭은 다음과 같이 기본 특징이 정리되어 있습니다. 제가 만든 회로에는 별도의 외부 크리스탈이 없어서 내부 오실레이터를 사용합니다. 블럭다이어 그램을 보니 내부에 오실레이터 16/20MHz와, 저전력용 32.768kHz 사용이 가능한걸 확인할수 있습니다. 메인클럭은 CLKCTRL.MCLKCTRLA와 CLKCTRL.MCLKCTRLB 레지스터가 담당하는걸 유추 가능합니다. 클럭은 Configuration Change Protection(일명 CCP)로 보호되어 있기 때문에 별도의 함수를 이용해서 진행해야 합니다. void clockInit(void) { _PROTECTED_WRITE(CLKCTRL.MCLKCTRLA, CLKCTRL_CLKSEL_OSC20M_gc); _PROTECTED_WRITE(CLKC..
[EK-RA2E1] UART 출력
·
b. 임베디드/EK-RA2E1
RA2E1 제품의 경우 SCI라는 설정을 통해서 UART를 설정하도록 했습니다. SCI는 시리얼통신(I2C, SPI 등)을 사용할 수 있도록 모아놨네요 ^^ 먼저 FSP에서 설정한 부분입니다. 스택에서 UART를 추가해줍니다. 설정창에서 세부 내용들을 설정해줍니다. SCI0을 사용하였고 baudrate 는 115200으로 설정하였습니다. 나머지는 쭈욱 보시면 되는데 중요한건 user_uart_callback함수입니다. 쉽게 생각하면 인터럽트라고 보시면 됩니다. 저같은 경우에 Polling 방식으로 동작을 해보고 해당 callback 함수를 사용해봤는데 당연하겠지만 Receivce의 경우 callback함수를 사용하면 쉽게 적용 가능합니다. 설정하는건 크게 어렵지 않습니다. 제가 작성한 소스코드를 전부 올..
[EK-RA2E1] Timer GPT0 사용하기
·
b. 임베디드/EK-RA2E1
RA2E1에서 타이머가 3가지 존재합니다. GPT, AGT, RTC (사실 Cortex M시리즈는 systick 도 존재하는데 사용법을 찾아봤는데 일단 보이질 않아서 패스) 일단 FSP를 사용했고 millis() 함수를 만들기 위해서 일반적인 타이머인 GPT를 사용했습니다. 일단 핀 설정은 하지 않고 Timer overflow interrupt를 이용하고 user_gpt_callback 함수를 만들었습니다. 별도 타이머 파일을 만들어서 다음가 같이 정리했습니다. #include "gpt_timer.h" static volatile uint32_t ms_cnt = 0; uint8_t g_timer_open_state = RESET_VALUE; fsp_err_t init_gpt_timer(timer_ctrl..
[EK-RA2E1] GPIO Output 출력
·
b. 임베디드/EK-RA2E1
컴파일러는 GCC용 ARM을 사용하였고 프로젝트를 생성하면 기본 코드는 생성이 됩니다. 생성 후 FSP를 사용하여 기본 코드를 수정 및 추가합니다. 생성 방법은 CubeIDE를 사용해보신 분이라면 쉽게 가능할 것 같습니다. 몇가지 단점을 찾자면 창이 안보인다거나 FSP Configuration properties 창이 하단에 따로 나와서 약간 UI가 불편하다는 정도네요. 일단 FSP Configuration기본 ui창은 위와 같습니다. 우측은 MCU 전체 맵이 주어지고 좌측은 설정창입니다. 저는 clock은 20MHz XTAL을 사용하였고 Pin탭에서 위와 같이 출력으로 해당 핀을 변경하였습니다. 창 우측 상단에 Generate Project Content를 클릭하면 설정된 소스코드가 만들어집니다. vo..
[EK-RA2E1] 개발보드 기본자료
·
b. 임베디드/EK-RA2E1
최근 모터 제어용으로 사용해보고자 하는 Renesas사의 RA2E1입니다. 전체적으로 MCU수급이 잘 안되는 이유로 다양한 MCU를 접해보고 있습니다. 이번에는 RA2E1인데 제조사측에 지원받아서 한번 사용해보려 합니다. 일단 기본적인 회로도를 첨부합니다. 그리고 해당 MCU에 대한 스펙을 보기 위해서 데이터시트도 함께 첨부합니다. 생소한 용어들이 있어서 스터디가 쫌 힘들지도 모르겠네요 ^^;;;
로봇쟁이