查看VR1鏈接的絲印:XadcAIN3
設置相關寄存器
使用的是通道3,要設置相應的通道寄存器
#include "exynos_4412.h"int main()
{unsigned int AdcValue = 0;/*將ADC的精度設置成 12bit*/ADCCON = ADCCON | (1 << 16);/*使能ADC的分頻器*/ADCCON = ADCCON | (1 << 14);/*設置ADC的分頻值, ADC的時鐘頻率 = PLCK/(19+1) = 5MHZ * ADC的轉換頻率 = 5MHZ / 5 = 1MHZ*/ADCCON = ADCCON & (~(0xFF << 6)) | (19 << 6);/*關閉待機模式,使能正常模式*/ADCCON = ADCCON & (~(1 << 2));/*關閉讀使能通過轉換AD*/ADCCON = ADCCON & (~(1 << 1));/*選擇轉換通道 3通道*/ADCMUX = 3;while(1) {/*開始轉換*/ADCCON = ADCCON | 1;/*等待轉換完成,因為轉換需要時間*/while(!(ADCCON & (1 << 15)));/*讀取轉換結果*/AdcValue = ADCDAT & 0xFFF;/*將結果轉換成實際的電壓值 mv 1800(mv) / (2^12-1) = 0.44*/AdcValue = AdcValue * 0.44;printf("AdcValue = %dmv\n", AdcValue);}return 0;
}
ADC實現小作業
1.編程實現通過LED狀態顯示當前電壓范圍
注:
電壓在1501mv~1800mv時,LED2、LED3、LED4、LED5點亮
電壓在1001mv~1500mv時,LED2、LED3、LED4點亮
電壓在501mv~1000mv時,LED2、LED3點亮
電壓在0mv~500mv時,LED2閃爍
#include "exynos_4412.h"/* 點亮LED2 */
#define LED2_ON (GPX2.DAT = GPX2.DAT | (1 << 7))/* 熄滅LED2 */
#define LED2_OFF (GPX2.DAT = GPX2.DAT & (~(1 << 7)))/* 點亮LED3 */
#define LED3_ON (GPX1.DAT = GPX1.DAT | 1)/* 熄滅LED3 */
#define LED3_OFF (GPX1.DAT = GPX1.DAT & (~ 1))/* 點亮LED4 */
#define LED4_ON (GPF3.DAT = GPF3.DAT | (1 << 4))/* 熄滅LED4 */
#define LED4_OFF (GPF3.DAT= GPF3.DAT & (~(1 << 4)))/* 點亮LED5 */
#define LED5_ON (GPF3.DAT = GPF3.DAT | (1 << 5))/* 熄滅LED5 */
#define LED5_OFF (GPF3.DAT = GPF3.DAT & (~ (1 << 5)))/*循環延時*/
void Delay(unsigned int Time) {while(Time--);
}/*初始化呢ADCCON寄存器*/
void ADC_CON(void) {/*將ADC的精度設置成 12bit*/ADCCON = ADCCON | (1 << 16);/*使能ADC的分頻器*/ADCCON = ADCCON | (1 << 14);/*設置ADC的分頻值, ADC的時鐘頻率 = PLCK/(19+1) = 5MHZ * ADC的轉換頻率 = 5MHZ / 5 = 1MHZ*/ADCCON = ADCCON & (~(0xFF << 6)) | (19 << 6);/*關閉待機模式,使能正常模式*/ADCCON = ADCCON & (~(1 << 2));/*關閉讀使能通過轉換AD*/ADCCON = ADCCON & (~(1 << 1));/*選擇轉換通道 3通道*/ADCMUX = 3;
}int main()
{unsigned int AdcValue = 0;ADC_CON();GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);GPX1.CON = GPX1.CON & (~(0xF)) | (0x1);GPF3.CON = GPF3.CON & (~(0xFF << 16)) | (0x11 << 16);while(1) {/*開始轉換*/ADCCON = ADCCON | 1;/*等待轉換完成,因為轉換需要時間*/while(!(ADCCON & (1 << 15)));/*讀取轉換結果*/AdcValue = ADCDAT & 0xFFF;/*將結果轉換成實際的電壓值 mv 1800(mv) / (2^12-1) = 0.44*/AdcValue = AdcValue * 0.44;/*打印電壓值*/printf("AdcValue = %dmv\n", AdcValue);if(AdcValue >= 1501 && AdcValue <= 1800) {/*LED2 LED3 LED4 LED5 點亮*/LED2_ON;LED3_ON;LED4_ON;LED5_ON;} else if (AdcValue >= 1001 && AdcValue <= 1500) {/*LED2 LED3 LED4 點亮*/LED5_OFF;LED2_ON;LED3_ON;LED4_ON;} else if (AdcValue >= 501 && AdcValue <= 1000) {/*LED2 LED3 點亮*/LED4_OFF;LED5_OFF;LED2_ON;LED3_ON;} else if (AdcValue >= 0 && AdcValue <= 500) {/*LED2 閃爍*/LED3_OFF;LED4_OFF;LED5_OFF;LED2_ON;Delay(1000000);LED2_OFF;Delay(1000000);} }return 0;
}