Yes, it compiles. You need to use Microchips Assembler instead of the MeLabs. What errors are you getting? (Are you using MicroCode Studio?)
Yes, it compiles. You need to use Microchips Assembler instead of the MeLabs. What errors are you getting? (Are you using MicroCode Studio?)
Hey Steve,
I have tried microcode studio and microchips mpasm. I think I might have a problem with mpasm talking to pbp or I installed something wrong. I was going to unistall everything and try again but my pbp is on a floppy and I found out my floppy drive (havent used it in years! LOL) is bad. I ordered a new one and will have it by the end of the week. Its amazing how cheap a floppy drive is these days. I also ordered my first Oscilloscope! Its only a BK precision 2120b 30mhz dual channel but it should be able to handle everything I do.
Thanks,
Smitty
I think others may have had the same problem. DynamoBen recently got his to work. Maybe he can help sort out whats wrong. He mentions that he "changed the registry", but no specifics. Not having had a problem with my setup, I'd just be guessing.
The other alternative is writing the interrupt routine is ASM.Better to get your compiler/assembler arrangement working properly.
Steve
I got it to compile!!! Using microcode studio.Happy dance. LOL
On a down note, it dosnt do anything. The LCD has a value of 0 for both encoders. I tried switching the a&b channels and still nothing. I checked all my connections and everything looks good. I am using a 16F876A now instead of the 16F628. I need to check those pins and see if anything needs to be turned off.
I think I am getting close!
Thanks,
Smitty
Originally Posted by smitty505000
Once you check over the hardware to eliminate any problems there, then post the code you are using. Lots of folks can help out with that!
Steve
Hey Steve, seems we use the same source for this 'Dancing Awesome'
<img src="http://www.picbasic.co.uk/forum/attachment.php?attachmentid=881&d=1148640458">
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
LOL, Thanks for the help and support guys!
Here is the run down
Code from Steve on post 12 works but looses count if rotated too fast so I know the circuit is good.
I then went to the code in post 6 with both asm routines and compiled it with microcode studio. Compiled fine. The only things I changed in the code from post 6 was adding:
DEFINE OSC 20
PAUSE 1000
SEROUT2 on PORTB.0 FOR LCD clear
SEROUT2 ON PORTB.0 FOR DISPLAY
Here it is:
Old_Bits VAR BYTE
New_Bits VAR BYTE
RotEnc1_val VAR BYTE 'Connected to PORTB<4:5>
RotEnc2_val VAR BYTE 'Connected to PORTB<6:7>
TRISB = %11110000
RotEncDir VAR BIT
'************************
' SETUP YOUR LCD HERE!!!
'************************
DEFINE OSC 20
PAUSE 1000 'Pause for LCD Power up
SEROUT2 PORTB.0, 84,[254, 88] 'Clear LCD
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 INT_INT, _Rot_Encoder, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor
ENDASM
@ INT_ENABLE RBC_INT ;RB Port Change Interrupt
Old_Bits = PORTB & (%11110000)
Main:
SEROUT2 PORTB.0, 84,[254, 71, 1, 1, "ROT1:", DEC2 RotEnc1_val,"ROT2:",_
DEC2 RotEnc2_val]
pause 10
GOTO Main
'---[RBC - interrupt handler]---------------------------------------------------
Rot_Encoder:
New_Bits = PORTB & (%11110000)
IF (New_Bits & %00110000) = (Old_Bits & %00110000) then No_Change_Rot1
RotEncDir = New_Bits.5 ^ Old_Bits.4
if RotEncDir = 1 then
RotEnc1_val = RotEnc1_val + 1
if RotEnc1_val = 36 then RotEnc1_val = 0
ELSE
RotEnc1_val = RotEnc1_val - 1
if RotEnc1_val = 255 then RotEnc1_val = 35
ENDIF
No_Change_Rot1:
IF (New_Bits & %11000000) = (Old_Bits & %11000000) then DoneRotEnc
RotEncDir = New_Bits.7 ^ Old_Bits.6
if RotEncDir = 1 then
RotEnc2_val = RotEnc2_val + 1
if RotEnc2_val = 36 then RotEnc2_val = 0
ELSE
RotEnc2_val = RotEnc2_val - 1
if RotEnc2_val = 255 then RotEnc2_val = 35
ENDIF
DoneRotEnc:
Old_Bits = New_Bits
@ INT_RETURN
The LCD comes up and displays ok. Then when I rotate an encoder, sometimes I get a little garbage on the screen and then it just seams to hang. I can go thru many restarts before the LCD will display properly again. It kinda seams like the chip is stuck. Is that possible even though I disconnect power and then reconnect? Is the pic holding something in memory where it hangs? I am using a 16F876A
Thanks guys!
Smitty
Bookmarks