首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在atmega16中输出错误

在atmega16中输出错误
EN

Stack Overflow用户
提问于 2015-12-09 19:51:34
回答 1查看 191关注 0票数 0

我正在尝试用at 16建立一个自动的植物浇水系统。其逻辑是,传感器将在PA0上给出一个模拟输入,并将其与预设的值进行比较,以打开/关闭水泵。

下面是我们使用的代码片段:

代码语言:javascript
运行
复制
#include<avr/io.h>
int adc(void);
void pump(void);
int adc_value;
int main(void)
 {
  DDRC=0x01;                          //Defining PC0 as output
  ADCSRA=0x87;                    //Setting the mode of operation
  ADMUX=0x00;                     //Selection of channel and bit alignment
  while(1)
   {
     adc_value=adc();                //reading moisture level
     pump();                               //Pump activator routine
   }
   return 0;
 }

int adc(void)
{
   int lower_bits,higher_bits,result; 
   ADCSRA |= (1 << ADSC)|(1 << ADIF);  //Turn on conversion and clear flag
   while(ADCSRA & (1 << ADIF) == 0);  //wait for flag
   lower_bits=ADCL;
   higher_bits=ADCH;
   result=lower_bits|(higher_bits<<8);         //Accessing converted value by shifting
   return result;
 }

void pump(void)
 {
  if(adc_value>=700)                                //Pump ON trigger point
   {
     PORTC|=(1<<0);
   }
  else if(adc_value<=600)                        //Pump Off trigger point
   {
     PORTC&=~(1<<0);
   }
 }

密码有什么问题吗?因为燃烧后,我得到了低电压**(0.15**)的湿土和高电压(4.84),从模拟传感器输入,这是好的…。但问题是,在这两种情况下,我都是,电压像0.7 (有时类似于0.15) (我正在使用万用表来测量这个值)。在PC0,干土和湿土的数值没有变化。在这种情况下,实际问题在哪里?电路设计或代码有什么问题吗?

EN

回答 1

Stack Overflow用户

发布于 2015-12-10 07:41:23

你把AREF连接到5V了吗?你另一个类似帖子的线路示意图没有显示出来。

作为附带说明,您可以考虑使用ADLAR,左对齐。然后你只需要看一个字节,因为你似乎并不关心10位的精确性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34187769

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档