IRMP-org / IRMP

Infrared Multi Protocol Decoder
GNU General Public License v3.0
267 stars 43 forks source link

Timer problems on Leonardo #31

Closed tobiasdiez closed 3 years ago

tobiasdiez commented 3 years ago

Bug Report

Compiling the SimpleReceiver example yields the following error message:

n file included from D:\Documents\Arduino\libraries\IRMP\src/irmpArduinoExt.cpp.h:18:0,
                 from D:\Documents\Arduino\libraries\IRMP\src/irmp.c.h:3143,
                 from D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:65:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h: In function 'void initIRTimerForReceive()':
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:182:5: error: 'TCCR2A' was not declared in this scope
     TCCR2A = _BV(WGM21); // CTC mode
     ^~~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:182:5: note: suggested alternative: 'TCCR0A'
     TCCR2A = _BV(WGM21); // CTC mode
     ^~~~~~
     TCCR0A
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 D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:47:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:182:18: error: 'WGM21' was not declared in this scope
     TCCR2A = _BV(WGM21); // CTC mode
                  ^
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:182:18: note: suggested alternative: 'WGM41'
In file included from D:\Documents\Arduino\libraries\IRMP\src/irmpArduinoExt.cpp.h:18:0,
                 from D:\Documents\Arduino\libraries\IRMP\src/irmp.c.h:3143,
                 from D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:65:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:187:5: error: 'TCCR2B' was not declared in this scope
     TCCR2B = _BV(CS21);                                             // prescale by 8
     ^~~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:187:5: note: suggested alternative: 'TCCR0B'
     TCCR2B = _BV(CS21);                                             // prescale by 8
     ^~~~~~
     TCCR0B
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 D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:47:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:187:18: error: 'CS21' was not declared in this scope
     TCCR2B = _BV(CS21);                                             // prescale by 8
                  ^
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:187:18: note: suggested alternative: 'CS01'
In file included from D:\Documents\Arduino\libraries\IRMP\src/irmpArduinoExt.cpp.h:18:0,
                 from D:\Documents\Arduino\libraries\IRMP\src/irmp.c.h:3143,
                 from D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:65:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:188:5: error: 'OCR2B' was not declared in this scope
     OCR2B = OCR2A = ((F_CPU / 8) / IR_INTERRUPT_FREQUENCY) - 1;     // 132 for 15000 interrupts per second
     ^~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:188:5: note: suggested alternative: 'OCR4B'
     OCR2B = OCR2A = ((F_CPU / 8) / IR_INTERRUPT_FREQUENCY) - 1;     // 132 for 15000 interrupts per second
     ^~~~~
     OCR4B
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:188:13: error: 'OCR2A' was not declared in this scope
     OCR2B = OCR2A = ((F_CPU / 8) / IR_INTERRUPT_FREQUENCY) - 1;     // 132 for 15000 interrupts per second
             ^~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:188:13: note: suggested alternative: 'OCR3A'
     OCR2B = OCR2A = ((F_CPU / 8) / IR_INTERRUPT_FREQUENCY) - 1;     // 132 for 15000 interrupts per second
             ^~~~~
             OCR3A
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:5: error: 'TIFR2' was not declared in this scope
     TIFR2 = _BV(OCF2B) | _BV(OCF2A) | _BV(TOV2);                    // reset interrupt flags
     ^~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:5: note: suggested alternative: 'TIFR4'
     TIFR2 = _BV(OCF2B) | _BV(OCF2A) | _BV(TOV2);                    // reset interrupt flags
     ^~~~~
     TIFR4
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 D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:47:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:17: error: 'OCF2B' was not declared in this scope
     TIFR2 = _BV(OCF2B) | _BV(OCF2A) | _BV(TOV2);                    // reset interrupt flags
                 ^
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:17: note: suggested alternative: 'OCF0B'
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:30: error: 'OCF2A' was not declared in this scope
     TIFR2 = _BV(OCF2B) | _BV(OCF2A) | _BV(TOV2);                    // reset interrupt flags
                              ^
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:30: note: suggested alternative: 'OCF1A'
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:43: error: 'TOV2' was not declared in this scope
     TIFR2 = _BV(OCF2B) | _BV(OCF2A) | _BV(TOV2);                    // reset interrupt flags
                                           ^
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:190:43: note: suggested alternative: 'TOV0'
In file included from D:\Documents\Arduino\libraries\IRMP\src/irmpArduinoExt.cpp.h:18:0,
                 from D:\Documents\Arduino\libraries\IRMP\src/irmp.c.h:3143,
                 from D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:65:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:191:5: error: 'TIMSK2' was not declared in this scope
     TIMSK2 = _BV(OCIE2B);                                           // enable TIMER2_COMPB_vect interrupt to be compatible with tone() library
     ^~~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:191:5: note: suggested alternative: 'TIMSK0'
     TIMSK2 = _BV(OCIE2B);                                           // enable TIMER2_COMPB_vect interrupt to be compatible with tone() library
     ^~~~~~
     TIMSK0
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 D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:47:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:191:18: error: 'OCIE2B' was not declared in this scope
     TIMSK2 = _BV(OCIE2B);                                           // enable TIMER2_COMPB_vect interrupt to be compatible with tone() library
                  ^
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:191:18: note: suggested alternative: 'OCIE0B'
In file included from D:\Documents\Arduino\libraries\IRMP\src/irmpArduinoExt.cpp.h:18:0,
                 from D:\Documents\Arduino\libraries\IRMP\src/irmp.c.h:3143,
                 from D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:65:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:192:5: error: 'TCNT2' was not declared in this scope
     TCNT2 = 0;
     ^~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:192:5: note: suggested alternative: 'TCNT0'
     TCNT2 = 0;
     ^~~~~
     TCNT0
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h: In function 'void disableIRTimerInterrupt()':
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:473:5: error: 'TIMSK2' was not declared in this scope
     TIMSK2 = 0; // disable interrupt
     ^~~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:473:5: note: suggested alternative: 'TIMSK0'
     TIMSK2 = 0; // disable interrupt
     ^~~~~~
     TIMSK0
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h: In function 'void enableIRTimerInterrupt()':
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:529:5: error: 'TIMSK2' was not declared in this scope
     TIMSK2 = _BV(OCIE2B); // enable interrupt
     ^~~~~~
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:529:5: note: suggested alternative: 'TIMSK0'
     TIMSK2 = _BV(OCIE2B); // enable interrupt
     ^~~~~~
     TIMSK0
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 D:\Programming\Projects\Arduino\receive-ir\receive-ir.ino:47:
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:529:18: error: 'OCIE2B' was not declared in this scope
     TIMSK2 = _BV(OCIE2B); // enable interrupt
                  ^
D:\Documents\Arduino\libraries\IRMP\src/IRTimer.cpp.h:529:18: note: suggested alternative: 'OCIE0B'
exit status 1
Error compiling for board Arduino Leonardo.

I did a bit a googling and appearently the following patch fixed a similar problem for the TTS library: https://github.com/jscrane/TTS/pull/6/commits/d84cbd2eb39e513e62b4f33a55ccfad412f5aec8

Arduino Platform

IDE

IR-Protocol

Example to reproduce the issue

Pin(s) used for IR-receive, if not default

Version

Current behavior

Expected behavior

Error output

Additional context

ArminJo commented 3 years ago

UUUps. and Sorry. Leonardo Support was missing. Please try the new version, after the errors are gone :-) Thanks for reporting!

ArminJo commented 3 years ago

And now tested. 😀