Now we have 3 version of interrupts here
ASM
Instant Interrupt
PBP ON interrupt
the easiests are PBP, and Darrel Instant interrupts. More efficient pure ASM... but Darrel's instant is really f**** close of the ASM.
As always, nobody's give the PIC # and the expected results... hard to point out the best and ultimate Solution.... it won't break your keyboard to type few more lines. If so, i'll send you a brand new one... i buy keyboard in slap of 100's. 1-2 buck each.
Last edited by mister_e; - 22nd March 2007 at 22:20.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
The PIC is a 16F676 so it's pretty tight with code space and variables (have tried DT's code but it runs out of variables), I'm just trying to exit from a serin command where there is always noise coming into the port (AM reciever module) just to increment a timer - and turn device off after a predetermined time.
Last edited by George; - 23rd March 2007 at 04:23.
Can you post your code here?
To me a PIC with a USART would be more interesting in this case.
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi,
Even if you are not using interrupts the timer0 rollover (INTCON.2, T0IF) gets set. So you can periodically check if the flag is set. To get proper timeout your main body loop should not execute for more than the timer0 rollover period. Even if it does then you miss a few ticks but still get some dirty timing. So here is how it goes
PRESET is hard coded. In your main routine when you receive a valid signal don't forget to clear (Reset) the timer_counter variable and any pending ticks i.e., INTCON.2Code:OPTION_REG = %11000111 ' SET PRESCALE HERE 256 (Datasheet PAGE 14) ' @4MHz AND PRESCALE TIMER0 ROLLSOVER IN ABOUT 65.5 mS TIME_COUNTER VAR WORD ' MAY BE A BYTE ALSO INTCON = 0 TIME_COUNTER = 0 MAIN_LOOP: ' DO WHATEVER IF INTCON.2 = 1 THEN ' CHECK IF TIMER ROLLED OVER INTCON.2 = 0 ' CLEAR THE HARDWARE FLAG TMR0 = 0 ' CLEAR TIMER0 IF YOU WISH TIME_COUNTER = TIME_COUNTER + 1 ' INCREMENT YOUR COUNTER ENDIF IF TIME_COUNTER > PRESET THEN QUIT_LOOP GOTO MAIN_LOOP QUIT_LOOP: ' TIME OVER DO WHATEVER
Hope this helps
Regards
Sougata
Thanks sougata, that'll be a handy piece of code for some other timing projects of mine - I havn't used the timer in a project before, just a crude timing loop instead.
I need to interupt to get out of serin command when there is static on the line, tho I'll prolly end up using the RSSI on the module and squelch it, would just be nice to have done this as a sample for learning.
How do you put code snippets in the little box on this forum? Mine is pasted below sofar
@ DEVICE PIC16F676, INTRC_OSC_NOCLKOUT, MCLR_OFF, PROTECT_OFF, BOD_ON, CPD_OFF
Define OSCCAL_1K 1
DEFINE OSC 4
TRISA = %001000
TRISC = %000000
ANSEL = 0 'disable analog
T1CON = %00000100
VRCON = 0 ' A/D Voltage reference disabled
CMCON = 7 'Disable comparitor
timesw var PortA.5
gosw var PortA.3
stopsw var PortA.4
LED1 var PortA.0
timeset var byte
display var byte
'time var word
b0 var byte
b1 var bit
b2 var byte
clear
timeset = 1
PortA = 0
PortC = 0
Begin: 'start sequence
display = (1 << b0) - 1
PORTC = display
pause 100
if b0 < 7 then
b0 = b0 + 1
goto begin
Else
Pause 1000
b0 = 0
portC = b0
Endif
Start:
serin PORTA.3,0,1,time,["READY"], timeset, b1 'Read receiver
gosub disply
time:
if timeset = 0 then b1 = 0
PortA.0 = b1
goto start
disply:
display = (1 << timeset) 'Set display to be bar type
PORTC = display 'output LEDs
' PORTA.0 = b1
return
'INTERUPT_SNIP ON TIMING INTERUPT
' if b1 = 1 then
' time = time + 1
' else
' time = 0
' endif
' if time > 200 and b1 = 1 then
' time = 0
' timeset = timeset - 1
' endif
'RTN FRM INT
Any idea's on squelch circuit? I was thinking about using an LM358 opamp putting the RSSI and a threshold into one amp then the output of that (maybe thru a divider) to the input of the other amp alongside data to get a squelched output?
I think MELabs should modify their code for the serin timeout and supply a timeout feature that will timeout if the qualifier isn't met within the timeout period I realise this would be more difficult - but I've spent hours fluffing around on what should be such a simple project - monitoring an RF receiver and counting down the time - i can't exit from the serin cos the static noise on the line resets the timer in the serin command, i can't use Darryl's wonderful interupt file cos it chews up all my variables, i can use an asm interupt cos I'm not really advanced enough to figure it out. Hopefully the squelch will work albeit with what probably is a significant reduction in range.
I do like Mister_e's concept of looking at a USART - I might have a quick look in2 that before I build my squelch
Last edited by George; - 26th March 2007 at 02:22.
Bookmarks