so can you do this:
did you try it with () around the conditions?Code:IF (step 1) and (step 2) then : ' notice the : it lets you have multiple steps step 3 step 4 step 5 endif
so can you do this:
did you try it with () around the conditions?Code:IF (step 1) and (step 2) then : ' notice the : it lets you have multiple steps step 3 step 4 step 5 endif
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
I am using 16F84, all porta have been declarated as inputs( it is like pushbuttons) It works on the begining.. Yes I`ve tried this with ( ) and there is no difference still not working as I want. Maybe this can be done with while....wend or for.... cycle....just don`t know how.
In 16F84 MCLR pin can't be disabled, so 4k7 resistor pullup to +5V or its never going to work
Also for the used inputs use 10K pullups and instead of using the button command, try something a lot simpler:
Try explaining a little better your circuit so i can help you with your code (maybe an schematic or diagram?)Code:b0 = 0 'reset flag if ti = 0 then 'if pullup pin is in ground b0 = 1 'activate button press flag pause 250 'debounce endif
Also remeber that a 16F84 its not the same as a 16F84A for the compiler, check for that.
"If at first doesn't work, kicking it wont help either"
Thanks for your quick response. I wroted a scheme, but it is hand drawing for now, I hope it will be ok.
In the mean time, I found a way to get this work, but there is another problem again.
This is code:
TRISA = $FF 'Postavi sve pinove porta A kao ulazne
TRISB = $00 'Postavi sve pinove porta B kao izlazne
B0 var byte
i var byte
symbol t1 = porta.1
symbol tajmer = portb.0
symbol rele = porta.0
begin:
pause 100 'vrlo bitna pauza'
while tajmer = 1 and rele = 1
goto petlja
petlja:
i = 0
for i = 1 to 2
If i = 1 then
pause 300
goto petlja1
endif
if i = 2 then
pause 300
goto petlja2
endif
next i
petlja1:
PAUSE 500
tajmer = 0 'iskljuci tajmer'
portb.1 = 0 'ukljuci crvenu diodu veliku'
pause 3000 'pauza 3 sekunde'
petlja2:
tajmer = 1
portb.2 = 0 'ukljuci diodu zelenu'
portb.1 = 1 'iskljuci crvenu diodu'
pause 200
wend 'vrlo bitna pauza'
IF tajmer = 1 AND rele = 1
portb.3 = 0
portb.1 = 1
portb.2 = 1
ENDIF
B0 = 0
button t1,0,255,0,B0,1,ukljucenje 'ako je taster pritisnut idi na ukljucenje'
goto begin
ukljucenje:
tajmer = 1
goto begin
End
The commented is in Serbian so don`t look at it.
The code do following: after press a pushbutton t1, tajmer is on and it works until it turn off, but only a timer. Its transistor is still on and have to be off and again on to reset. Now transistor for timer is off, some leds are on, pause 3 seconds, then on again transistor and timer, after a while timer goes off, and continuo for the begining again.
The problem now is how to continue to cycle after wend and not to go from begin what this program do ? Becouse program after wend go from the begining again, not considering this IF...AND....Then after wend. I need this, and maybe more examining loops before going to begin again. Maybe this FOR cycle is not good?
Kind regards.
Your IF..Then's are causing you to jump out of the for...next. If you change the GOTO to GOSUB, then add a RETURN after the blocks of code you are jumping to, maybe this will fix the problem.
I must admit I don't really get the goal of your program, but I think you don't intend to jump out maybe?
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
This with gosub works to, but the exactly same thing happens. I tried to put IF ...then condition in body of gosub to examin again but program just not "see" that and go again from the begin.
Here is a new code:
begin:
pause 100 'vrlo bitna pauza'
while tajmer = 1 and rele = 1
goto petlja
petlja:
PAUSE 500
tajmer = 0 'iskljuci tajmer'
portb.1 = 0 'ukljuci crvenu diodu veliku'
pause 3000
gosub petlja1 'iskljuci crvenu diodu
petlja1:
tajmer = 1 'ukljuci tajmer'
portb.1 = 1 'iskljuci crvenu led'
portb.2 = 0 'ukljuci zelenu led'
return
wend 'vrlo bitna pauza'
B0 = 0
button t1,0,255,0,B0,1,ukljucenje 'ako je taster pritisnut idi na ukljucenje'
goto begin
ukljucenje:
tajmer = 1
goto begin
End
The reason for using hardware timer is becouse I don`t know how to make it with microcontroller and potentiometer, maybe that will makes this code easier. In all this code very important information is when timer stops counting(countdown) which is enabled by relay which is similiar to pushbutton on porta.0.
OK, Maybe I see the problem. AND MAYBE I can explain it. Here goes. This is your program from a few posts back with some added comments:
If you change the RED goto to gosub,add the returns, and move the petlja1 and petlja2 routines to the end of the program. It may act as you expect.Code:TRISA = $FF 'Postavi sve pinove porta A kao ulazne TRISB = $00 'Postavi sve pinove porta B kao izlazne B0 var byte i var byte symbol t1 = porta.1 symbol tajmer = portb.0 symbol rele = porta.0 begin: pause 100 'vrlo bitna pauza' while tajmer = 1 and rele = 1 ' when both are 1, we do this while loop goto petlja petlja: i = 0 for i = 1 to 2 If i = 1 then pause 300 goto petlja1' EVERY time timer and relay are 1, we go to petlja1 endif if i = 2 then pause 300 goto petlja2 endif next i petlja1: ' We are here because timer and relay are = 1 PAUSE 500 tajmer = 0 'iskljuci tajmer' ' now timer = 0? portRETb.1 = 0 'ukljuci crvenu diodu veliku' pause 3000 'pauza 3 sekunde' RETURN ' I think you need to add this here petlja2: ' We are here because we fall in here from petlja1 tajmer = 1 ' now timer = 1 again portb.2 = 0 'ukljuci diodu zelenu' portb.1 = 1 'iskljuci crvenu diodu' pause 200 RETURN' and here wend 'vrlo bitna pauza' ' go back and check while again. right now timer = 1, relay = ?? ' If relay also = 1, you will never get out of the loop. IF tajmer = 1 AND rele = 1 ' I think you will never get to this check, stuck in the while loop. portb.3 = 0 portb.1 = 1 portb.2 = 1 ENDIF B0 = 0 button t1,0,255,0,B0,1,ukljucenje 'ako je taster pritisnut idi na ukljucenje' goto begin ukljucenje: tajmer = 1 goto begin End
-Bert
The glass is not half full or half empty, Its twice as big as needed for the job!
http://foamcasualty.com/ - Warbird R/C scratch building with foam!
Bookmarks