社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 5125|回复: 14

[求助] LM3S9b92里面ADC的初学例程,帮看下哪不对呢

[复制链接]

81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2011-2-15 09:38:48 | 显示全部楼层 |阅读模式

#include "inc/hw_types.h"
#include "inc/hw_memmap.h"
#include "driverlib/adc.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
int main(void)
{ unsigned long ulValue=1000;
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_osc | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);//设置时钟频率为16M
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);  //使能PF口
    SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);    //使能ADC
 GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_2);     //  设置PF2口为输出模式

  ADCSequenceConfigure(ADC_BASE,0,ADC_TRIGGER_PROCESSOR,0);//配置ADC,基准源是处理器发生
  ADCSequenceStepConfigure(ADC_BASE,0,0,ADC_CTL_IE|ADC_CTL_END|ADC_CTL_CH5);//配置ADC,通道5采样
  ADCSequenceEnable(ADC_BASE,0);  //使能采样
  while(1)
  {  
  ADCProcessorTrigger(ADC_BASE,0);//开始采样
  while(!ADCIntStatus(ADC_BASE,0,false));//等待采样状态为结束。
  ADCSequenceDataGet(ADC_BASE,0,&ulValue)  ;  //获取采样值
  if(ulValue<500) //判断采样值,控制led等亮灭
   {GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0x04);
   }
   else {GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0);
    
   }   

  }
}

未命名1.jpg

[ 本帖最后由 慢慢来 于 2011-2-15 11:44 编辑 ]
此帖出自最爱TI M4论坛


81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2011-2-15 09:39:36 | 显示全部楼层
我用的PB4作为输入模拟信号通道,得到的ulValue老是0


回复

使用道具 举报

78

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2011-2-15 11:02:35 | 显示全部楼层
你没有把PB4配置为ADC功能,肯定读不会来数据啊。


回复

使用道具 举报

81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2011-2-15 11:16:27 | 显示全部楼层

回复 板凳 rdh134 的帖子

这个也用配置吗?好像选择了通道就把PB4作为默认ADC功能了吧


回复

使用道具 举报

1万

TA的帖子

15

TA的资源

版主

Rank: 6Rank: 6

发表于 2011-2-15 12:13:31 | 显示全部楼层

回复 4楼 慢慢来 的帖子

用的,就是配置下输入输出,多少HZ的,再使能一下端口时钟
http://shop34182318.taobao.com/


回复

使用道具 举报

81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2011-2-15 12:55:06 | 显示全部楼层

回复 5楼 ddllxxrr 的帖子

  1. void adcinit(void) { &lt;/P&gt; &lt;P&gt;SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); //使能ADC &lt;/P&gt; &lt;P&gt;SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); //设置采样速度 ADCSequenceDisable(ADC_BASE,0); &lt;/P&gt; &lt;P&gt;ADCSequenceConfigure(ADC_BASE,0,ADC_TRIGGER_PROCESSOR,0);//配置ADC,基准源是处理器发生 &lt;/P&gt; &lt;P&gt;ADCSequenceStepConfigure(ADC_BASE,0,0,ADC_CTL_IE|ADC_CTL_END|ADC_CTL_CH5);//配置ADC,通道5采样 } &lt;/P&gt; &lt;P&gt;int main(void) {&lt;/P&gt; &lt;P&gt;&nbsp;u nsigned long ulValue=1000; &lt;/P&gt; &lt;P&gt;SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);//设置时钟频率为16M &lt;/P&gt; &lt;P&gt;SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF); //使能PF口 &lt;/P&gt; &lt;P&gt;SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB); //使能PB口 &lt;/P&gt; &lt;P&gt;GPIOPinTypeADC(GPIO_PORTB_BASE,GPIO_PIN_4); &lt;/P&gt; &lt;P&gt;GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_2); // 设置PF2口为输出模式&lt;/P&gt; &lt;P&gt;&nbsp;adcinit(); &lt;/P&gt; &lt;P&gt;ADCSequenceEnable(ADC_BASE,0); //使能采样 &lt;/P&gt; &lt;P&gt;while(1) &lt;/P&gt; &lt;P&gt;{ &lt;/P&gt; &lt;P&gt;ADCProcessorTrigger(ADC_BASE,0);//开始采样 &lt;/P&gt; &lt;P&gt;while(!ADCIntStatus(ADC_BASE,0,false)) { }//等待采样状态为结束。&lt;/P&gt; &lt;P&gt;&nbsp;ADCSequenceDataGet(ADC_BASE,0,&amp;amp;ulValue);//获取采样值 if(ulValue!=0) //判断采样值,控制led等亮灭&lt;/P&gt; &lt;P&gt;&nbsp;{ &lt;/P&gt; &lt;P&gt;&nbsp;&lt;/P&gt; &lt;P&gt;GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0x04); &lt;/P&gt; &lt;P&gt;} else&lt;/P&gt; &lt;P&gt;&nbsp;{ &lt;/P&gt; &lt;P&gt;GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_2,0); }&lt;/P&gt; &lt;P&gt;&nbsp;} &lt;/P&gt; &lt;P&gt;}
复制代码
这是我改的,看看还哪不对,得到的值还是0,端口时钟是不是就是采样速度

[ 本帖最后由 academic 于 2011-3-16 12:13 编辑 ]


回复

使用道具 举报

983

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2011-2-15 14:08:41 | 显示全部楼层

回复 6楼 慢慢来 的帖子

SysCtlClockSet(SYSCTL_SYSDIV_5 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
这个将时钟频率设为40MHz会不会有什么问题呢?


回复

使用道具 举报

81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2011-2-15 14:25:13 | 显示全部楼层

回复 7楼 academic 的帖子

那该设多少?其他的没什么忘设置的了吧?


回复

使用道具 举报

983

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2011-2-15 15:56:23 | 显示全部楼层
设置成分频4,跑50MHz,试试
SysCtlClockSet(SYSCTL_SYSDIV_4 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
还有LM9B92 是属于DustDevi class的吗?


回复

使用道具 举报

81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2011-2-16 11:14:03 | 显示全部楼层

回复 9楼 academic 的帖子

效果还是那样,LM9b92我也不清楚属不属于沙尘暴系列的


回复

使用道具 举报

983

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2011-2-16 11:54:23 | 显示全部楼层

回复 10楼 慢慢来 的帖子

我也是个菜鸟,我认真看了一下你的程序,我发现在很多地方都应该用ADC0,而你用的是ADC,你看看是不是这个问题?


回复

使用道具 举报

81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2011-2-16 13:29:18 | 显示全部楼层

回复 11楼 academic 的帖子

谢谢回答哈,调出来了,就是通道弄错了


回复

使用道具 举报

983

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2011-2-16 18:44:15 | 显示全部楼层
原帖由 慢慢来 于 2011-2-15 12:55 发表
void adcinit(void)
{   SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC);  //使能ADC
    SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); //设置采样速度
ADCSequenceDisable(ADC_BASE,0);
ADCSequenceConfigure ...

我现在不明白了,
void
ADCSequenceDisable(unsigned long ulBase, unsigned long ulSequenceNum)
{
    //
    // Check the arugments.
    //
    ASSERT((ulBase == ADC0_BASE) || (ulBase == ADC1_BASE));
    ASSERT(ulSequenceNum < 4);

    //
    // Disable the specified sequences.
    //
    HWREG(ulBase + ADC_O_ACTSS) &= ~(1 << ulSequenceNum);
}
第一个参数应该是ADC0_BASE 或者 ADC1_BASE,你直接写ADC_BASE就能行?

[ 本帖最后由 academic 于 2011-2-16 18:46 编辑 ]


回复

使用道具 举报

81

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2011-2-17 09:03:42 | 显示全部楼层

回复 13楼 academic 的帖子

可以的,我两种都试试了,都可以,直接写ADC_BASE默认的就是ADC0_BASE,如果使能ADC1,就必须都写ADC1_BASE了


回复

使用道具 举报

983

TA的帖子

0

TA的资源

纯净的硅(中级)

Rank: 5Rank: 5

发表于 2011-2-19 21:09:53 | 显示全部楼层

回复 14楼 慢慢来 的帖子

哦,是这样啊。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

小黑屋|手机版|Archiver|电子工程世界 ( 京ICP证 060456

GMT+8, 2017-11-18 23:33 , Processed in 0.510577 second(s), 21 queries , Redis On.

快速回复 返回顶部 返回列表