]> cloudbase.mooo.com Git - irmp.git/commitdiff
version 2.0.0-pre7: added support for ATtiny84, added ISR in main.c, corrected timer1...
authorukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Mon, 12 Sep 2011 07:39:26 +0000 (07:39 +0000)
committerukw <ukw@aeb2e35e-bfc4-4214-b83c-9e8de998ed28>
Mon, 12 Sep 2011 07:39:26 +0000 (07:39 +0000)
git-svn-id: svn://mikrocontroller.net/irmp@77 aeb2e35e-bfc4-4214-b83c-9e8de998ed28

README.txt
irmp.aps
irmp.c
irmp.h
irmpconfig.h
irsnd.aps
irsnd.c
irsndconfig.h
main.c

index bfd1d78346e7f4d826bf37544ac6dbefe437200f..5914be5813f9ddd0070137dd9b6765e892f2ea20 100644 (file)
@@ -1,8 +1,8 @@
 IRMP - Infrared Multi Protocol Decoder\r
 --------------------------------------\r
 \r
-Version IRMP:  2.0.0-pre6 06.09.2011\r
-Version IRSND: 2.0.0-pre6 06.09.2011\r
+Version IRMP:  2.0.0-pre7 12.09.2011\r
+Version IRSND: 2.0.0-pre7 12.09.2011\r
 \r
 Dokumentation:\r
  \r
index ec974923a46741c460951fc1d931db5f9af0bf6a..3e62b7fc698b700863fa21197035d1ed621a624a 100644 (file)
--- a/irmp.aps
+++ b/irmp.aps
@@ -1 +1 @@
-<AVRStudio><MANAGEMENT><ProjectName>irmp</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>06-Sep-2011 16:15:23</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Jan-2010 20:23:49</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\irmp.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\avr\irmp\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega88.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>irmp.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irmpconfig.h</HEADERFILE><OTHERFILE>default\irmp.lss</OTHERFILE><OTHERFILE>default\irmp.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega88</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>irmp.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99                                                     -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irmp.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irmpconfig.h</FileName><Status>1</Status></File00003></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
+<AVRStudio><MANAGEMENT><ProjectName>irmp</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>12-Sep-2011 09:33:45</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Jan-2010 20:23:49</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\irmp.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\avr\irmp\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega88.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>main.c</SOURCEFILE><SOURCEFILE>irmp.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irmpconfig.h</HEADERFILE><OTHERFILE>default\irmp.lss</OTHERFILE><OTHERFILE>default\irmp.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega88</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>irmp.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99                                                                 -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>main.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.c</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irmp.h</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irmpconfig.h</FileName><Status>1</Status></File00003></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/irmp.c b/irmp.c
index bf75b69f1bf83419ed86399098c37371045ab9f8..db87cc3ad6ad7cca69d659f6916afd5ca193e61d 100644 (file)
--- a/irmp.c
+++ b/irmp.c
@@ -3,11 +3,19 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.c,v 1.106 2011/08/16 07:51:19 fm Exp $\r
+ * $Id: irmp.c,v 1.108 2011/09/09 11:59:39 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
- * Typical manufacturers:\r
+ * Supported mikrocontrollers:\r
+ *\r
+ * ATtiny84,  ATtiny85\r
+ * ATmega8,   ATmega16,  ATmega32\r
+ * ATmega162\r
+ * ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284\r
+ * ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P\r
+ *\r
+ * Typical manufacturers of remote controls:\r
  *\r
  * SIRCS        - Sony\r
  * NEC          - NEC, Yamaha, Canon, Tevion, Harman/Kardon, Hitachi, JVC, Pioneer, Toshiba, Xoro, Orion, and many other Japanese manufacturers\r
@@ -696,13 +704,13 @@ typedef unsigned int16  uint16_t;
 #define AUTO_FRAME_REPETITION_LEN               (uint16_t)(F_INTERRUPTS * AUTO_FRAME_REPETITION_TIME + 0.5)       // use uint16_t!\r
 \r
 #ifdef ANALYZE\r
-#define ANALYZE_PUTCHAR(a)                        { if (! silent)             { putchar (a);          } }\r
-#define ANALYZE_ONLY_NORMAL_PUTCHAR(a)            { if (! silent && !verbose) { putchar (a);          } }\r
-#define ANALYZE_PRINTF(...)                       { if (verbose)              { printf (__VA_ARGS__); } }\r
-#define ANALYZE_NEWLINE()                         { if (verbose)              { putchar ('\n');       } }\r
-static int      silent;\r
-static int      time_counter;\r
-static int      verbose;\r
+#define ANALYZE_PUTCHAR(a)                      { if (! silent)             { putchar (a);          } }\r
+#define ANALYZE_ONLY_NORMAL_PUTCHAR(a)          { if (! silent && !verbose) { putchar (a);          } }\r
+#define ANALYZE_PRINTF(...)                     { if (verbose)              { printf (__VA_ARGS__); } }\r
+#define ANALYZE_NEWLINE()                       { if (verbose)              { putchar ('\n');       } }\r
+static int                                      silent;\r
+static int                                      time_counter;\r
+static int                                      verbose;\r
 #else\r
 #define ANALYZE_PUTCHAR(a)\r
 #define ANALYZE_ONLY_NORMAL_PUTCHAR(a)\r
@@ -710,6 +718,10 @@ static int      verbose;
 #define ANALYZE_NEWLINE()\r
 #endif\r
 \r
+#if IRMP_USE_CALLBACK == 1\r
+static void                                     (*irmp_callback_ptr) (uint8_t);\r
+#endif // IRMP_USE_CALLBACK == 1\r
+\r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  *  Protocol names\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
@@ -1027,9 +1039,9 @@ static const PROGMEM IRMP_PARAMETER nec42_param =
     NEC_0_PAUSE_LEN_MIN,                                                // pause_0_len_min: minimum length of pause with bit value 0\r
     NEC_0_PAUSE_LEN_MAX,                                                // pause_0_len_max: maximum length of pause with bit value 0\r
     NEC42_ADDRESS_OFFSET,                                               // address_offset:  address offset\r
-    NEC42_ADDRESS_OFFSET + NEC_ADDRESS_LEN,                             // address_end:     end of address\r
+    NEC42_ADDRESS_OFFSET + NEC42_ADDRESS_LEN,                           // address_end:     end of address\r
     NEC42_COMMAND_OFFSET,                                               // command_offset:  command offset\r
-    NEC42_COMMAND_OFFSET + NEC_COMMAND_LEN,                             // command_end:     end of command\r
+    NEC42_COMMAND_OFFSET + NEC42_COMMAND_LEN,                           // command_end:     end of command\r
     NEC42_COMPLETE_DATA_LEN,                                            // complete_len:    complete length of frame\r
     NEC_STOP_BIT,                                                       // stop_bit:        flag: frame has stop bit\r
     NEC_LSB,                                                            // lsb_first:       flag: LSB first\r
@@ -1765,6 +1777,14 @@ irmp_get_data (IRMP_DATA * irmp_data_p)
 //     return irmp_busy_flag;\r
 // }\r
 \r
+#if IRMP_USE_CALLBACK == 1\r
+void\r
+irmp_set_callback_ptr (void (*cb)(uint8_t))\r
+{\r
+    irmp_callback_ptr = cb;\r
+}\r
+#endif // IRMP_USE_CALLBACK == 1\r
+\r
 // these statics must not be volatile, because they are only used by irmp_store_bit(), which is called by irmp_ISR()\r
 static uint16_t irmp_tmp_address;                                                       // ir address\r
 static uint16_t irmp_tmp_command;                                                       // ir command\r
@@ -1932,6 +1952,19 @@ irmp_ISR (void)
 \r
     irmp_input = input(IRMP_PIN);\r
 \r
+#if IRMP_USE_CALLBACK == 1\r
+    if (irmp_callback_ptr)\r
+    {\r
+        static uint8_t last_inverted_input;\r
+\r
+        if (last_inverted_input != !irmp_input)\r
+        {\r
+            (*irmp_callback_ptr) (! irmp_input);\r
+            last_inverted_input = !irmp_input;\r
+        }\r
+    }\r
+#endif // IRMP_USE_CALLBACK == 1\r
+\r
     irmp_log(irmp_input);                                                       // log ir signal, if IRMP_LOGGING defined\r
 \r
     if (! irmp_ir_detected)                                                     // ir code already detected?\r
@@ -3059,9 +3092,8 @@ irmp_ISR (void)
 #endif // IRMP_SUPPORT_NEC42_PROTOCOL == 1\r
                         irmp_bit == 8 && irmp_pause_time >= NEC_START_BIT_PAUSE_LEN_MIN && irmp_pause_time <= NEC_START_BIT_PAUSE_LEN_MAX)\r
                     {\r
-printf ("! %d %d !\n", irmp_pause_time, NEC_START_BIT_PAUSE_LEN_MAX);\r
                         ANALYZE_PRINTF ("Switching to NEC16 protocol\n");\r
-                        irmp_param.protocol = IRMP_NEC16_PROTOCOL;\r
+                        irmp_param.protocol         = IRMP_NEC16_PROTOCOL;\r
                         irmp_param.address_offset   = NEC16_ADDRESS_OFFSET;\r
                         irmp_param.address_end      = NEC16_ADDRESS_OFFSET + NEC16_ADDRESS_LEN;\r
                         irmp_param.command_offset   = NEC16_COMMAND_OFFSET;\r
diff --git a/irmp.h b/irmp.h
index fdb2c9500dc1792a01c17acb7ccdbefa64a3a00a..7504907e03f9e625f0c1693becd9e37693284b7f 100644 (file)
--- a/irmp.h
+++ b/irmp.h
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmp.h,v 1.64 2011/08/16 07:51:19 fm Exp $\r
+ * $Id: irmp.h,v 1.65 2011/09/08 13:22:16 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -534,4 +534,8 @@ extern uint8_t                          irmp_ISR (void);
 extern char *                           irmp_protocol_names[IRMP_N_PROTOCOLS + 1];\r
 #endif\r
 \r
+#if IRMP_USE_CALLBACK == 1\r
+extern void                             irmp_set_callback_ptr (void (*cb)(uint8_t));\r
+#endif // IRSND_USE_CALLBACK == 1\r
+\r
 #endif /* _WC_IRMP_H_ */\r
index 297ec2fb3ca1f729ad6ee378fa46cf6e1b2cfdd9..5958c8fe4583e84ecdb7a0bc88699fcfa1ef89e5 100644 (file)
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irmpconfig.h,v 1.71 2011/08/16 07:32:39 fm Exp $\r
+ * $Id: irmpconfig.h,v 1.74 2011/09/11 13:17:38 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
@@ -54,8 +54,8 @@
 #define IRMP_SUPPORT_RC5_PROTOCOL               0       // RC5                  >= 10000                 ~250 bytes\r
 #define IRMP_SUPPORT_RC6_PROTOCOL               0       // RC6 & RC6A           >= 10000                 ~250 bytes\r
 #define IRMP_SUPPORT_JVC_PROTOCOL               0       // JVC                  >= 10000                 ~150 bytes\r
-#define IRMP_SUPPORT_NEC16_PROTOCOL             0       // NEC16                >= 10000                  ~50 bytes\r
-#define IRMP_SUPPORT_NEC42_PROTOCOL             0       // NEC42                >= 10000                 ~150 bytes\r
+#define IRMP_SUPPORT_NEC16_PROTOCOL             0       // NEC16                >= 10000                 ~100 bytes\r
+#define IRMP_SUPPORT_NEC42_PROTOCOL             0       // NEC42                >= 10000                 ~300 bytes\r
 #define IRMP_SUPPORT_IR60_PROTOCOL              0       // IR60 (SAB2008)       >= 10000                 ~300 bytes\r
 #define IRMP_SUPPORT_GRUNDIG_PROTOCOL           0       // Grundig              >= 10000                 ~300 bytes\r
 #define IRMP_SUPPORT_SIEMENS_PROTOCOL           0       // Siemens Gigaset      >= 15000                 ~550 bytes\r
  */\r
 #define IRMP_PROTOCOL_NAMES                     0       // 1: access protocol names, 0: do not (default),\r
 \r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * Use Callbacks to indicate input signal\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+#define IRMP_USE_CALLBACK                       0       // flag: 0 = don't use callbacks, 1 = use callbacks, default is 0\r
+\r
 /*---------------------------------------------------------------------------------------------------------------------------------------------------\r
  * DO NOT CHANGE THE FOLLOWING LINES !\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
index 1b423dc655f7fa169e66958445a766ee55b722cd..386137ec12a1925a5cc5ac6f61f5d2b442b010d2 100644 (file)
--- a/irsnd.aps
+++ b/irsnd.aps
@@ -1 +1 @@
-<AVRStudio><MANAGEMENT><ProjectName>irsnd</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>06-Sep-2011 16:10:48</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Jan-2010 20:23:49</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\irsnd.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\avr\irmp\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega88.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>irsndmain.c</SOURCEFILE><SOURCEFILE>irsnd.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irsnd.h</HEADERFILE><HEADERFILE>irsndconfig.h</HEADERFILE><OTHERFILE>default\irsnd.lss</OTHERFILE><OTHERFILE>default\irsnd.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega88</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>irsnd.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99       -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="1" orderaddress="1" ordergroup="1"/></IOView><Files><File00000><FileId>00000</FileId><FileName>irsndmain.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irsnd.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irsnd.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>irsndconfig.h</FileName><Status>1</Status></File00004></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
+<AVRStudio><MANAGEMENT><ProjectName>irsnd</ProjectName><Created>07-Jan-2010 20:23:49</Created><LastEdit>07-Sep-2011 16:01:18</LastEdit><ICON>241</ICON><ProjectType>0</ProjectType><Created>07-Jan-2010 20:23:49</Created><Version>4</Version><Build>4, 18, 0, 670</Build><ProjectTypeName>AVR GCC</ProjectTypeName></MANAGEMENT><CODE_CREATION><ObjectFile>default\irsnd.elf</ObjectFile><EntryFile></EntryFile><SaveFolder>C:\avr\irmp\</SaveFolder></CODE_CREATION><DEBUG_TARGET><CURRENT_TARGET>AVR Simulator</CURRENT_TARGET><CURRENT_PART>ATmega88.xml</CURRENT_PART><BREAKPOINTS></BREAKPOINTS><IO_EXPAND><HIDE>false</HIDE></IO_EXPAND><REGISTERNAMES><Register>R00</Register><Register>R01</Register><Register>R02</Register><Register>R03</Register><Register>R04</Register><Register>R05</Register><Register>R06</Register><Register>R07</Register><Register>R08</Register><Register>R09</Register><Register>R10</Register><Register>R11</Register><Register>R12</Register><Register>R13</Register><Register>R14</Register><Register>R15</Register><Register>R16</Register><Register>R17</Register><Register>R18</Register><Register>R19</Register><Register>R20</Register><Register>R21</Register><Register>R22</Register><Register>R23</Register><Register>R24</Register><Register>R25</Register><Register>R26</Register><Register>R27</Register><Register>R28</Register><Register>R29</Register><Register>R30</Register><Register>R31</Register></REGISTERNAMES><COM>Auto</COM><COMType>0</COMType><WATCHNUM>0</WATCHNUM><WATCHNAMES><Pane0></Pane0><Pane1></Pane1><Pane2></Pane2><Pane3></Pane3></WATCHNAMES><BreakOnTrcaeFull>0</BreakOnTrcaeFull></DEBUG_TARGET><Debugger><Triggers></Triggers></Debugger><AVRGCCPLUGIN><FILES><SOURCEFILE>irsndmain.c</SOURCEFILE><SOURCEFILE>irsnd.c</SOURCEFILE><HEADERFILE>irmp.h</HEADERFILE><HEADERFILE>irsnd.h</HEADERFILE><HEADERFILE>irsndconfig.h</HEADERFILE><OTHERFILE>default\irsnd.lss</OTHERFILE><OTHERFILE>default\irsnd.map</OTHERFILE></FILES><CONFIGS><CONFIG><NAME>default</NAME><USESEXTERNALMAKEFILE>NO</USESEXTERNALMAKEFILE><EXTERNALMAKEFILE></EXTERNALMAKEFILE><PART>atmega88</PART><HEX>1</HEX><LIST>1</LIST><MAP>1</MAP><OUTPUTFILENAME>irsnd.elf</OUTPUTFILENAME><OUTPUTDIR>default\</OUTPUTDIR><ISDIRTY>0</ISDIRTY><OPTIONS/><INCDIRS/><LIBDIRS/><LIBS/><LINKOBJECTS/><OPTIONSFORALL>-Wall -gdwarf-2 -std=gnu99           -DF_CPU=8000000UL -Os -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums</OPTIONSFORALL><LINKEROPTIONS></LINKEROPTIONS><SEGMENTS/></CONFIG></CONFIGS><LASTCONFIG>default</LASTCONFIG><USES_WINAVR>1</USES_WINAVR><GCC_LOC>C:\Program Files\WinAVR-20100110\bin\avr-gcc.exe</GCC_LOC><MAKE_LOC>C:\Program Files\WinAVR-20100110\utils\bin\make.exe</MAKE_LOC></AVRGCCPLUGIN><IOView><usergroups/><sort sorted="0" column="0" ordername="0" orderaddress="0" ordergroup="0"/></IOView><Files><File00000><FileId>00000</FileId><FileName>irsndmain.c</FileName><Status>1</Status></File00000><File00001><FileId>00001</FileId><FileName>irmp.h</FileName><Status>1</Status></File00001><File00002><FileId>00002</FileId><FileName>irsnd.c</FileName><Status>1</Status></File00002><File00003><FileId>00003</FileId><FileName>irsnd.h</FileName><Status>1</Status></File00003><File00004><FileId>00004</FileId><FileName>irsndconfig.h</FileName><Status>1</Status></File00004></Files><Events><Bookmarks></Bookmarks></Events><Trace><Filters></Filters></Trace></AVRStudio>\r
diff --git a/irsnd.c b/irsnd.c
index fbd6ded1b18ca39f901dcd456add50b9f0eb36dc..47bea6c70bcb5415f6173131ff0ca28a1bdb4042 100644 (file)
--- a/irsnd.c
+++ b/irsnd.c
@@ -3,7 +3,15 @@
  *\r
  * Copyright (c) 2010-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsnd.c,v 1.38 2011/05/22 21:40:53 fm Exp $\r
+ * Supported mikrocontrollers:\r
+ *\r
+ * ATtiny84,  ATtiny85\r
+ * ATmega8,   ATmega16,  ATmega32\r
+ * ATmega162\r
+ * ATmega164, ATmega324, ATmega644,  ATmega644P, ATmega1284\r
+ * ATmega88,  ATmega88P, ATmega168,  ATmega168P, ATmega328P\r
+ *\r
+ * $Id: irsnd.c,v 1.40 2011/09/09 11:59:40 fm Exp $\r
  *\r
  * This program is free software; you can redistribute it and/or modify\r
  * it under the terms of the GNU General Public License as published by\r
@@ -64,7 +72,20 @@ typedef unsigned short  uint16_t;
  *  ATmega pin definition of OC2 / OC2A / OC2B / OC0 / OC0A / OC0B\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  */\r
-#if defined (__AVR_ATtiny85__)                          // ATtiny85 uses OC0A = PB0 or OC0B = PB1\r
+#if defined (__AVR_ATtiny84__)                          // ATtiny85 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
+\r
+#elif defined (__AVR_ATtiny85__)                        // ATtiny85 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
@@ -137,10 +158,10 @@ typedef unsigned short  uint16_t;
 \r
 #elif defined (__AVR_ATmega48__)    \\r
    || defined (__AVR_ATmega88__)    \\r
+   || defined (__AVR_ATmega88P__)   \\r
    || defined (__AVR_ATmega168__)   \\r
    || defined (__AVR_ATmega168P__)  \\r
-   || defined (__AVR_ATmega328__)   \\r
-   || defined (__AVR_ATmega328P__)                      // ATmega48|88|168|168P|328P uses OC2A = PB3 or OC2B = PD3 or OC0A = PD6 or OC0B = PD5\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
@@ -599,11 +620,10 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait)
 \r
             irsnd_protocol = IRMP_NEC_PROTOCOL;                                                         // APPLE protocol is NEC with id instead of inverted command\r
 \r
-            irsnd_buffer[0] = (address & 0xFF00) >> 8;                                                  // AAAAAAAA\r
-            irsnd_buffer[1] = (address & 0x00FF);                                                       // AAAAAAAA\r
-            irsnd_buffer[2] = (command & 0xFF00) >> 8;                                                  // CCCCCCCC\r
-            irsnd_buffer[3] = (command & 0x00FF);                                                       // CCCCCCCC\r
-\r
+            irsnd_buffer[0] = (address & 0xFF00) >> 8;                                                          // AAAAAAAA\r
+            irsnd_buffer[1] = (address & 0x00FF);                                                               // AAAAAAAA\r
+            irsnd_buffer[2] = (command & 0xFF00) >> 8;                                                          // CCCCCCCC\r
+            irsnd_buffer[3] = 0x8B;                                                                             // 10001011 (id)\r
             irsnd_busy      = TRUE;\r
             break;\r
         }\r
@@ -615,13 +635,35 @@ irsnd_send_data (IRMP_DATA * irmp_data_p, uint8_t do_wait)
             irsnd_buffer[0] = (address & 0xFF00) >> 8;                                                          // AAAAAAAA\r
             irsnd_buffer[1] = (address & 0x00FF);                                                               // AAAAAAAA\r
             irsnd_buffer[2] = (command & 0xFF00) >> 8;                                                          // CCCCCCCC\r
+            irsnd_buffer[3] = ~((command & 0xFF00) >> 8);                                                       // cccccccc\r
+            irsnd_busy      = TRUE;\r
+            break;\r
+        }\r
+#endif\r
+#if IRSND_SUPPORT_NEC16_PROTOCOL == 1\r
+        case IRMP_NEC16_PROTOCOL:\r
+        {\r
+            address = bitsrevervse (irmp_data_p->address, NEC16_ADDRESS_LEN);\r
+            command = bitsrevervse (irmp_data_p->command, NEC16_COMMAND_LEN);\r
 \r
-            irsnd_protocol = IRMP_NEC_PROTOCOL; // APPLE protocol is NEC with fix bitmask instead of inverted command\r
-            irsnd_buffer[3] = 0x8B;                                                                         // 10001011\r
-            {\r
-                irsnd_buffer[3] = ~((command & 0xFF00) >> 8);                                                   // cccccccc\r
-            }\r
-\r
+            irsnd_buffer[0] = (address & 0x00FF);                                                               // AAAAAAAA\r
+            irsnd_buffer[1] = (command & 0x00FF);                                                               // CCCCCCCC\r
+            irsnd_busy      = TRUE;\r
+            break;\r
+        }\r
+#endif\r
+#if IRSND_SUPPORT_NEC42_PROTOCOL == 1\r
+        case IRMP_NEC42_PROTOCOL:\r
+        {\r
+            address = bitsrevervse (irmp_data_p->address, NEC42_ADDRESS_LEN);\r
+            command = bitsrevervse (irmp_data_p->command, NEC42_COMMAND_LEN);\r
+\r
+            irsnd_buffer[0] = ( (address & 0x1FE0) >> 5);                                                       // AAAAAAAA\r
+            irsnd_buffer[1] = ( (address & 0x001F) << 3) | ((~address & 0x1C00) >> 10);                          // AAAAAaaa\r
+            irsnd_buffer[2] =                              ((~address & 0x03FC) >> 2);                          // aaaaaaaa\r
+            irsnd_buffer[3] = ((~address & 0x0003) << 6) | ( (command & 0x00FC) >> 2);                          // aaCCCCCC\r
+            irsnd_buffer[4] = ( (command & 0x0003) << 6) | ((~command & 0x00FC) >> 2);                          // CCcccccc\r
+            irsnd_buffer[5] = ((~command & 0x0003) << 6);                                                       // cc\r
             irsnd_busy      = TRUE;\r
             break;\r
         }\r
@@ -1077,6 +1119,42 @@ irsnd_ISR (void)
                         break;\r
                     }\r
 #endif\r
+#if IRSND_SUPPORT_NEC16_PROTOCOL == 1\r
+                    case IRMP_NEC16_PROTOCOL:\r
+                    {\r
+                        startbit_pulse_len          = NEC_START_BIT_PULSE_LEN;\r
+                        startbit_pause_len          = NEC_START_BIT_PAUSE_LEN - 1;\r
+                        pulse_1_len                 = NEC_PULSE_LEN;\r
+                        pause_1_len                 = NEC_1_PAUSE_LEN - 1;\r
+                        pulse_0_len                 = NEC_PULSE_LEN;\r
+                        pause_0_len                 = NEC_0_PAUSE_LEN - 1;\r
+                        has_stop_bit                = NEC_STOP_BIT;\r
+                        complete_data_len           = NEC16_COMPLETE_DATA_LEN + 1;                  // 1 more: sync bit\r
+                        n_auto_repetitions          = 1;                                            // 1 frame\r
+                        auto_repetition_pause_len   = 0;\r
+                        repeat_frame_pause_len      = NEC_FRAME_REPEAT_PAUSE_LEN;\r
+                        irsnd_set_freq (IRSND_FREQ_38_KHZ);\r
+                        break;\r
+                    }\r
+#endif\r
+#if IRSND_SUPPORT_NEC42_PROTOCOL == 1\r
+                    case IRMP_NEC42_PROTOCOL:\r
+                    {\r
+                        startbit_pulse_len          = NEC_START_BIT_PULSE_LEN;\r
+                        startbit_pause_len          = NEC_START_BIT_PAUSE_LEN - 1;\r
+                        pulse_1_len                 = NEC_PULSE_LEN;\r
+                        pause_1_len                 = NEC_1_PAUSE_LEN - 1;\r
+                        pulse_0_len                 = NEC_PULSE_LEN;\r
+                        pause_0_len                 = NEC_0_PAUSE_LEN - 1;\r
+                        has_stop_bit                = NEC_STOP_BIT;\r
+                        complete_data_len           = NEC42_COMPLETE_DATA_LEN;\r
+                        n_auto_repetitions          = 1;                                            // 1 frame\r
+                        auto_repetition_pause_len   = 0;\r
+                        repeat_frame_pause_len      = NEC_FRAME_REPEAT_PAUSE_LEN;\r
+                        irsnd_set_freq (IRSND_FREQ_38_KHZ);\r
+                        break;\r
+                    }\r
+#endif\r
 #if IRSND_SUPPORT_SAMSUNG_PROTOCOL == 1\r
                     case IRMP_SAMSUNG_PROTOCOL:\r
                     {\r
@@ -1472,6 +1550,12 @@ irsnd_ISR (void)
 #if IRSND_SUPPORT_NEC_PROTOCOL == 1\r
                 case IRMP_NEC_PROTOCOL:\r
 #endif\r
+#if IRSND_SUPPORT_NEC16_PROTOCOL == 1\r
+                case IRMP_NEC16_PROTOCOL:\r
+#endif\r
+#if IRSND_SUPPORT_NEC42_PROTOCOL == 1\r
+                case IRMP_NEC42_PROTOCOL:\r
+#endif\r
 #if IRSND_SUPPORT_SAMSUNG_PROTOCOL == 1\r
                 case IRMP_SAMSUNG_PROTOCOL:\r
                 case IRMP_SAMSUNG32_PROTOCOL:\r
@@ -1517,7 +1601,8 @@ irsnd_ISR (void)
 #endif\r
 \r
 \r
-#if IRSND_SUPPORT_SIRCS_PROTOCOL == 1  || IRSND_SUPPORT_NEC_PROTOCOL == 1 || IRSND_SUPPORT_SAMSUNG_PROTOCOL == 1 || IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1 ||   \\r
+#if IRSND_SUPPORT_SIRCS_PROTOCOL == 1  || IRSND_SUPPORT_NEC_PROTOCOL == 1 || IRSND_SUPPORT_NEC16_PROTOCOL == 1 || IRSND_SUPPORT_NEC42_PROTOCOL == 1 || \\r
+    IRSND_SUPPORT_SAMSUNG_PROTOCOL == 1 || IRSND_SUPPORT_MATSUSHITA_PROTOCOL == 1 ||   \\r
     IRSND_SUPPORT_KASEIKYO_PROTOCOL == 1 || IRSND_SUPPORT_RECS80_PROTOCOL == 1 || IRSND_SUPPORT_RECS80EXT_PROTOCOL == 1 || IRSND_SUPPORT_DENON_PROTOCOL == 1 || \\r
     IRSND_SUPPORT_NUBERT_PROTOCOL == 1 || IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1 || IRSND_SUPPORT_FDC_PROTOCOL == 1 || IRSND_SUPPORT_RCCAR_PROTOCOL == 1 ||   \\r
     IRSND_SUPPORT_JVC_PROTOCOL == 1 || IRSND_SUPPORT_NIKON_PROTOCOL == 1 || IRSND_SUPPORT_LEGO_PROTOCOL == 1 || IRSND_SUPPORT_THOMSON_PROTOCOL == 1 \r
@@ -1557,6 +1642,32 @@ irsnd_ISR (void)
                             else\r
 #endif\r
 \r
+#if IRSND_SUPPORT_NEC16_PROTOCOL == 1\r
+                            if (irsnd_protocol == IRMP_NEC16_PROTOCOL)\r
+                            {\r
+                                if (current_bit < NEC16_ADDRESS_LEN)                                // send address bits\r
+                                {\r
+                                    pulse_len = NEC_PULSE_LEN;\r
+                                    pause_len = (irsnd_buffer[current_bit / 8] & (1<<(7-(current_bit % 8)))) ?\r
+                                                    (NEC_1_PAUSE_LEN - 1) : (NEC_0_PAUSE_LEN - 1);\r
+                                }\r
+                                else if (current_bit == NEC16_ADDRESS_LEN)                          // send SYNC bit (8th bit)\r
+                                {\r
+                                    pulse_len = NEC_PULSE_LEN;\r
+                                    pause_len = NEC_START_BIT_PAUSE_LEN - 1;\r
+                                }\r
+                                else if (current_bit < NEC16_COMPLETE_DATA_LEN + 1)                 // send n'th bit\r
+                                {\r
+                                    uint8_t cur_bit = current_bit - 1;                              // sync skipped, offset = -1 !\r
+\r
+                                    pulse_len = NEC_PULSE_LEN;\r
+                                    pause_len = (irsnd_buffer[cur_bit / 8] & (1<<(7-(cur_bit % 8)))) ?\r
+                                                    (NEC_1_PAUSE_LEN - 1) : (NEC_0_PAUSE_LEN - 1);\r
+                                }\r
+                            }\r
+                            else\r
+#endif\r
+\r
 #if IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL == 1\r
                             if (irsnd_protocol == IRMP_BANG_OLUFSEN_PROTOCOL)\r
                             {\r
index eb9f1ad8f83ea26b504f32238fc032bf68ef4cc5..2bb4414b1e5c38cab1670f0caff1558b5b28a84c 100644 (file)
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2010-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: irsndconfig.h,v 1.22 2011/05/20 09:31:25 fm Exp $\r
+ * $Id: irsndconfig.h,v 1.26 2011/09/11 13:17:38 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
 #define IRSND_SUPPORT_DENON_PROTOCOL            1       // DENON, Sharp         >= 10000                 ~200 bytes\r
 \r
 // more protocols, enable here!                 Enable  Remarks                 F_INTERRUPTS            Program Space\r
-#define IRSND_SUPPORT_RC5_PROTOCOL              1       // RC5                  >= 10000                 ~150 bytes\r
+#define IRSND_SUPPORT_RC5_PROTOCOL              0       // RC5                  >= 10000                 ~150 bytes\r
 #define IRSND_SUPPORT_RC6_PROTOCOL              0       // RC6                  >= 10000                 ~250 bytes\r
 #define IRSND_SUPPORT_RC6A_PROTOCOL             0       // RC6A                 >= 10000                 ~250 bytes\r
 #define IRSND_SUPPORT_JVC_PROTOCOL              0       // JVC                  >= 10000                 ~150 bytes\r
-#define IRSND_SUPPORT_NEC16_PROTOCOL            0       // NEC16                >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
-#define IRSND_SUPPORT_NEC42_PROTOCOL            0       // NEC42                >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
+#define IRSND_SUPPORT_NEC16_PROTOCOL            0       // NEC16                >= 10000                 ~150 bytes\r
+#define IRSND_SUPPORT_NEC42_PROTOCOL            0       // NEC42                >= 10000                 ~150 bytes\r
 #define IRSND_SUPPORT_IR60_PROTOCOL             0       // IR60 (SAB2008)       >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
 #define IRSND_SUPPORT_GRUNDIG_PROTOCOL          0       // Grundig              >= 10000                 ~300 bytes\r
 #define IRSND_SUPPORT_SIEMENS_PROTOCOL          0       // Siemens, Gigaset     >= 15000                 ~150 bytes\r
@@ -56,7 +56,7 @@
 #define IRSND_SUPPORT_BANG_OLUFSEN_PROTOCOL     0       // Bang&Olufsen         >= 10000                 ~250 bytes\r
 #define IRSND_SUPPORT_RECS80_PROTOCOL           0       // RECS80               >= 20000                 ~100 bytes\r
 #define IRSND_SUPPORT_RECS80EXT_PROTOCOL        0       // RECS80EXT            >= 20000                 ~100 bytes\r
-#define IRSND_SUPPORT_THOMSON_PROTOCOL          1       // Thomson              >= 10000                 ~250 bytes\r
+#define IRSND_SUPPORT_THOMSON_PROTOCOL          0       // Thomson              >= 10000                 ~250 bytes\r
 #define IRSND_SUPPORT_NIKON_PROTOCOL            0       // NIKON                >= 10000                 ~150 bytes\r
 #define IRSND_SUPPORT_NETBOX_PROTOCOL           0       // Netbox keyboard      >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
 #define IRSND_SUPPORT_IMON_PROTOCOL             0       // IMON keyboard        >= 10000                 DON'T CHANGE, NOT SUPPORTED YET!\r
@@ -82,8 +82,8 @@
  *                                              IRSND_OC2A = OC2A on ATmegas         supporting OC2A, e.g. ATmega88\r
  *                                              IRSND_OC2B = OC2B on ATmegas         supporting OC2B, e.g. ATmega88\r
  *                                              IRSND_OC0  = OC0  on ATmegas         supporting OC0,  e.g. ATmega162\r
- *                                              IRSND_OC0A = OC0A on ATmegas/ATtinys supporting OC0A, e.g. ATtiny85\r
- *                                              IRSND_OC0B = OC0B on ATmegas/ATtinys supporting OC0B, e.g. ATtiny85\r
+ *                                              IRSND_OC0A = OC0A on ATmegas/ATtinys supporting OC0A, e.g. ATtiny84, ATtiny85\r
+ *                                              IRSND_OC0B = OC0B on ATmegas/ATtinys supporting OC0B, e.g. ATtiny84, ATtiny85\r
  *---------------------------------------------------------------------------------------------------------------------------------------------------\r
  */\r
 #define IRSND_OCx                               IRSND_OC2B          // use OC2B\r
diff --git a/main.c b/main.c
index 9877762af07159b06340978ac138ba79c8666b47..589bb88e8f5a334ad43a14c5496745e5a5420240 100644 (file)
--- a/main.c
+++ b/main.c
@@ -3,7 +3,7 @@
  *\r
  * Copyright (c) 2009-2011 Frank Meyer - frank(at)fli4l.de\r
  *\r
- * $Id: main.c,v 1.9 2011/04/11 12:54:25 fm Exp $\r
+ * $Id: main.c,v 1.10 2011/09/08 13:22:16 fm Exp $\r
  *\r
  * ATMEGA88 @ 8 MHz\r
  *\r
 void\r
 timer1_init (void)\r
 {\r
-#if defined (__AVR_ATtiny85__)                                      // ATtiny85:\r
-    OCR1A   =  (F_CPU / (2 * F_INTERRUPTS) / 2) - 1;                // compare value: 1/28800 of CPU frequency, presc = 2\r
-    TCCR1   = (1 << CTC1) | (1 << CS11);                            // switch CTC Mode on, set prescaler to 2\r
-#else                                                               // ATmegaXX:\r
-    OCR1A   =  (F_CPU / (2 * F_INTERRUPTS)) - 1;                    // compare value: 1/28800 of CPU frequency\r
-    TCCR1B  = (1 << WGM12) | (1 << CS10);                           // switch CTC Mode on, set prescaler to 1\r
+#if defined (__AVR_ATtiny85__)                                              // ATtiny85:\r
+    OCR1A   =  (F_CPU / F_INTERRUPTS / 4) - 1;                              // compare value: 1/15000 of CPU frequency, presc = 4\r
+    TCCR1   = (1 << CTC1) | (1 << CS11) | (1 << CS10);                      // switch CTC Mode on, set prescaler to 4\r
+#else                                                                       // ATmegaXX:\r
+    OCR1A   =  (F_CPU / F_INTERRUPTS) - 1;                                  // compare value: 1/15000 of CPU frequency\r
+    TCCR1B  = (1 << WGM12) | (1 << CS10);                                   // switch CTC Mode on, set prescaler to 1\r
 #endif\r
 \r
 #ifdef TIMSK1\r
-    TIMSK1  = 1 << OCIE1A;                                          // OCIE1A: Interrupt by timer compare\r
+    TIMSK1  = 1 << OCIE1A;                                                  // OCIE1A: Interrupt by timer compare\r
 #else\r
-    TIMSK   = 1 << OCIE1A;                                          // OCIE1A: Interrupt by timer compare\r
+    TIMSK   = 1 << OCIE1A;                                                  // OCIE1A: Interrupt by timer compare\r
 #endif\r
 }\r
 \r
+/*---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ * Timer 1 output compare A interrupt service routine, called every 1/15000 sec\r
+ *---------------------------------------------------------------------------------------------------------------------------------------------------\r
+ */\r
+#ifdef TIM1_COMPA_vect                                                      // ATtiny84\r
+ISR(TIM1_COMPA_vect)\r
+#else\r
+ISR(TIMER1_COMPA_vect)\r
+#endif\r
+{\r
+  (void) irmp_ISR();                                                        // call irmp ISR\r
+  // call other timer interrupt routines...\r
+}\r
+\r
+\r
 int\r
 main (void)\r
 {\r