这个程序是周立功给的示例程序,我把显示的改为了1602,程序不长哈,大家帮我看下,谢谢
#include "systemInit.h"
#include "lcd1602.h"
#include <hw_types.h>
#include <hw_memmap.h>
#include <hw_ints.h>
#include <hw_sysctl.h>
#include <hw_gpio.h>
#include <hw_timer.h>
#include <interrupt.h>
#include <sysctl.h>
#include <gpio.h>
#include <adc.h>
#include <stdio.h>
#define ADCSequEnable ADCSequenceEnable
#define ADCSequDisable ADCSequenceDisable
#define ADCSequConfig ADCSequenceConfigure
#define ADCSequStepConfig ADCSequenceStepConfigure
#define ADCSequDataGet ADCSequenceDataGet
tBoolean ADC_EndFlag = false; // 定义ADC转换结束的标志
// ADC初始化
void adcInit(void)
{
SysCtlPeriEnable(SYSCTL_PERIPH_ADC); // 使能ADC模块
SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); // 设置ADC采样速率
ADCSequDisable(ADC_BASE, 0); // 配置前先禁止采样序列
// 采样序列配置:ADC基址,采样序列编号,触发事件,采样优先级
ADCSequConfig(ADC_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
// 采样步进设置:ADC基址,采样序列编号,步值,通道设置
ADCSequStepConfig(ADC_BASE, 0, 0, ADC_CTL_D | // 差分输入采样
ADC_CTL_CH1 | // 差分通道1:ADC2和ADC3
ADC_CTL_END |
ADC_CTL_IE);
ADCIntEnable(ADC_BASE, 0); // 使能ADC中断
IntEnable(INT_ADC0); // 使能ADC采样序列中断
IntMasterEnable(); // 使能处理器中断
ADCSequEnable(ADC_BASE, 0); // 使能采样序列
}
// ADC采样
unsigned long adcSample(void)
{
unsigned long ulValue;
ADCProcessorTrigger(ADC_BASE, 0); // 处理器触发采样序列
while (!ADC_EndFlag); // 等待采样结束
ADC_EndFlag = false; // 清除ADC采样结束标志
ADCSequDataGet(ADC_BASE, 0, &ulValue); // 读取ADC转换结果
return(ulValue);
}
// 主函数(程序入口)
int main(void)
{
int iVal;
//char cBuf[30];
jtagWait(); // 防止JTAG失效,重要!
clockInit(); // 时钟初始化:PLL,20MHz
adcInit(); // ADC初始化
initlcd1602();
for (;;)
{
iVal = adcSample(); // ADC采样
//iVal = iVal - 0x1FF; // 转换成差分数值
iVal = (iVal * 3000) / 1024; // 转换成电压值
//sprintf(cBuf, "ADC0 = %d(mV)
", iVal); // 输出格式化
//uartPuts(cBuf); // 通过UART显示结果
display(iVal); //通过1602显示侧得的电压差
SysCtlDelay(1500 * (TheSysClock / 3000)); // 延时约1500ms
}
}
// ADC采样序列0的中断
void ADC_Sequence_0_ISR(void)
{
unsigned long ulStatus;
ulStatus = ADCIntStatus(ADC_BASE, 0, true); // 读取中断状态
ADCIntClear(ADC_BASE, 0); // 清除中断状态,重要
if (ulStatus != 0) // 如果中断状态有效
{
ADC_EndFlag = true; // 置位ADC采样结束标志
}
}
我发现了一个问题,它这个示例程序是在给定1.5v(管教AD3)的固定情况下测的差分电压,另外一个管教AD2通过函数adcSample()得到,我把iVal = iVal - 0x1FF; 这句话注释掉了,那么就是参考电压是0v了,测得的就是外面输入的电压。测试的数据结果就是标题那样,有错误。然后测量的结果是输入3v,0v测得3v,输入0v,0v侧得是随机的数字,有时数据为9左右。。。
如果把参考电压管教也改为通过函数adcSample()得到,该怎么办(我不明白的是adcSample这个函数为什么就是管教AD2的电压值,而不是AD3的电压值),要得到输入管教AD3的电压又该怎样得到
此帖出自
小平头技术问答
没有看到你对 GPIO 的配置呢?GPIOPinTypeADC()
[ 本帖最后由 Study_Stellaris 于 2012-7-20 13:16 编辑 ]一周热门 更多>