OSDN Git Service

[UI][v2.0] Add support of roltaly-enbcoder.
authorK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 20 Oct 2013 17:20:08 +0000 (02:20 +0900)
committerK.Ohta <whatisthis.sowhat@gmail.com>
Sun, 20 Oct 2013 17:20:08 +0000 (02:20 +0900)
idle.c
main.c
nbproject/Makefile-default.mk
nbproject/Makefile-genesis.properties
nbproject/configurations.xml
nbproject/private/configurations.xml
radio_getstat.c
rencoder.c [new file with mode: 0644]
rencoder.h [new file with mode: 0644]

diff --git a/idle.c b/idle.c
index 1b22203..7345f71 100644 (file)
--- a/idle.c
+++ b/idle.c
@@ -60,7 +60,7 @@ void stop_idle(void)
 void idle(unsigned int initial)
 {
 
-    unsigned int i;
+   unsigned int i;
    WDTCONbits.SWDTEN = 0; // Lame WDT OFF.
    /* Enable IDLE */
    /* Set TMR0 for interrupt*/
diff --git a/main.c b/main.c
index dc2c913..9435ee6 100644 (file)
--- a/main.c
+++ b/main.c
@@ -54,6 +54,7 @@
 #include "adc_int.h"
 #include "i2c_eeprom.h"
 #include "backlight.h"
+#include "rencoder.h"
 
 /*
  * Config words.
@@ -119,14 +120,20 @@ SIGHANDLER(TMR0_handler)
  * Interrupt wake up every 1ms.
  */
 #ifdef __XC
-void TMR3_Handler(void)
+void TMR1_Handler(void)
 #else
-SIGHANDLER(TMR3_Handler)
+SIGHANDLER(TMR1_Handler)
 #endif
 {
-    PIR2bits.TMR3IF  = 0;
-    PIE2bits.TMR3IE  = 0;
-    T3CONbits.TMR3ON = 0;
+    rencoder_count();
+//    rencoder_restart();
+   T1CON = 0b10110100;// RD16, T1RUN=0, 1/32 fOSC, TNR1CS=0, TMR1ON=0;
+   TMR1H = 63036 >> 8; // Tick = 4us, Count = 2500
+   TMR1L = 63036 & 255;
+   PIR1bits.TMR1IF = 0;
+   PIE1bits.TMR1IE = 1;
+   IPR1bits.TMR1IP = 1;
+   T1CONbits.TMR1ON = 1;
 }
 
 #ifdef __XC
@@ -203,13 +210,13 @@ SIGHANDLER(I2CBus_handler)
 DEF_INTLOW(intlow_handler)
   DEF_HANDLER(SIG_TMR0, TMR0_handler)
   DEF_HANDLER(SIG_INT0, EXINT_Handler)
-//  DEF_HANDLER(SIG_TMR3, I2C_handler)
+//  DEF_HANDLER(SIG_TMR1, I2C_handler)
 END_DEF
 
 DEF_INTHIGH(inthigh_handler)
  DEF_HANDLER(SIG_RBIF, RBIF_handler)
  DEF_HANDLER(SIG_EEIF, EEPROM_handler)
- DEF_HANDLER(SIG_TMR3, TMR3_Handler)
+ DEF_HANDLER(SIG_TMR1, TMR1_Handler)
  DEF_HANDLER(SIG_INT1, EXINT_Handler)
  DEF_HANDLER(SIG_INT2, EXINT_Handler)
  DEF_HANDLER(SIG_AD, INADC_handler)
@@ -227,10 +234,10 @@ void interrupt high_priority inthigh_handler(void)
 {
     if(INTCONbits.RBIF) RBIF_handler();
     if(PIR2bits.EEIF)   EEPROM_handler();
-    if(PIR2bits.TMR3IF) TMR3_Handler();
+    if(PIR1bits.TMR1IF) TMR1_Handler();
    // if(INTCONbits.TMR0IF) TMR0_handler();
-    if(INTCON3bits.INT1IF) EXINT_Handler();
-    if(INTCON3bits.INT2IF) EXINT_Handler();
+//    if(INTCON3bits.INT1IF) EXINT_Handler();
+//    if(INTCON3bits.INT2IF) EXINT_Handler();
     if(PIR1bits.ADIF) INADC_handler();
 
 //    if(PIR1bits.SSPIF)    I2C_handler();
@@ -306,8 +313,9 @@ int main(void)
     ClrWdt();
     ui_idlekey = setup.ui_idlecount / 92;
     ui_idlepad = setup.ui_idlecount % 23;
-
+    rencoder_start();
     do {
+
 #if 1
         if(battlevel < 340) { // 3.4V
                 lvcount++;
@@ -323,6 +331,8 @@ int main(void)
             }
 #endif
         /* Main routine*/
+
+        
        for(i = 0; i < 4; i++) {
            c = pollkey_single_timeout(ui_idlekey, 1); // 23*41 = 943ms
            p = 0;
@@ -332,10 +342,19 @@ int main(void)
                     acm1602_resume(LCD_I2CADDR);
                     dispf = 0xff;
                 }
+               rencoder_stop();
                 setfreq_updown(c);
                update_status();
                 update_display();
+               rencoder_start();
             }
+            if(renc_dir == RENC_LEFT) {
+              akc6955_down_freq(renc_count);
+              rencoder_init();
+           } else if(renc_dir == RENC_RIGHT) {
+              akc6955_up_freq(renc_count);
+              rencoder_init();
+           }
             ClrWdt();
         }
          update_status();
index 79b57b6..4b4929c 100644 (file)
@@ -45,17 +45,17 @@ OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE}
 DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE}
 
 # Source Files Quoted if spaced
-SOURCEFILES_QUOTED_IF_SPACED=ui.c i2c_io.c main.c idle.c lcd_acm1602.c akc6955.c eeprom.c ioports.c menu.c power.c adc_int.c menu_defs.c eepromutil.c ui_updown.c ui_display.c radio_getstat.c helps.c menu_memoryfreq.c i2c_eeprom.c backlight.c menu_scan.c menu_setup.c menu_userband.c menu_volume.c
+SOURCEFILES_QUOTED_IF_SPACED=ui.c i2c_io.c main.c idle.c lcd_acm1602.c akc6955.c eeprom.c ioports.c menu.c power.c adc_int.c menu_defs.c eepromutil.c ui_updown.c ui_display.c radio_getstat.c helps.c menu_memoryfreq.c i2c_eeprom.c backlight.c menu_scan.c menu_setup.c menu_userband.c menu_volume.c rencoder.c
 
 # Object Files Quoted if spaced
-OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/ui.p1 ${OBJECTDIR}/i2c_io.p1 ${OBJECTDIR}/main.p1 ${OBJECTDIR}/idle.p1 ${OBJECTDIR}/lcd_acm1602.p1 ${OBJECTDIR}/akc6955.p1 ${OBJECTDIR}/eeprom.p1 ${OBJECTDIR}/ioports.p1 ${OBJECTDIR}/menu.p1 ${OBJECTDIR}/power.p1 ${OBJECTDIR}/adc_int.p1 ${OBJECTDIR}/menu_defs.p1 ${OBJECTDIR}/eepromutil.p1 ${OBJECTDIR}/ui_updown.p1 ${OBJECTDIR}/ui_display.p1 ${OBJECTDIR}/radio_getstat.p1 ${OBJECTDIR}/helps.p1 ${OBJECTDIR}/menu_memoryfreq.p1 ${OBJECTDIR}/i2c_eeprom.p1 ${OBJECTDIR}/backlight.p1 ${OBJECTDIR}/menu_scan.p1 ${OBJECTDIR}/menu_setup.p1 ${OBJECTDIR}/menu_userband.p1 ${OBJECTDIR}/menu_volume.p1
-POSSIBLE_DEPFILES=${OBJECTDIR}/ui.p1.d ${OBJECTDIR}/i2c_io.p1.d ${OBJECTDIR}/main.p1.d ${OBJECTDIR}/idle.p1.d ${OBJECTDIR}/lcd_acm1602.p1.d ${OBJECTDIR}/akc6955.p1.d ${OBJECTDIR}/eeprom.p1.d ${OBJECTDIR}/ioports.p1.d ${OBJECTDIR}/menu.p1.d ${OBJECTDIR}/power.p1.d ${OBJECTDIR}/adc_int.p1.d ${OBJECTDIR}/menu_defs.p1.d ${OBJECTDIR}/eepromutil.p1.d ${OBJECTDIR}/ui_updown.p1.d ${OBJECTDIR}/ui_display.p1.d ${OBJECTDIR}/radio_getstat.p1.d ${OBJECTDIR}/helps.p1.d ${OBJECTDIR}/menu_memoryfreq.p1.d ${OBJECTDIR}/i2c_eeprom.p1.d ${OBJECTDIR}/backlight.p1.d ${OBJECTDIR}/menu_scan.p1.d ${OBJECTDIR}/menu_setup.p1.d ${OBJECTDIR}/menu_userband.p1.d ${OBJECTDIR}/menu_volume.p1.d
+OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/ui.p1 ${OBJECTDIR}/i2c_io.p1 ${OBJECTDIR}/main.p1 ${OBJECTDIR}/idle.p1 ${OBJECTDIR}/lcd_acm1602.p1 ${OBJECTDIR}/akc6955.p1 ${OBJECTDIR}/eeprom.p1 ${OBJECTDIR}/ioports.p1 ${OBJECTDIR}/menu.p1 ${OBJECTDIR}/power.p1 ${OBJECTDIR}/adc_int.p1 ${OBJECTDIR}/menu_defs.p1 ${OBJECTDIR}/eepromutil.p1 ${OBJECTDIR}/ui_updown.p1 ${OBJECTDIR}/ui_display.p1 ${OBJECTDIR}/radio_getstat.p1 ${OBJECTDIR}/helps.p1 ${OBJECTDIR}/menu_memoryfreq.p1 ${OBJECTDIR}/i2c_eeprom.p1 ${OBJECTDIR}/backlight.p1 ${OBJECTDIR}/menu_scan.p1 ${OBJECTDIR}/menu_setup.p1 ${OBJECTDIR}/menu_userband.p1 ${OBJECTDIR}/menu_volume.p1 ${OBJECTDIR}/rencoder.p1
+POSSIBLE_DEPFILES=${OBJECTDIR}/ui.p1.d ${OBJECTDIR}/i2c_io.p1.d ${OBJECTDIR}/main.p1.d ${OBJECTDIR}/idle.p1.d ${OBJECTDIR}/lcd_acm1602.p1.d ${OBJECTDIR}/akc6955.p1.d ${OBJECTDIR}/eeprom.p1.d ${OBJECTDIR}/ioports.p1.d ${OBJECTDIR}/menu.p1.d ${OBJECTDIR}/power.p1.d ${OBJECTDIR}/adc_int.p1.d ${OBJECTDIR}/menu_defs.p1.d ${OBJECTDIR}/eepromutil.p1.d ${OBJECTDIR}/ui_updown.p1.d ${OBJECTDIR}/ui_display.p1.d ${OBJECTDIR}/radio_getstat.p1.d ${OBJECTDIR}/helps.p1.d ${OBJECTDIR}/menu_memoryfreq.p1.d ${OBJECTDIR}/i2c_eeprom.p1.d ${OBJECTDIR}/backlight.p1.d ${OBJECTDIR}/menu_scan.p1.d ${OBJECTDIR}/menu_setup.p1.d ${OBJECTDIR}/menu_userband.p1.d ${OBJECTDIR}/menu_volume.p1.d ${OBJECTDIR}/rencoder.p1.d
 
 # Object Files
-OBJECTFILES=${OBJECTDIR}/ui.p1 ${OBJECTDIR}/i2c_io.p1 ${OBJECTDIR}/main.p1 ${OBJECTDIR}/idle.p1 ${OBJECTDIR}/lcd_acm1602.p1 ${OBJECTDIR}/akc6955.p1 ${OBJECTDIR}/eeprom.p1 ${OBJECTDIR}/ioports.p1 ${OBJECTDIR}/menu.p1 ${OBJECTDIR}/power.p1 ${OBJECTDIR}/adc_int.p1 ${OBJECTDIR}/menu_defs.p1 ${OBJECTDIR}/eepromutil.p1 ${OBJECTDIR}/ui_updown.p1 ${OBJECTDIR}/ui_display.p1 ${OBJECTDIR}/radio_getstat.p1 ${OBJECTDIR}/helps.p1 ${OBJECTDIR}/menu_memoryfreq.p1 ${OBJECTDIR}/i2c_eeprom.p1 ${OBJECTDIR}/backlight.p1 ${OBJECTDIR}/menu_scan.p1 ${OBJECTDIR}/menu_setup.p1 ${OBJECTDIR}/menu_userband.p1 ${OBJECTDIR}/menu_volume.p1
+OBJECTFILES=${OBJECTDIR}/ui.p1 ${OBJECTDIR}/i2c_io.p1 ${OBJECTDIR}/main.p1 ${OBJECTDIR}/idle.p1 ${OBJECTDIR}/lcd_acm1602.p1 ${OBJECTDIR}/akc6955.p1 ${OBJECTDIR}/eeprom.p1 ${OBJECTDIR}/ioports.p1 ${OBJECTDIR}/menu.p1 ${OBJECTDIR}/power.p1 ${OBJECTDIR}/adc_int.p1 ${OBJECTDIR}/menu_defs.p1 ${OBJECTDIR}/eepromutil.p1 ${OBJECTDIR}/ui_updown.p1 ${OBJECTDIR}/ui_display.p1 ${OBJECTDIR}/radio_getstat.p1 ${OBJECTDIR}/helps.p1 ${OBJECTDIR}/menu_memoryfreq.p1 ${OBJECTDIR}/i2c_eeprom.p1 ${OBJECTDIR}/backlight.p1 ${OBJECTDIR}/menu_scan.p1 ${OBJECTDIR}/menu_setup.p1 ${OBJECTDIR}/menu_userband.p1 ${OBJECTDIR}/menu_volume.p1 ${OBJECTDIR}/rencoder.p1
 
 # Source Files
-SOURCEFILES=ui.c i2c_io.c main.c idle.c lcd_acm1602.c akc6955.c eeprom.c ioports.c menu.c power.c adc_int.c menu_defs.c eepromutil.c ui_updown.c ui_display.c radio_getstat.c helps.c menu_memoryfreq.c i2c_eeprom.c backlight.c menu_scan.c menu_setup.c menu_userband.c menu_volume.c
+SOURCEFILES=ui.c i2c_io.c main.c idle.c lcd_acm1602.c akc6955.c eeprom.c ioports.c menu.c power.c adc_int.c menu_defs.c eepromutil.c ui_updown.c ui_display.c radio_getstat.c helps.c menu_memoryfreq.c i2c_eeprom.c backlight.c menu_scan.c menu_setup.c menu_userband.c menu_volume.c rencoder.c
 
 
 CFLAGS=
@@ -270,6 +270,14 @@ ${OBJECTDIR}/menu_volume.p1: menu_volume.c  nbproject/Makefile-${CND_CONF}.mk
        @-${MV} ${OBJECTDIR}/menu_volume.d ${OBJECTDIR}/menu_volume.p1.d 
        @${FIXDEPS} ${OBJECTDIR}/menu_volume.p1.d $(SILENT) -rsi ${MP_CC_DIR}../  
        
+${OBJECTDIR}/rencoder.p1: rencoder.c  nbproject/Makefile-${CND_CONF}.mk
+       @${MKDIR} ${OBJECTDIR} 
+       @${RM} ${OBJECTDIR}/rencoder.p1.d 
+       @${RM} ${OBJECTDIR}/rencoder.p1 
+       ${MP_CC} --pass1 $(MP_EXTRA_CC_PRE) --chip=$(MP_PROCESSOR_OPTION) -Q -G  -D__DEBUG=1 --debugger=pickit3  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=require --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,-config,+clib,+plib --output=-mcof,+elf "--errformat=%f:%l: error: %s" "--warnformat=%f:%l: warning: %s" "--msgformat=%f:%l: advisory: %s"    -o${OBJECTDIR}/rencoder.p1  rencoder.c 
+       @-${MV} ${OBJECTDIR}/rencoder.d ${OBJECTDIR}/rencoder.p1.d 
+       @${FIXDEPS} ${OBJECTDIR}/rencoder.p1.d $(SILENT) -rsi ${MP_CC_DIR}../  
+       
 else
 ${OBJECTDIR}/ui.p1: ui.c  nbproject/Makefile-${CND_CONF}.mk
        @${MKDIR} ${OBJECTDIR} 
@@ -463,6 +471,14 @@ ${OBJECTDIR}/menu_volume.p1: menu_volume.c  nbproject/Makefile-${CND_CONF}.mk
        @-${MV} ${OBJECTDIR}/menu_volume.d ${OBJECTDIR}/menu_volume.p1.d 
        @${FIXDEPS} ${OBJECTDIR}/menu_volume.p1.d $(SILENT) -rsi ${MP_CC_DIR}../  
        
+${OBJECTDIR}/rencoder.p1: rencoder.c  nbproject/Makefile-${CND_CONF}.mk
+       @${MKDIR} ${OBJECTDIR} 
+       @${RM} ${OBJECTDIR}/rencoder.p1.d 
+       @${RM} ${OBJECTDIR}/rencoder.p1 
+       ${MP_CC} --pass1 $(MP_EXTRA_CC_PRE) --chip=$(MP_PROCESSOR_OPTION) -Q -G  --double=24 --float=24 --emi=wordwrite --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=require --mode=free -P -N255 --warn=0 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-download,-config,+clib,+plib --output=-mcof,+elf "--errformat=%f:%l: error: %s" "--warnformat=%f:%l: warning: %s" "--msgformat=%f:%l: advisory: %s"    -o${OBJECTDIR}/rencoder.p1  rencoder.c 
+       @-${MV} ${OBJECTDIR}/rencoder.d ${OBJECTDIR}/rencoder.p1.d 
+       @${FIXDEPS} ${OBJECTDIR}/rencoder.p1.d $(SILENT) -rsi ${MP_CC_DIR}../  
+       
 endif
 
 # ------------------------------------------------------------------------------------
index fe00865..48f3574 100644 (file)
@@ -1,5 +1,5 @@
 #
-#Sun Oct 20 21:11:40 JST 2013
+#Mon Oct 21 01:29:40 JST 2013
 default.languagetoolchain.dir=/opt/microchip/xc8/v1.21/bin
 com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=0d2b1469ad71adb787c711a416386331
 default.languagetoolchain.version=1.21
index 5daefd0..8e66a63 100644 (file)
@@ -72,6 +72,8 @@
     <itemPath>menu_volume.c</itemPath>
     <itemPath>eeprom_util.h</itemPath>
     <itemPath>menu_ui.h</itemPath>
+    <itemPath>rencoder.c</itemPath>
+    <itemPath>rencoder.h</itemPath>
   </logicalFolder>
   <sourceRootList>
     <Elem>/usr/local/share/sdcc/lib/src/pic16/libc</Elem>
index 7625e0d..dcd8bac 100644 (file)
@@ -4,7 +4,7 @@
   <defaultConf>0</defaultConf>
   <confs>
     <conf name="default" type="2">
-      <platformToolSN>:=MPLABCommUSB:=04D8:=900A:=0002:=Microchip Technology Inc.:=PICkit 3:=DEFAULT_PK3 :=x:=en</platformToolSN>
+      <platformToolSN></platformToolSN>
       <languageToolchainDir>/opt/microchip/xc8/v1.21/bin</languageToolchainDir>
       <mdbdebugger version="1">
         <placeholder1>place holder 1</placeholder1>
index ec2357a..0407d41 100644 (file)
@@ -81,8 +81,6 @@ void update_status(void)
 //    batlevel_6955 = akc6955_get_battery();
   
     //ADC:reference
-    CVRCON2bits.FVREN = 1;
-    while(CVRCON2bits.FVRST == 0) idle(100);
     // Workaround of Errata:
     // Section 5 of http://ww1.microchip.com/downloads/en/DeviceDoc/80000425K.pdf .
     // Sample twice on first.
@@ -91,8 +89,10 @@ void update_status(void)
     startadc(_REF_ADC);
     ref = polladc2();
     TRISEbits.TRISE2 = 1;
-    startadc(_BATT_ADC);
-    adc = polladc2();
+    CVRCON2bits.FVREN = 1;
+    while(CVRCON2bits.FVRST == 0) idle(100);
+//    startadc(_BATT_ADC);
+//    adc = polladc2();
     startadc(_BATT_ADC);
     adc = polladc2();
     CVRCON2bits.FVREN = 0;
diff --git a/rencoder.c b/rencoder.c
new file mode 100644 (file)
index 0000000..23da54d
--- /dev/null
@@ -0,0 +1,128 @@
+/*
+ * OpenI2CRADIO
+ * Rotary encoder routine.
+ * Copyright (C) 2013-10-21 K.Ohta <whatisthis.sowhat ai gmail.com>
+ * License: GPL2+LE
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2,
+ *  or (at your option) any later version.
+ *  This library / program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *  See the GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this library; see the file COPYING. If not, write to the
+ *  Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ *  MA 02110-1301, USA.
+ *
+ *  As a special exception, if you link this(includeed from sdcc) library
+ *  with other files, some of which are compiled with SDCC,
+ *  to produce an executable, this library does not by itself cause
+ *  the resulting executable to be covered by the GNU General Public License.
+ *  This exception does not however invalidate any other reasons why
+ *  the executable file might be covered by the GNU General Public License.
+ */
+#include "rencoder.h"
+
+unsigned char renc_state_a;
+unsigned char renc_state_b;
+unsigned char renc_dir;
+unsigned char renc_count;
+unsigned char renc_reset_count;
+
+void rencoder_up(unsigned char dir)
+{
+   if(dir == RENC_NONE) return;
+   if(dir == renc_dir) {
+       renc_count++;
+   } else {
+       renc_count = 0;
+       renc_dir = dir;
+   }
+}
+
+void rencoder_init(void)
+{
+   RENC_TRIS_A = 1;
+   RENC_TRIS_B = 1;
+   renc_count = 0;
+   renc_dir = RENC_NONE;
+   renc_state_a = 0;
+   renc_state_b = 0;
+   renc_reset_count = 0;
+}
+
+
+void rencoder_restart(void)
+{
+}
+
+void rencoder_start(void)
+{
+   T1CON = 0b10110100;// RD16, T1RUN=0, 1/32 fOSC, TNR1CS=0, TMR1ON=0;
+   TMR1H = 63036 >> 8; // Tick = 4us, Count = 2500
+   TMR1L = 63036 & 255;
+   PIR1bits.TMR1IF = 0;
+   PIE1bits.TMR1IE = 1;
+   IPR1bits.TMR1IP = 1;
+   T1CONbits.TMR1ON = 1;
+   rencoder_init();
+}
+
+void rencoder_stop(void)
+{
+   T1CON = 0b10110100;
+   TMR1H = 0;
+   TMR1L = 0;
+   PIR1bits.TMR1IF = 0;
+   PIE1bits.TMR1IE = 0;
+   IPR1bits.TMR1IP = 1;
+   rencoder_init();
+}
+
+
+void rencoder_count(void)
+{
+   unsigned char dir = 0;
+   
+   if(RENC_PH_B != 0) {
+      if(renc_state_a != 0){
+        if(RENC_PH_A == 0) {
+           dir = RENC_RIGHT;
+        }
+      } else {
+        if(RENC_PH_A != 0) {
+           dir = RENC_LEFT;
+        }
+      }
+   }
+   if(dir != RENC_NONE) {
+      if(dir == renc_dir) {
+        renc_count++;
+      } else {
+        renc_count = 0;
+        renc_dir = dir;
+      }
+     renc_reset_count = 0;
+   } else{
+     renc_reset_count++;
+     if(renc_reset_count >= 100) { // 1000ms
+       renc_count = 0;
+       renc_dir = RENC_NONE;
+       renc_state_a = 0;
+       renc_state_b = 0;
+       renc_reset_count = 0;
+     }
+   }
+   
+   
+//   rencoder_up(dir);
+   renc_state_a = RENC_PH_A;
+   renc_state_b = RENC_PH_B;
+}
+
+        
+       
diff --git a/rencoder.h b/rencoder.h
new file mode 100644 (file)
index 0000000..6ea3886
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+ * OpenI2CRADIO
+ * Rotary encoder routine(Header).
+ * Copyright (C) 2013-10-21 K.Ohta <whatisthis.sowhat ai gmail.com>
+ * License: GPL2+LE
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2,
+ *  or (at your option) any later version.
+ *  This library / program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ *  See the GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this library; see the file COPYING. If not, write to the
+ *  Free Software Foundation, 51 Franklin Street, Fifth Floor, Boston,
+ *  MA 02110-1301, USA.
+ *
+ *  As a special exception, if you link this(includeed from sdcc) library
+ *  with other files, some of which are compiled with SDCC,
+ *  to produce an executable, this library does not by itself cause
+ *  the resulting executable to be covered by the GNU General Public License.
+ *  This exception does not however invalidate any other reasons why
+ *  the executable file might be covered by the GNU General Public License.
+ */
+
+#if defined(__SDCC)
+#include <sdcc-lib.h>
+#include <pic18fregs.h> /* ONLY FOR PIC18x */
+#include <delay.h>
+#else
+#include <xc.h>
+#endif
+
+#include "iodef.h"
+
+#define RENC_PH_A PORTBbits.RB5
+#define RENC_PH_B PORTCbits.RC5
+#define RENC_TRIS_A TRISBbits.TRISB5
+#define RENC_TRIS_B TRISCbits.TRISC5
+#define RENC_NONE 0x00
+#define RENC_LEFT 0x7f
+#define RENC_RIGHT 0xff
+
+extern unsigned char renc_state_a;
+extern unsigned char renc_state_b;
+extern unsigned char renc_dir;
+extern unsigned char renc_count;
+
+extern void rencoder_up(unsigned char dir);
+extern void rencoder_init(void);
+extern void rencoder_count(void);
+extern void rencoder_start(void);
+extern void rencoder_restart(void);
+extern void rencoder_stop(void);
+