I bet this is my Saleae probe biting me in the nose again; not being able to run it fast enough.
The interrupt is working faster, I'm probably missing signals.
EDIT: And I notice I didn't align the marker the same way on Probe 1 - Port = 1 / 0, but it's the same interval as described in the WIDTH; 0.250uS, I just rechecked.
Code:asm ; __CONFIG _CONFIG1H, _FOSC_INTIO67_1H & _PLLCFG_OFF_1H & _PRICLKEN_OFF_1H & _FCMEN_ON_1H & _IESO_OFF_1H __CONFIG _CONFIG1H, _FOSC_INTIO67_1H & _PLLCFG_ON_1H & _PRICLKEN_OFF_1H & _FCMEN_ON_1H & _IESO_OFF_1H __CONFIG _CONFIG2L, _PWRTEN_ON_2L & _BOREN_SBORDIS_2L & _BORV_285_2L __CONFIG _CONFIG2H, _WDTEN_OFF_2H __CONFIG _CONFIG3H, _CCP2MX_PORTC1_3H & _PBADEN_OFF_3H & _CCP3MX_PORTE0_3H & _HFOFST_OFF_3H & _T3CMX_PORTB5_3H & _P2BMX_PORTC0_3H & _MCLRE_EXTMCLR_3H __CONFIG _CONFIG4L, _STVREN_OFF_4L & _LVP_OFF_4L & _XINST_OFF_4L & _DEBUG_OFF_4L endasm ;DEFINE OSC 16 ;OSCTUNE = %10000000 DEFINE OSC 64 OSCTUNE = %11000000 OSCCON = %01110000 OSCCON2 = %00000100 INCLUDE "DT_INTS-18.bas" INCLUDE "ReEnterPBP-18.bas" INCLUDE "ReEnterPBP-18LP.bas" INCLUDE "Elapsed_INT-18.bas" ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? ; INT_Handler RX1_INT, _RX1Interrupt, PBP, yes endm INT_CREATE ; Creates the interrupt processor INT_LIST_L macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR1_INT, _ClockCount, PBP, yes endm INT_CREATE_L ; Creates the Low Priority interrupt processor ENDASM ANSELA = %00000000 ANSELB = %00000000 ANSELC = %00000000 ANSELD = %00000000 ANSELE = %00000000 ADCON0 = %00000000 PMD0 = %10111110 PMD1 = %11011111 PMD2 = %00001111 DEFINE USE_LOWPRIORITY 1 TRISA = %00000000 TRISB = %00000000 TRISC = %00000000 TRISD = %00000000 TRISE = %00000000 PORTA = %00000000 PORTB = %00000000 PORTC = %00000000 PORTD = %00000000 PORTE = %00000000 pause 100 @ INT_ENABLE TMR1_INT ; enable Timer 1 interrupts GOSUB ResetTime ' Reset Time to 0d-00:00:00.00 MainProgram: PortD.2 = 1 if T1CON.0 = 0 then GOSUB StartTimer ' Start the Elapsed Timer PortD.3 = 1 endif PortD.2 = 0 if ticks = 25 then PortD.3 = 0 GOSUB StopTimer ' Stop the Elapsed Timer GOSUB ResetTime ' Reset Time to 0d-00:00:00.00 endif goto MainProgram end
Switch bouncing becomes much more pronounced at 64MHz. I think I'm going to change approach and go the long way and use just a 0.1uF ceramic cap on each pin (I remember that helped somewhat on previous tests).
Master PIC @ 64MHz
LED Slave PIC @ 64MHz
Keypad Slave PIC at 16MHz
I start DT Timer on a keypress and ignore inputs during that interval. I just have to make tests to see how fast I can press the same button and tweak the delay.
I wanted to handle both the LEDs and Keypad on the same PIC, but it'll be a lot easier and reliable to just split them up.




Bookmarks