Been said before and I will say it again.
NEVER TRUST A SIM!
Been said before and I will say it again.
NEVER TRUST A SIM!
Dave
Always wear safety glasses while programming.
... ok, so work, despite the "non-working" of simulator !
Next step is to try to make the two coexist (keypad.bas & encoder.bas) .
First I will build the schematic and making some tests. Thanks again for the huge support !
It's this a viable options of reading encoder AND the others buttons ?
Code:Main: ;============== ;reading buttons on line 0 (pseudo-encoder) PortB.5 = 0 newState = PortA & %00000111 PortB.5 = 1 If newState <> 7 THEN If newState <> oldState THEN Select Case oldState Case 3 If NewState = 6 THEN dir=up portb.0 = 1 endif If NewState = 5 THEN dir=dn portb.1 = 1 endif Case 5 If NewState = 3 THEN dir=up portb.0 = 1 endif If NewState = 6 THEN dir=dn portb.1 = 1 endif Case 6 If NewState = 5 THEN dir=up portb.0 = 1 endif If NewState = 3 THEN dir=dn portb.1 = 1 endif END SELECT oldState = newState Pause 100 ENDIF ENDIF ;============== ;reading buttons on line 1 Porta.4 = 0 status_2 = PortA & %00000111 Porta.4 = 1 select case status_2 case 3 gosub trackDn case 5 gosub mute case 6 gosub trackUp end select ;============== ;reading buttons on line 2 Porta.3 = 0 status_3 = PortA & %00000111 Porta.3 = 1 select case status_3 case 3 gosub volDn case 5 gosub volUp case 6 gosub Sursa end select Goto Main
So far, so god ... Now another problem : how can I separates signals?
If rotary switch is Up, can't read if TK- or V- are pressed ..
If rotary switch is in middle position, can't read if MUTE or V+ are pressed ...
If rotary switch is down, can't read if TK+ or S are pressed...
LE - I think this work :
Code:;reading buttons on line 1 Porta.4 = 0 trisb.5 = 1 pause 50 status_2 = PortA & %00000111 Porta.4 = 1 trisb.5 = 0
Last edited by fratello; - 14th April 2012 at 22:38.
New code works pretty well ... But, how can I avoid false roller codes ? If I turn up, not always the the code "see" up ; if I turn down, not always the code "see" down ...Sometimes, the commands (Up/Down) are inversed !
I try to add some "pause" between different commands, but the problem remains.
No, don't try to slow it down...speed it up. If you have any pauses in there try removing those. If your program is going to do 'other' things as well (which I'm sure it is) then you may need to sample the encoder several times thru out the main loop.
The reason is because if you are at one state and then turn forward two states but you do it fast enough so that the code doesn't detect the "middle" state, then it looks like you turned one state backwards instead of two forward.
So, you want to sample the encoder as fast as you can possibly turn it - and then some.
/Henrik.
I try both variants, presented in code, but without major improvements.
Code:;============== ;reading buttons on row 0 (pseudo-encoder) PortA.1 = 0 ; pause 10 @ nop newState = PortA & %00011100 ; this is for my hw : 11100 = 28 PortA.1 = 1 If newState <> 28 THEN If newState <> oldState THEN Select Case oldState Case 12 If NewState = 24 THEN dir=up endif If NewState = 20 THEN dir=dn endif Case 20 If NewState = 12 THEN dir=up endif If NewState = 24 THEN dir=dn endif Case 24 If NewState = 20 THEN dir=up endif If NewState = 12 THEN dir=dn endif END SELECT oldState = newState GOSUB UpOrDn pause 100 endif ENDIF
Bookmarks