Right.. i just put the LCDOUT command to compare the count with my hand watch. So, the routine is correct.. thanks Darrel.
Sylvio
Right.. i just put the LCDOUT command to compare the count with my hand watch. So, the routine is correct.. thanks Darrel.
Sylvio
Good to go ...... So, the routine is correct..
One thing to note ...
You don't need to reload PR2 each time. It doesn't change.
<br>
DT
0.o I've read that a thousand times and still reloaded..Thanks again..
Sylvio
HI Again... I have tried again taking the LCDOUT command out of interrupt routine and putting inside the MAIN sub. NOthing! It is running crazy and I've also tried setting postscaler 1:16 or/and prescaler 1:16 and still nothing. Does the code look really correct? What I want is to set any flag every 500ms using TMR2... A little help please?
Thanks again.. Sylvio,
Code:'------- initial -------------------- TMR2_clock VAR WORD OPTION_REG = %00000000 INTCON = %11000000 ' enable interrupts TRISB = %00000000 ' portb all output TRISA = %00111111 ' some analog inputs ANSEL = %00001111 ' some analog inputs CMCON = %00000111 ' turn of comparators ADCON1 = %10000000' right justified T2CON = %00000011 ' TMR2 prescale 1:16 --> TESTED WITH POST and PRESCALER (1:16) '--------------------------------------------------- TMR2_clock = 0 Lcdout $FE,1 ' clear screen PR2 = 194 ' load tmr2 PR2 to reset every 1ms PIE1.1 = 1 ' enable TMR2 interrupt PIR1.1 = 0 ' disabled interrupt flag - TMR2 T2CON.2 = 1 ' turn TMR2 on ON INTERRUPT GOTO tick MAIN: Lcdout $FE,$A0, DEC TMR2_clock ---> CHANGED GOTO MAIN DISABLE tick: TMR2_clock = TMR2_clock + 1 IF TMR2_clock = 500 THEN TMR2_clock = 0 ' Set some flag.. ENDIF PIR1.1 = 0 resume ENABLE
You've just moved the time to write to the LCD to a different place.
When using ON INTERRUPT, it can't handle an interrupt until the current statement has finshed executing.
If you want to have a 1ms interrupt, then nothing else in the program can take more than 1ms to execute, and really should be much less than that.
If you were using ASM interrupts, then it could interrupt the LCDOUT statement, so there wouldn't be a conflict.
Or you could use Instant Interrupts to do the same thing with Basic language interrupts without the ON INTERRUPT.
<br>
DT
OK. Let's try the instant interrupts. I have just added the II codes and it looks like this:
Well.. the LCD gets cleared. No text at all..Code:@ ERRORLEVEL -306 ; turn off crossing page boundary message @ __CONFIG _CONFIG1, _CP_OFF & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC INCLUDE "DT_INTS-14.bas" ' Base Interrupt System INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts ASM ;T0IF = TMR0IF ;T0IE = TMR0IE INT_LIST macro ; IntSource, Label, Type, ResetFlag? INT_Handler TMR2_INT, _tick, PBP, yes endm INT_CREATE ; Creates the interrupt processor ENDASM @ INT_ENABLE TMR2_INT ; Enable Timer 1 Interrupts '------- initial -------------------- TMR2_clock VAR WORD OPTION_REG = %00000000 ' INTCON = %11000000 ' enable interrupts ->NOW COMMENTED TRISB = %00000000 ' portb all output TRISA = %00111111 ' some analog inputs ANSEL = %00001111 ' some analog inputs CMCON = %00000111 ' turn of comparators ADCON1 = %10000000' right justified T2CON = %00000011 ' TMR2 prescale 1:16 --> TESTED WITH POST and PRESCALER (1:16) '--------------------------------------------------- TMR2_clock = 0 Lcdout $FE,1 ' clear screen PR2 = 194 ' load tmr2 PR2 to reset every 1ms 'PIE1.1 = 1 ' enable TMR2 interrupt -> NOW COMMENTED 'PIR1.1 = 0 ' disabled interrupt flag - TMR2 -> NOW COMMENTED T2CON.2 = 1 ' turn TMR2 on 'ON INTERRUPT GOTO tick -> -> NOW COMMENTED MAIN: Lcdout $FE,$A0, DEC TMR2_clock ---> CHANGED GOTO MAIN tick: TMR2_clock = TMR2_clock + 1 IF TMR2_clock = 500 THEN TMR2_clock = 0 ' Set some flag.. ENDIF @ INT_RETURN
What's wrong?
Thank you.
Sylvio
What pins are the LCD hooked up to?
Without the DEFINES, the LCD defaults to PORTA 0-3 for the data, but those pins are configured for analog.
You had the same settings before and said it was working so I assumed there were defines that you didn't show. But now it looks like there aren't any.
<br>
DT
Bookmarks