UNIT 18 AD Converter Test 로봇 SW 교육원 조용수
학습 목표 조도 센서 값 읽기 가변 저항 값 읽기 가변 저항 값 읽어서 LED에 적용
조도 센서 값 읽기 APDS-9007 : Ambient Light Photo Sensor with Logarithmic Current Output
ADC Init void SYS_Init(void) { /* Unlock protected registers */ SYS_UnlockReg(); /* Enable IP clock */ CLK->APBCLK |= CLK_APBCLK_UART0_EN_Msk; CLK->APBCLK |= CLK_APBCLK_ADC_EN_Msk; /* Update System Core Clock */ /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock and cyclesPerUs automatically. */ SystemCoreClockUpdate(); /* Set P3 multi-function pins for UART0 RXD and TXD */ SYS->P3_MFP = SYS_MFP_P30_RXD0 | SYS_MFP_P31_TXD0; /* Set P1.0 to AIN0 function */ SYS->P1_MFP = SYS_MFP_P10_AIN0 ; /* Lock protected registers */ SYS_LockReg(); }
ADC Init ADC Channel 0 Settings void ADC_Init() { ADC->ADCR &= ~(0x2 << 2); // Single Mode ADC->ADCR |= 0x1 ; // ADEN Set }
ADC Init Read ADC Channel 0 int value0 = 0; ADC->ADCHER = (0x1 << 0) ; // ADC Channel 0 Set ADC->ADCR |= 0x1 << 11 ; // Start Convert while(ADC->ADSR & (0x1 << 3)); value0 = ADC->ADDR[0] & 0xFFFF; printf("Photo Sensor Value 11 : "); printf("%d \n", value0);
ADC Init Set Interrupt Handler void ADC_IRQHandler() { int value0 = 0; NVIC->ICPR[0] = (0x1 << 29); ADC->ADSR &= ~0x1; // Clear Interrupt ADC->ADCR &= ~(0x1 <<1) ; // Disable Interrupt value0 = ADC->ADDR[0] & 0xFFFF; printf("ADC(Interrupt) : "); printf("%d \n", value0); }
ADC Init Start ADC using Interrupt Int main() { … //NVIC_EnableIRQ(ADC_IRQn); NVIC->ISER[0] = (0x1 << 29); printf("Stat ADC\n"); ADC->ADCHER = 0x1 ; // ADC Channel 0 Set ADC->ADCR |= (0x1 <<1) ; // Enable Interrupt ADC->ADCR |= 0x1 << 11 ; // Start Convert }
가변 저항 값 읽기 VCC , GND , ADC1 연결
가변 저항 값 읽기 ADC 0, 1 선택 void SYS_Init(void) { /* Unlock protected registers */ SYS_UnlockReg(); … /* Set P1.0 to AIN0 function */ SYS->P1_MFP = SYS_MFP_P10_AIN0 | SYS_MFP_P11_AIN1; /* Lock protected registers */ SYS_LockReg(); }
가변 저항 값 읽기 ADC 0, 1 선택 void ADC_IRQHandler() { int value0 = 0; NVIC->ICPR[0] = (0x1 << 29); ADC->ADSR |= 0x1; // Clear Interrupt ADC->ADCR &= ~(0x1 <<1) ; // Disable Interrupt value0 = ADC->ADDR[0] & 0xFFFF; value1 = ADC->ADDR[1] & 0xFFFF; printf("ADC(Interrupt) : "); printf("%d , %d\n", value0, value1); }
가변 저항 값 읽기 ADC 0, 1 선택 printf("Stat ADC\n"); ADC->ADCHER = (0x3 << 0) ; // ADC Channel 0,1 Set ADC->ADCR |= (0x1 <<1) ; // Enable Interrupt ADC->ADCR |= 0x1 << 11 ; // Start Convert
가변 저항 값 읽기 Single Cycle Scan Mode void ADC_Init() { ADC->ADCR &= ~(0x3 << 2); // Single Mode ADC->ADCR |= 0x2 << 2 ; // Single Cycle Scan Mode ADC->ADCR |= 0x1 ; // ADEN Set }
가변 저항 값 읽어서 LED에 적용 가변 저항 값 읽어서 구간 별로 4개의 LED On 0 ~ 10 : All OFF