welcome back !![]()
Bogdan,
Tonight I will check to see what software version I have. I bought my U2 programmer about two years ago, so it is probably an old version. I need to research this issue a little bit more.
Mister_e,
It is very nice to see you back. I have a program >8000 words that I developed using PM. This program uses interrupts on a PIC16F727 to read values for a built-in capacitance touch sensor. However, if I use MPASM the sensors don't work properly. I suspect it has to do with different interrupt intervals if I use MPASM, but I haven't tested this yet. This is the reason why I use PM for my touch sensor projects.
Robert
"No one is completely worthless. They can always serve as a bad example."
Anonymous
Or it's working as design with MPASM, but have problem with PM, but... ya never know.
Do yourself a big favor, isolate the problem, keep the ISR and a simple short and sweet main loop, see if the problem's still there.
Usual Convention: Keep the ISR as short as possible.
Get rid of PBP interrupt and use ASM one, or DT.
Maybe not a bad idea to make sure you're using the latest MPASM version.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Bogdan,
I have an old software version 4.23. In Melabs.com they have a free download for the latest Beta v4.32 software. I will install it and will post back with results.
Mister_e,
Yes, I know that I have to fix that problem with the interrupts to make the sensors work properly with MPASM. Now, I am using ON INTERRUPT GOTO ISR to handle the ISR. There are many lines of code that need to get done in the ISR routine. So, if I have many lines of PBP in the ISR routine, what method should I use?
Should I go with something like this?
Or, should I do something like this with DTs interrupts?Code:@myint ; create myint label ....... @ retfie FAST ; Return with 'auto restore' of WREG, STATUS and BSR
Code:INCLUDE "DT_INTS-14.bas" ' Base Interrupt System INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts ASM INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR0_INT, _MyInterrupt, PBP, yes endm INT_CREATE ; Creates the interrupt processor ENDASM @ INT_ENABLE TMR0_INT ; enable Timer 0 interrupts ..... MyInterrupt: ..... @ INT_RETURN
"No one is completely worthless. They can always serve as a bad example."
Anonymous
If you have PBP lines in your ISR, I'd say go for your second example.
What kind of interrrupt it is? Remember that ON INTERRUPT will jump in your ISR ONLY after finishing a x current job. So if you have, say PAUSE 5000, in your main loop, it may take up to 5 secondes to jump in the ISR (assuming your main loop is actually doing the PAUSE). Maybe why your sensor doesn't work that good. Now why better on PM than MPASM, I don't know.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
The new U2 programmer software version supports all the PIC16F193x. So, I was able to program my 16F1939.
The interrupts that I'm using are kind of complicated (at least for me). To make the Capacitive Sensors to work a value needs to be read from TMR1L and TMR1H together. This would tell you if the sensor was touched or not. However, the interrupt overflow is determined by TMR0. This is the way is done in the Application Notes. The interrupt settings for a 16F727 look something like this and it works,
Code:OPTION_REG = %11000011 'Bit 2-0, 110= prescaler rate 1:16 (TMRO INTERRUPTS EVERY 1.024 mSec) T1CON = %11000101 'Timer1 initialization T1GCON = %11100001 'Timer1 gate init /Toggle Mode/TMR0 time base PIR1.7 = 0 'Clear Gate Interrupt Flag. Timer1 gate is active (TMR1GIF BIT) PIE1.7 = 1 'Disable the Timer1 Gate Acquisition complete interrupt (TMR1GIE BIT) TMR0 = 0 'TMR0 overflows every (256-TMRO)*(Prescaler rate)(4*(1/16)uS)=1024uSec. ON INTERRUPT GOTO ISR INTCON = %10100000 'Enable Interrupts DISABLE 'Disable further interrupts ISR: T1CON.0 = 0 'Stop/Clears Timer1 before reading TMR1 .... "Read TMRL and TMRH" .... TMR1L = 0 'Reset Timer1 TMR1H = 0 T1CON.0 = 1 'Restart/Enable Timer1 (TMR1ON BIT) TMR0 = 0 'RESET TMR0 TO 0 INTCON.2 = 0 'Re-enable TMR0 interrupts. Bit 2, 0= clears overflow, 1= overflow ocurred RESUME 'Return to main program ENABLE 'Enable interrupts
"No one is completely worthless. They can always serve as a bad example."
Anonymous
Byte_Butcher was working on Capacitive Touch on a 727 with DT_INTS here ...
http://www.picbasic.co.uk/forum/show...1611#post71611
I'm not sure what needs to be changed for the 1939, but it's probably a good start.
DT
Bookmarks