[TM4C123单片机实战] 两路ADC检测,短路报警

如果最终得到的数据是两路数据的差值, 我们可以采用ADC的 Difference 工作模式

#include <stdbool.h>
#include <stdint.h>
#include "inc/hw_memmap.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/pin_map.h"
#include "driverlib/sysctl.h"
#include "user/LCDDriver.h"

#define abs(x) (((x)<0)? -(x):(x))

uint32_t pui32ADC0Value[1]={0};
//这是我们的数据缓存, ADC采样数据存储在这里
void adcConfig(){
	SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC1);
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
	SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD);
	GPIOPinTypeGPIOOutput(GPIO_PORTD_BASE, GPIO_PIN_1);

	GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_3 | GPIO_PIN_2);
//初始化ADC所使用的GPIO	
        ADCSequenceConfigure(ADC1_BASE, 3, ADC_TRIGGER_PROCESSOR, 0);
	ADCSequenceStepConfigure(ADC1_BASE, 3, 0, ADC_CTL_D | ADC_CTL_CH0 |
                             ADC_CTL_IE | ADC_CTL_END);
//这里我们选择了两路差工作模式ADC_CTL_D
	ADCSequenceEnable(ADC1_BASE, 3);
	ADCIntClear(ADC1_BASE, 3);
}//使能

bool isRisk(){//数据采集程序
	GPIOPinWrite(GPIO_PORTD_BASE, GPIO_PIN_1, 255);

	ADCProcessorTrigger(ADC1_BASE, 3);
	while(!ADCIntStatus(ADC1_BASE, 3, false));
	ADCIntClear(ADC1_BASE, 3);
	ADCSequenceDataGet(ADC1_BASE, 3, pui32ADC0Value);
	//AIN0(PE3) -  AIN1(PE2)
	LCD_Draw_Num(pui32ADC0Value[0],0,7,0,false);
	LCD_Draw_Line_Clear(6,false);
	if(pui32ADC0Value[0] > 500) return true;
	else return false;
}

关于ADc的引脚, 参考reference

关于ADC的模式:

参考reference

时间: 2024-10-03 13:45:08

[TM4C123单片机实战] 两路ADC检测,短路报警的相关文章

STM32F207 两路ADC连续转换及GPIO模拟I2C给Camera Sensor初始化参数

1.为了更好的方便调试,串口必须要有的,主要打印一些信息,当前时钟.转换后的电压值和I2C读出的数据. 2.通过GPIO 模拟I2C对镁光的MT9V024进行参数初始化.之前用我以前公司SP0A19芯片,是I2C是8位宽的,而镁光的地址是8位,而数据位是16个字节, 其实不管是8位还是16位,每次发送都是8个字节然后一个应答位,所以只要稍微改下代码即可. 3.实现两路ADC连续转换,两路ADC转换:一路是检测锂电池电压:一路是检测压力传感器,其实都是检测电压,当检测到压力为零,并累计多长时间后进

软件工程(C编码实践篇)课程总结——我的第一次代码实战之路

课程内容来自网易云课堂-软件工程(C编码实践篇)--中国科学技术大学孟宁老师主讲! 作者:魏红 魏红<软件工程(C编码实践篇)>MOOC课程作业http://mooc.study.163.com/learn/USTC-1000002006 一.心得体会 在写这篇博客时,我的心情不是想象中的如释重负,而是感慨和激动.作为一名理科生,代码对于我来说,陌生.遥远.不曾触及,所以当我开始接触到实验,需要自己动手的时候,我就崩溃了.哪怕是最简单的hello world小程序,我都折腾了好久,第一次的实验

硬币问题——固定终点的最长路和最短路

问题描述: 有n种硬币,面值分别为V1,V2...,Vn,每种都有无限多.给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值.0 <= n <= 100, 0 <= S <= 10000, 1 <= Vi <= S. 分析: 本题的本质还是DAG上的路径问题.我们把每种面值看作一个点,表示"还需要凑足的面值",则初始状态为S,目标状态为0.若当前的状态i,每使用一个硬币j,状态便转移到i-Vj.这个模型和嵌套矩形一

FFmpeg 学习之 定时器解码两路视频并进行对比

两路视频跳帧的一些想法: 关于多路视频,如果不涉及对比的话,多线程是最佳选择,来一路视频的话,直接开一个线程去显示处理,非常有效,方便. 但如果说要求两路视频的图像的相似度,那么便牵扯到解码同步问题,如果说一路是本地视频文件,一路是网络视频流,那么很可能由于其帧型的不同,导致解码效率不同,相同序号的帧出现在两个时刻.感觉对比的话,应该是在线程里,当然,鉴于计算量比较大,比较的时候可以再开线程,此为后话. 再说同步的问题,可设置标志位,标定帧号.由于解码本地视频丢帧率较小,且由于帧型而导致解码效率

FMC子卡模块学习资料:FMC150-两路250Msps AD、两路500Msps DA FMC子卡模块150

FMC150-两路250Msps AD.两路500Msps DA FMC子卡模块 一.板卡概述 ADC采用TI的ADS62P49,2通道250M,14bit,共1片: DAC采用ADI的AD9122,2通道,16bit,可达1.2G,共1片: 时钟采用AD9516,支持板上时钟和外接时钟: 共6个SSMB接口,1个FMC/LPC接口 ADS62P49 特性 大输出采样速率:250MSPS 与 ADS62P49 引脚兼容 可变输出分辨率 具有 14 位输出的高分辨率猝发模式:低 IF 时为 73d

两路归并排序

链表两路归并 #include<iostream> #include<assert.h> using namespace std; struct node { int val; node * next; node(int v) { val=v; next=NULL; } }; node * merge(node* list1 , node * list2) { assert(list1!=NULL&&list2!=NULL);//括号中是希望出现的正确的情况  no

混杂设备驱动--输出两路PWM

尝试用2440的TOUT0和TOUT1输出PWM驱动两个电机,电机的硬件驱动电路是使用L298N. 先单独测试TOUT0的PWM输出: (1)驱动程序:使用misc混杂设备驱动模型,当然也可以使用基本的字符设备模型. 使用misc设备驱动模型步骤: ①初始化一个struct miscdevice结构体:主要是file_operation结构体成员和name ②使用misc_register和misc_deregister注册和注销这个结构体 代码示例: #include <linux/modul

[TM4C123单片机实践] 配置SSI并驱动DAC7811显示正弦波

这几天做电赛学习了TM4C123 单片机, 总得来说, 结合官方例程与参考手册, 加上一个好的示波器, 效率会高很多. TI的SSI 实际上就是SPI. 我门先熟悉一下SPI SPI ,就是在主机与从机之间用来传输数据的 通过TX, RX传输数据, 通过CS 片选信号线激活主机与从机的通信, 通过CLK 时钟信号控制频率 #include <stdbool.h> #include <stdint.h> #include "inc/hw_memmap.h" #in

nRF51822 的两路 PWM 极性

忙了一阵这个PWM,玩着玩着终于发现了些规律.Nordic 也挺会坑爹的. nRF51822 是没有硬件 PWM 的,只能靠一系列难以理解的 PPI /GPIOTE/TIMER来实现,其实我想说,我醉了. 幸好SDK有这个的demo,不然真的很醉.这里说的是SDK9.0.0. 即便是有SDK,相信很多人都像我一样,看下去会觉得晕头转向的,不过知道几个函数的应用就可以了. 先记下怎么开始用一个PWM.这里我要用2路极性相反的PWM. 先来初始化两个个PWM实例,名字是PWM1.PWM2,用硬件Ti