openmmoo 发表于 2012-10-21 12:34:02

关于Atmega8L使用红外库时找不到TCCR2A TCCR2B OCR2B及红外电路问题求助!

本帖最后由 openmmoo 于 2012-10-21 12:33 编辑

使用atmega8L制作arduino最小系统,接红外电路中又遇到了不少问题,来求指点:
1、atmega8l使用红外库找不到TCCR2A TCCR2B OCR2B的问题。
atmega8l最小系统使用极客工坊的 红外库时,提示找不到TCCR2A TCCR2B OCR2B,网上查了一下,可能是atmega8系统的bootloader系统太老,没定定义这几个寄存器。
在红外库的IRremote.cpp 文件中发现其包含了avr的interrupt.h文件,就在目录中找到此文件,在里面定义TCCR2A TCCR2B OCR2B这三个常量,编译通过。
现在问题:我对arduino不太熟,这样定义宏常量,可以吗?因为我的硬件电路方面还有问题,下面将说到,所以我不能测试这个编译好的程序是否能正常运行,求高手指正一下。

2、单片机收不到红外信号。
   下图是检测红外接收头(0038)是否可以接收信号(由于没有找红外接收头,下图用一个三极管代替,左一脚是out,中间是Gnd,右边脚是vcc)。当有信号时,二极管根据信号闪烁。
   
把上图中的电路改装后加到下面的原理图中,连到单片机。

   电路原理图是网上找的,用的是0038红外接收头,r16我用的是120n,r17我用的10k的可变电阻,调到最大,下面是面包板图:


面包板中取消了10k的电阻,因为加了10k电阻后,led1长亮。
以下是代码:
#include <IRremote.h>
#include <IRremoteInt.h>
int RECV_PIN = 10;
int LED =9;

IRrecv irrecv(RECV_PIN);

decode_results results;

void setup()
{
pinMode(LED,OUTPUT);
Serial.begin(9600);
irrecv.enableIRIn(); // Start the receiver
}

void loop() {
if (irrecv.decode(&results)) {
    Serial.println(results.value, HEX);
    digitalWrite(LED,HIGH);
    delay(1000);
    digitalWrite(LED,LOW);
    irrecv.resume(); // Receive the next value
}
}
以上软硬件应实现以下功能:
当0038接收红外信号,LED1就会闪烁。然后把信号送到单片机的10脚,软件接收到信号,就将Led2点亮1秒。
现在问题:用机顶盒和海尔电扇的遥控LED1闪烁,但是led2就是不亮。不知是硬件还是软件原因,求指点。





312494845 发表于 2012-10-21 20:08:35

{:soso_e146:}不是中断的代码哦……不用库自己写也比较简单

openmmoo 发表于 2012-10-21 21:37:45

用库的话将来扩展方便一点,自已写也没写过!

openmmoo 发表于 2012-10-24 15:48:17

:(没有人遇到过吗?贴了好长时间了!

openmmoo 发表于 2012-10-24 15:48:39

自已来顶起来:D

vp110 发表于 2012-12-8 11:07:56

我使用的是mega8a-pu 也遇到同样的问题

在Atmel 官方看了一下两个器件的手册

mega8a和mega328的寄存器不太一样

openmmoo 发表于 2013-1-15 17:01:43

有解决办法吗?

弘毅 发表于 2013-1-15 17:06:21

openmmoo 发表于 2013-1-15 17:01 static/image/common/back.gif
有解决办法吗?

寄存器不一样,所以需要自己写库了。
页: [1]
查看完整版本: 关于Atmega8L使用红外库时找不到TCCR2A TCCR2B OCR2B及红外电路问题求助!