+#if defined (__AVR_ATtiny84__) // ATtiny84 uses OC0A = PB2 or OC0B = PA7\r
+# if IRSND_OCx == IRSND_OC0A // OC0A\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 2 // OC0A\r
+# elif IRSND_OCx == IRSND_OC0B // OC0B\r
+# define IRSND_PORT PORTA // port A\r
+# define IRSND_DDR DDRA // ddr A\r
+# define IRSND_BIT 7 // OC0B\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC0A or IRSND_OC0B in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (__AVR_ATtiny45__) || defined (__AVR_ATtiny85__) // ATtiny45/85 uses OC0A = PB0 or OC0B = PB1\r
+# if IRSND_OCx == IRSND_OC0A // OC0A\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 0 // OC0A\r
+# elif IRSND_OCx == IRSND_OC0B // OC0B\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 1 // OC0B\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC0A or IRSND_OC0B in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (__AVR_ATmega8__) // ATmega8 uses only OC2 = PB3\r
+# if IRSND_OCx == IRSND_OC2 // OC0A\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 3 // OC0A\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (__AVR_ATmega16__) || defined (__AVR_ATmega32__) // ATmega16|32 uses OC2 = PD7\r
+# if IRSND_OCx == IRSND_OC2 // OC2\r
+# define IRSND_PORT PORTD // port D\r
+# define IRSND_DDR DDRD // ddr D\r
+# define IRSND_BIT 7 // OC2\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC2 in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (__AVR_ATmega162__) // ATmega162 uses OC2 = PB1 or OC0 = PB0\r
+# if IRSND_OCx == IRSND_OC2 // OC2\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 1 // OC2\r
+# elif IRSND_OCx == IRSND_OC0 // OC0\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 0 // OC0\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC2 or IRSND_OC0 in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (__AVR_ATmega164__) \\r
+ || defined (__AVR_ATmega324__) \\r
+ || defined (__AVR_ATmega644__) \\r
+ || defined (__AVR_ATmega644P__) \\r
+ || defined (__AVR_ATmega1284__) \\r
+ || defined (__AVR_ATmega1284P__) // ATmega164|324|644|644P|1284 uses OC2A = PD7 or OC2B = PD6 or OC0A = PB3 or OC0B = PB4\r
+# if IRSND_OCx == IRSND_OC2A // OC2A\r
+# define IRSND_PORT PORTD // port D\r
+# define IRSND_DDR DDRD // ddr D\r
+# define IRSND_BIT 7 // OC2A\r
+# elif IRSND_OCx == IRSND_OC2B // OC2B\r
+# define IRSND_PORT PORTD // port D\r
+# define IRSND_DDR DDRD // ddr D\r
+# define IRSND_BIT 6 // OC2B\r
+# elif IRSND_OCx == IRSND_OC0A // OC0A\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 3 // OC0A\r
+# elif IRSND_OCx == IRSND_OC0B // OC0B\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 4 // OC0B\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC2A, IRSND_OC2B, IRSND_OC0A, or IRSND_OC0B in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (__AVR_ATmega48__) \\r
+ || defined (__AVR_ATmega88__) \\r
+ || defined (__AVR_ATmega88P__) \\r
+ || defined (__AVR_ATmega168__) \\r
+ || defined (__AVR_ATmega168P__) \\r
+ || defined (__AVR_ATmega328P__) // ATmega48|88|168|168|328 uses OC2A = PB3 or OC2B = PD3 or OC0A = PD6 or OC0B = PD5\r
+# if IRSND_OCx == IRSND_OC2A // OC2A\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 3 // OC2A\r
+# elif IRSND_OCx == IRSND_OC2B // OC2B\r
+# define IRSND_PORT PORTD // port D\r
+# define IRSND_DDR DDRD // ddr D\r
+# define IRSND_BIT 3 // OC2B\r
+# elif IRSND_OCx == IRSND_OC0A // OC0A\r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 6 // OC0A\r
+# elif IRSND_OCx == IRSND_OC0B // OC0B\r
+# define IRSND_PORT PORTD // port D\r
+# define IRSND_DDR DDRD // ddr D\r
+# define IRSND_BIT 5 // OC0B\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC2A, IRSND_OC2B, IRSND_OC0A, or IRSND_OC0B in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (__AVR_ATmega8515__) \r
+# if IRSND_OCx == IRSND_OC0 \r
+# define IRSND_PORT PORTB // port B\r
+# define IRSND_DDR DDRB // ddr B\r
+# define IRSND_BIT 0 // OC0\r
+# elif IRSND_OCx == IRSND_OC1A \r
+# define IRSND_PORT PORTD // port D\r
+# define IRSND_DDR DDRD // ddr D\r
+# define IRSND_BIT 5 // OC1A\r
+# elif IRSND_OCx == IRSND_OC1B \r
+# define IRSND_PORT PORTE // port E\r
+# define IRSND_DDR DDRE // ddr E\r
+# define IRSND_BIT 2 // OC1E\r
+# else\r
+# error Wrong value for IRSND_OCx, choose IRSND_OC0, IRSND_OC1A, or IRSND_OC1B in irsndconfig.h\r
+# endif // IRSND_OCx\r
+#elif defined (PIC_C18) //Microchip C18 compiler\r
+ //Nothing here to do here -> See irsndconfig.h\r
+#elif defined (ARM_STM32) //STM32\r
+ //Nothing here to do here -> See irsndconfig.h\r
+#else\r
+# if !defined (unix) && !defined (WIN32)\r
+# error mikrocontroller not defined, please fill in definitions here.\r
+# endif // unix, WIN32\r
+#endif // __AVR...\r