目录
ADC介绍
ADC(Analog to Digital Converter)即模数转换器,指一个能将模拟信号转化为数字信号的电子元件。
ADC的分辨率一般以输出二进制数的位数来表示,当最大输入电压一定时,位数越高,分辨率越高; n位的ADC能区分输入电压的最小值为满量程输入的1/2^n; 比如一个12位的ADC,最大输入电压为1.8v,那么该ADC能区分的最小电压为1.8v/2^12≈0.00044v,当转换的结果为m时,则实际的电压值为m*(1.8v/2^12);
ADC实验
ARM的ADC实验可以通过以下步骤进行:
-
确定所使用的ARM芯片的ADC参数,包括采样精度、采样速率、电压参考等。
-
编写相应的C代码,初始化ADC,并进行采样和转换。
-
根据所采集的数据,进行相应的处理和分析,例如数据可视化、信号检测等
基于ARM-A9开发板的寄存器配置ADC实验
#include "exynos_4412.h"
void delay(unsigned int time){
while(time--);
}
int main()
{
//设置ADC转换
ADCCON = ADCCON | (1 <<16);
// 使能分频器
ADCCON = ADCCON | (1 <<14);
// 设置分屏器为
ADCCON = ADCCON & (~(0xFF <<6)) | (19 << 6);
// 关闭待机模式
ADCCON = ADCCON & (~(1 << 2));
// 关闭通过ad转换
ADCCON = ADCCON & (~(1 << 1));
// 选择通道3
ADCMUX = 3;
unsigned int AdcVal = 0;
// 使能LED灯
GPX2.CON = GPX2.CON & (~(0xF << 28)) | (0x1 << 28);
GPX1.CON = GPX1.CON & (~(0xF << 0)) | (0x1 << 0);
GPF3.CON = GPF3.CON & (~(0xFF << 16)) | (0x11 << 16);
while(1){
// 开始转换
ADCCON = ADCCON | 1;
// 等待转换
while(!(ADCCON & (1 << 15)));
// 读取结果
AdcVal = ADCDAT & 0xFFF;
// 将结果转换为MV
AdcVal = AdcVal * 0.44;
if ( AdcVal >= 1501 & AdcVal <= 1800 ){
GPX2.DAT = GPX2.DAT | (1 << 7);
GPX1.DAT = GPX1.DAT | (1 << 0);
GPF3.DAT = GPF3.DAT | (1<< 4);
GPF3.DAT = GPF3.DAT | (1 << 5);
}
if ( AdcVal >= 1000 & AdcVal <= 1500 ){
GPX2.DAT = GPX2.DAT | (1 << 7);
GPX1.DAT = GPX1.DAT | (1 << 0);
GPF3.DAT = GPF3.DAT | (1<< 4);
GPF3.DAT = GPF3.DAT & (~(1 <<5));
}
if (AdcVal >= 501 & AdcVal <= 1000){
GPX2.DAT = GPX2.DAT | (1 << 7);
GPX1.DAT = GPX1.DAT | (1 << 0);
GPF3.DAT = GPF3.DAT & (~(1<< 4));
GPF3.DAT = GPF3.DAT & (~(1<< 5));
}
if (AdcVal >= 0 & AdcVal <= 500){
GPX2.DAT = GPX2.DAT | (1 << 7);
GPX1.DAT = GPX1.DAT & (~(1 << 0));
GPF3.DAT = GPF3.DAT & (~(1<< 4));
GPF3.DAT = GPF3.DAT & (~(1<< 5));
delay(10000000);
GPX2.DAT = GPX2.DAT & (~(1 <<7));
delay(10000000);
}
}
return 0;
}
RTC介绍
ARM的RTC(实时时钟)是一种低功耗时钟设备,通常用于计算机、嵌入式系统和其他电子设备中。RTC的主要作用是提供准确的时间和日期信息,甚至在系统关闭或断电时也能继续运行。
ARM处理器通常内置有RTC,它可以提供准确的实时时钟和日期信息。RTC通常由一个晶体振荡器和一个计数器组成,晶体振荡器用于提供时钟信号,计数器用于计数。
ARM的RTC通常有以下特点:
-
低功耗:RTC使用非常少的电量,通常在微安级别。
-
高稳定性:RTC使用晶体振荡器作为时钟源,保持高精度的时序稳定性。
-
精确度高:RTC通常具有高精度的时钟源,能够提供准确的日期和时间信息。
-
能够在系统关机或断电时保持时间信息:RTC内置有电池备份电源,即使在系统关闭或断电时也能继续运行。
在ARM处理器中使用RTC,可以实现各种应用,例如定时、日历、时间戳等。RTC还可以用于电子设备的电源管理,以及控制其他设备的开关时间。
基于ARM-A9开发板的寄存器配置RTC实验
#include "exynos_4412.h"
int main()
{
unsigned int Oldsec = 0, Newsec = 0;
//使能RTC控制
RTCCON = RTCCON | 1;
//校准时间
RTC.BCDYEAR = 0x023; //000000100011 2023
RTC.BCDMON = 0x1; //1
RTC.BCDDAY = 0x5; //5
RTC.BCDWEEK = 0x7; //星期四
RTC.BCDHOUR = 0x11; //11
RTC.BCDMIN = 0x32; //32
RTC.BCDSEC = 0x50; //50s
//关闭RTC控制
RTCCON = RTCCON & 0;
while(1)
{
Newsec = RTC.BCDSEC;
if(Newsec != Oldsec)
{
printf("%x-%x-%x %x %x:%x:%x\n",RTC.BCDYEAR,RTC.BCDMON,RTC.BCDDAY,RTC.BCDWEEK,RTC.BCDHOUR,RTC.BCDMIN,RTC.BCDSEC);
Oldsec = Newsec;
}
}
return 0;
}
PWM介绍
PWM(Pulse Width Modulation)是一种调节脉冲信号占空比的方法,常用于控制电机、LED灯等电路的亮度或速度等参数。在ARM处理器中,一些GPIO引脚有特殊的PWM功能,通过编程可以实现PWM信号的输出。
ARM处理器的PWM输出主要有以下几个方面的参数:
-
频率(Frequency):PWM信号的频率是可以调节的,并且常用的频率有几个标准的值可供选择。
-
占空比(Duty Cycle):PWM信号的占空比决定了信号高电平和低电平的持续时间,从而影响了PWM信号控制的电路的亮度或速度等参数。
-
时钟源(Clock Source):PWM信号的频率需要一个时钟源作为基准,ARM处理器的时钟源有内部时钟、外部时钟等多种选择。
-
输出通道(Output Channel):ARM处理器的PWM功能通常支持多个输出通道,每个通道可以控制一个电路的PWM信号。
ARM处理器的PWM功能可以通过配置GPIO引脚,设置PWM信号的频率、占空比等参数,使得电路可以根据PWM信号的控制发生相应的变化,如电机运动速度的变化、LED灯亮度的变化等。需要注意的是,不同的ARM处理器可能会有不同的PWM输出配置和驱动程序,需要根据具体的硬件平台和应用需求进行选择和开发。
基于ARM-A9开发板的寄存器配置PWM实验
#include "exynos_4412.h"
void delay(unsigned int time)
{
while(time --);
}
int main()
{
//GPD0_0设置PWM0输出功能
GPD0.CON = GPD0.CON & (~(0xF)) | (0x2);
//PWM0一级分频 100倍
PWM.TCFG0 = PWM.TCFG0 & (~(0xFF)) | (99);
//PWM0二级分频 1倍 PCLk/(99+1)/(0+1) = 1MHz
PWM.TCFG1 = PWM.TCFG1 & (~(0xF));
//设置PWM0自动重装
PWM.TCON = PWM.TCON | (1<<3);
//设置周期 1000
PWM.TCNTB0 = 1000;
//占空比 60%
PWM.TCMPB0 = 600;
//手动装载
PWM.TCON = PWM.TCON | (1 << 1);
//关闭手动装载
PWM.TCON = PWM.TCON & (~(1 << 1));
//使能PWM0
PWM.TCON = PWM.TCON | 1;
while(1)
{
PWM.TCON = PWM.TCON | 1;
delay(100000);
PWM.TCON = PWM.TCON & (~(1));
delay(100000);
}
return 0;
}