本帖最后由 Rain_Personal 于 2024-4-28 18:17 编辑
第十七课模数转换器ADC
1. ADC原理
个人理解有点像递归调用,
使用ADC功能时,Vref引脚的单片机不能悬空,必须接外部参考电压源或者VCC!!! 是不是表明如果不接Vref就会烧毁单片机?
实验箱的采用的是2.5V基准电压
ADC接口需要设置为高阻输入相当于初始化ADC
P1M0 = 0x00; //设置P10为高阻输入
P1M1 = 0x01;
ADCTIM = 0X3F; //ADC内部时序
ADCCFG = 0X2F; //数据右对齐,时钟选择位SYSCLK/2/16最慢
ADC_POWER = 1; //打开adc电源
u16ADC_Read( u8 no )// no 表示通道
{
u16 adcval; //adc数值保存变量
ADC_CONTR &= 0xf0; //清空通道
ADC_CONTR |= no; //选择通道
ADC_START = 1; //开启ADC转化
_nop_(); //空操作指令 intrins.h
_nop_();
while(!ADC_FLAG); //等待ADC转换结束
ADC_FLAG = 0;
adcval = (ADC_RES << 8)+ ADC_RESL; //计算adc的数值高8位 低8位用两个16进制描述12位的ADC值
adc_val = adcval;
return adcval;
}
通道的选择 其中ADC_CHS表示通道,函数调用需要输入对应参数 0000~0111即0~7
实验箱中可以通过按键生成ADC值
SW1~SW16
获取真实电压值的计算方式为
u16 ADC_CAL_Voltage(u16 num)
{
return num*2.5*1000 /4096; // num取值为0-4096 返回值为0-2500
}
第十八课ADC采集电源电压和ADC按键
目的:检测电源电压
CHIPID7内部1.19V参考电压
CHIPID8内部1.19V参考电压
ADC的第15通道会形成固定的1.19V,采集ADC时,会将1.19V转换为参考值比如2048,此时可以根据这个反推Vref参考电压
2048 = 1.19/Vref*4096===>Vref = 1.19/0.5 = 2.38V
ADC按键的原理是,读取ADC的值,判断ADC值,不同的按键会又不同的ADC值,进而判断那个键按下。
本帖最后由 Rain_Personal 于 2024-5-15 20:42 编辑
第十九课 NTC温度采集
1. NTC原理
NTC(Negative Temperature Coefficient)是指随温度上升电阻呈指数关系减小、具有负温度系数的热敏电阻现象和材料。该材料是利用锰、铜、硅、钴、铁、镍、锌等两种或两种以上的金属氧化物进行充分混合、成型、烧结等工艺而成的半导体陶瓷,可制成具有负温度系数(NTC)的热敏电阻。其电阻率和材料常数随材料成分比例、烧结气氛、烧结温度和结构状态不同而变化。现在还出现了以碳化硅、硒化锡、氮化钽等为代表的非氧化物系NTC热敏电阻材料。
检测电阻就可以获取当前温度
横坐标温度,纵坐标电阻
Vout可以根据ADC值测得
那么NTC的电阻R2 = Vout*R1/(Vin-Vout)
再根据R2~温度 反推出来温度。
跳线帽链接红色圆圈中左边两个阵脚,就可以使用NTC测温了,通过手触摸蓝色NTC电阻,就可以改变温度数值,检测对错
第二十课 串口通信
1. 串口通信是将两个设备通过一定的协议进行信息交换。
并行通信和串行通信:每次发送一位数据的称为串行通信,多位一起传输的称为并行通信。
串口通信(Serial Communication), 是指外设和计算机间,通过数据信号线 、地线、控制线等,按位进行传输数据的一种通讯方式。这种通信方式使用的数据线少,在远距离通信中可以节约通信成本,但其传输速度比并行传输低。
接线方式:
接受时钟和发送时钟不一定相同,只要相近就可以的属于异步通讯。接收时钟与发送进钟严格同步,通常要有同步时钟。
全双工 半双工和单工的区别,根据用的几条线,单工是单向发送,只能发不能回。
波特率 表明每秒钟可以发送的数据 例如9600波特率,表示每秒可以发送9600位数据。
串口通讯的距离比较短,一般解决方法为添加专用芯片
应用:通过串口转以太网,WIFI,蓝牙,zigbee等可以做成路由器,网络插座,智能手环等设备。
2. STC32的串口引脚
手册是需要熟练掌握的信息!
实验箱中电路图:
本帖最后由 Rain_Personal 于 2024-5-15 17:58 编辑
哈哈哈,好事发生,给自己放个假
准备回归工作生活,再琢磨琢磨串口通信问题。
Rain_Personal 发表于 2024-4-25 17:39
第四课 新建工程并点亮LED灯
上节课未吃透所遇问题
有点难度,现在都没调试完,怎么自动上电下载程序
学习
本帖最后由 Rain_Personal 于 2024-5-16 22:04 编辑
第二十一课串口应用
串口2的启用方法
void Usart2_Init(void)
{
P_SW2 = 0X80;
P_SW2 |= 0X01; //将串口2 的引脚切换到P46 P47 0X00P10 P11
S2CFG = 0X01;
S2CON = 0X50;
T2L = BRT;
T2H = BRT>>8;
T2x12 = 1;
T2R = 1;
wptr = 0x00;
rptr = 0x00;
busy = 0;
}
void Usart_Isr() interrupt 8
{
if( S2TI )
{
S2TI = 0;
busy = 0;
}
if( S2RI )
{
S2RI = 0;
buffer = S2BUF;
wptr &= 0X0F;
}
}
void Usart2_Send(char dat)
{
while(busy);
busy = 1;
S2BUF = dat;
}
void Usart2_SendStr(char *p)
{
while(*p)
{
Usart2_Send(*p++);
}
}
其中S2BUF 为寄存器地址,可以用于读取和写入
第二十二课 CDC串口通信
无需USB转TTL工具!P30和P31连接电脑D-和D+
STC32G128K支持自动烧录
具体方法之前探索过,流程如下
1)下载.lib库和头文件
2)新建工程,加载lib库文件
3)调用头文件并初始化USB功能
4)设置工程参数,编译选项等
5)首次下载手动进入HID下载模式下载
6)下载完成等待生成CDC串口号,设置ISP软件参数
执行完如上步骤,再也不需要手动进下载模式了,只要ISP软件点一下下载程序就可以自动烧录。
第二十三课 看门狗
复位的主要作用是把单片机内部的特殊功能寄存器置于初始状态,使单片机硬件、软件从一个确定的、唯一的起点开始工作。
看门狗是一个计数器,它的基本功能是在软件问题和程序跑偏后重启系统。看门狗正常工作时会自动计数,程序进程会定时将其归零。如果系统在某个地方卡住了或者跑了,定时器就会溢出,是系统强制复位。
检测bug和意外
软件的可靠性一直是一个关键问题。任何使用软件的人都可能遇到电脑死机或程序失控的问题,这种问题在嵌入式系统中也存在。由于单片机抗干扰能力有限,在工业现场仪器仪表中,经常因电压不稳和电弧干扰而死机。在水表、电表无人值守的情况下,系统因干扰无法重启。为了保证系统在受到干扰后能自动恢复正常,看门狗定时器的使用是非常有价值的。
提高单片机运行可靠性
WDT_CONTR寄存器操作看门狗
CLR_WDT = 1表示喂狗