2017-02-04 12 views
0

Я использую библиотеку IR Remote с чипом attiny45. Коды отлично работают с Arduino, но получают сообщение об ошибке при загрузке на чип attiny45.Программирование чипа attiny45 и инфракрасной библиотеки

#include <IRremote.h> 

int RECV_PIN = 2; 
int led = 1; 
int relay = 0; 

IRrecv irrecv(RECV_PIN); 

decode_results results; 

void setup() 
{ 
    irrecv.enableIRIn(); // Start the receiver 
    pinMode (led, OUTPUT); 
    pinMode (relay, OUTPUT); 
} 

void loop() { 
    if (irrecv.decode(&results)) { 

    switch (results.value) { 
     case 0xff02fd : 
     digitalWrite(led, HIGH); 
     digitalWrite(relay, LOW); 
     break; 

     case 0x1FC42BD : 
     digitalWrite(led, HIGH); 
     digitalWrite(relay, LOW); 
     break; 

     default : 
     digitalWrite(led, LOW); 
     digitalWrite(relay, HIGH); 
     break; 
    } 

    irrecv.resume(); // Receive the next value 
    } 
} 

При загрузке, я получаю следующее сообщение об ошибке: Arduino: 1.8.1 (Windows 7), Совет: "ATtiny25/45/85, Attiny45, Внутренняя 8 МГц"

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::mark(int)': 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:176:3: error: 'TCCR2A' was not declared in this scope 

    TCCR2A |= _BV(COM2B1); // Enable pin 3 PWM output 

^

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0, 

       from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90, 

       from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:15, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:13: 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:176:17: error: 'COM2B1' was not declared in this scope 

    TCCR2A |= _BV(COM2B1); // Enable pin 3 PWM output 

       ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::space(int)': 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:188:3: error: 'TCCR2A' was not declared in this scope 

    TCCR2A &= ~(_BV(COM2B1)); // Disable pin 3 PWM output 

^

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0, 

       from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90, 

       from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:15, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:13: 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:188:19: error: 'COM2B1' was not declared in this scope 

    TCCR2A &= ~(_BV(COM2B1)); // Disable pin 3 PWM output 

       ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp: In member function 'void IRsend::enableIROut(int)': 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:210:3: error: 'TIMSK2' was not declared in this scope 

    TIMSK2 &= ~_BV(TOIE2); //Timer2 Overflow Interrupt 

^

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0, 

       from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90, 

       from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:15, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:13: 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:210:18: error: 'TOIE2' was not declared in this scope 

    TIMSK2 &= ~_BV(TOIE2); //Timer2 Overflow Interrupt 

       ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:228:3: error: 'TCCR2A' was not declared in this scope 

    TCCR2A = _BV(WGM20); 

^

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0, 

       from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90, 

       from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:15, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:13: 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:228:16: error: 'WGM20' was not declared in this scope 

    TCCR2A = _BV(WGM20); 

       ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:229:3: error: 'TCCR2B' was not declared in this scope 

    TCCR2B = _BV(WGM22) | _BV(CS20); 

^

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0, 

       from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90, 

       from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:15, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:13: 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:229:16: error: 'WGM22' was not declared in this scope 

    TCCR2B = _BV(WGM22) | _BV(CS20); 

       ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:229:29: error: 'CS20' was not declared in this scope 

    TCCR2B = _BV(WGM22) | _BV(CS20); 

          ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:232:3: error: 'OCR2A' was not declared in this scope 

    OCR2A = SYSCLOCK/2/khz/1000; 

^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:233:3: error: 'OCR2B' was not declared in this scope 

    OCR2B = OCR2A/3; // 33% duty cycle 

^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp: In member function 'void IRrecv::enableIRIn()': 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:262:3: error: 'TCCR2A' was not declared in this scope 

    TCCR2A = 0; // normal mode 

^

In file included from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\io.h:99:0, 

       from c:\program files (x86)\arduino\hardware\tools\avr\avr\include\avr\pgmspace.h:90, 

       from C:\Program Files (x86)\Arduino\hardware\arduino\avr\cores\arduino/Arduino.h:28, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:15, 

       from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:13: 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:267:7: error: 'TCCR2B' was not declared in this scope 

    cbi(TCCR2B,CS22); 

    ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:267:3: note: in expansion of macro 'cbi' 

    cbi(TCCR2B,CS22); 

^

Multiple libraries were found for "IRremote.h" 
C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:267:14: error: 'CS22' was not declared in this scope 

Used: C:\Users\Acer\Documents\Arduino\libraries\IRremote 
    cbi(TCCR2B,CS22); 

Not used: C:\Users\Acer\Documents\Arduino\libraries\IRremote1 
      ^

Not used: C:\Users\Acer\Documents\Arduino\libraries\Arduino-IRremote-master 
C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:267:3: note: in expansion of macro 'cbi' 

    cbi(TCCR2B,CS22); 

^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:268:14: error: 'CS21' was not declared in this scope 

    sbi(TCCR2B,CS21); 

      ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:268:3: note: in expansion of macro 'sbi' 

    sbi(TCCR2B,CS21); 

^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:269:14: error: 'CS20' was not declared in this scope 

    cbi(TCCR2B,CS20); 

      ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:269:3: note: in expansion of macro 'cbi' 

    cbi(TCCR2B,CS20); 

^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:272:7: error: 'TIMSK2' was not declared in this scope 

    sbi(TIMSK2,TOIE2); 

    ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:272:3: note: in expansion of macro 'sbi' 

    sbi(TIMSK2,TOIE2); 

^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:272:14: error: 'TOIE2' was not declared in this scope 

    sbi(TIMSK2,TOIE2); 

      ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:272:3: note: in expansion of macro 'sbi' 

    sbi(TIMSK2,TOIE2); 

^

In file included from C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:13:0: 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:46:24: error: 'TCNT2' was not declared in this scope 

    #define RESET_TIMER2 TCNT2 = INIT_TIMER_COUNT2 

         ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:278:3: note: in expansion of macro 'RESET_TIMER2' 

    RESET_TIMER2; 

^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp: In function 'void __vector_5()': 

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremoteInt.h:46:24: error: 'TCNT2' was not declared in this scope 

    #define RESET_TIMER2 TCNT2 = INIT_TIMER_COUNT2 

         ^

C:\Users\Acer\Documents\Arduino\libraries\IRremote\IRremote.cpp:308:3: note: in expansion of macro 'RESET_TIMER2' 

    RESET_TIMER2; 

^

exit status 1 
Error compiling for board ATtiny25/45/85. 

This report would have more information with 
"Show verbose output during compilation" 
option enabled in File -> Preferences. 

Это версия Arduino, что я использую: Arduino: 1.8.1 (Windows 7), Совет: "ATtiny25/45/85, Attiny45, Внутренняя 8 МГц"

+0

Возможно, вы не можете использовать pin 3 (макрос _BV (бит)), потому что библиотека IRremote использует таймер 2 в режиме, который работает только с выходом на выводе Arduino 3. Взгляните на это Instructable: http: // www .instructables.com/id/Attiny-IR-library /? ALLSTEPS – Philip

+0

Контакт 3 означает, что штырь на чердаке, пожалуйста? – Shaam

+0

Да, это Pin 3 на Arduino UNO, и он жестко закодирован. – Philip

ответ

0

Я уверен, что это имеет проблема должна заключаться в том, что при загрузке на attiny45 или любой Arduino-подобный чип вам нужно r eset чип при загрузке кода. Штифт сброса - контакт 1. Для его сброса вы должны заземлить контакт. Here - схема выводов для справки.