how can i start the timer for example when the analog input from the pot is 3 V and stop the timer when it is 5 V ?
thanks
how can i start the timer for example when the analog input from the pot is 3 V and stop the timer when it is 5 V ?
thanks
You may want to consider using ADCIN in place of POT.Code:loop: If pot value => 3V then time goto loop time: for X = 1 to 255 pauseus 10 t = t + 1 do whatever, pot if pot value = 5V then tCalc next x tCalc: display t goto time
Notice I changed the example to PAUSEUS.
And someplace around here there is a discussion about code execution time, or just test it to adjust the PAUSEUS.
Dave
Always wear safety glasses while programming.
Thanks for your idea,
One more question. How am i gonna define the voltage. I have added a loop like but it didnt work. What can be the problem ?
ADC_READ:
ADCIN 0, ADCINFO
D=ADCINFO*100/51
timeloop:
if D>3 then
T1CON.0=1
if D>=4 then
T1CON.0=0
endif
ELSE
goto timeloop
endif
First off the ADC needs setup, here is an example.
http://www.microengineeringlabs.com/...pbp/adcin8.bas
Voltage...
Lets say you are using an 8 bit ADC. Voltage reference is VDD and the PIC is running at 5 volts.
There are 256 steps, 0 to 255.
The ADC value of 255 will represent full scale and be 5 volts.
The ADC value of 127 will represent 2.5 volts.
Looking for 3 volts? The ADC vale would be 153.
Want more accuracy? The 10 bit ADC has 1024 steps.
Your loop. After the set up.
That is the basics.Code:loop: ADCIN 0, adval ' Read channel 0 to adval IF adval <= 153 then gosub Xlabel '3 volt and less trigger IF adval = 255 then gosub Zlabel '5 volt trigger Pause 100 ' Wait .1 second Goto loop ' Do it forever Xlabel: 'Do something Return Zlabel: 'Do someting Return End
Dave
Always wear safety glasses while programming.
thanks alot
another newbie question
can i use tmrcon istead of for loop
such as;
CalcTime var word
Define LCD_DREG PORTC
Define LCD_DBIT 4
Define LCD_RSREG PORTB
Define LCD_RSBIT 0
Define LCD_EREG PORTB
Define LCD_EBIT 2
DEFINE LCD_BITS 4
DEFINE LCD_LINES 2
DEFINE ADC_BITS 10
DEFINE ADC_CLOCK 3
DEFINE ADC_SAMPLEUS 50
TRISA = %11111111 ' Set PORTA to all input
ADCON1 = %00000000 ' Set PORTA analog
ADCINFO VAR BYTE
'================================================= =======================
T1CON.0=0
TMR1H = 0
TMR1L = 0
ADCON1 = 0
ADC_READ:
PAUSE 500
timeloop:
ADCIN 0, ADCINFO
IF ADCINFO => 511 THEN GOSUB STARTTIMER
IF ADCINFO == 980 THEN GOSUB STOPTIMER
PAUSE 100
GOTO timeloop
STARTTIMER:
T1CON.0=1
RETURN
STOPTIMER:
T1CON.0=0
RETURN
GOTO ADC_READ
CLEARWDT
CalcTime.Highbyte=TMR1H
CalcTime.Lowbyte=TMR1L
Loope:
LCDOUT $FE, 1
LCDOUT "t:", CalcTime
Pause 500
Goto loope
GOTO ADC_READ
END
euh yeah, but the above will never do something else than reading the ADCs?
What do you want to do exactly?
Steve
It's not a bug, it's a random feature.
There's no problem, only learning opportunities.
Hi mackrackit
i tried this
but it doesnt stop counting for a defined voltage once it is triggered it does not stop for the final voltage.
Once i stop it i ll adjust the pauseus valueloop:
adcin 0, adval
If adval => 500 then time
goto loop
time:
for X = 1 to 1023
pauseus 10
t = t + 1
If adval = 1000 then tcalc
next x
tCalc:
LCDOUT $fe, 2,"Time" ,":",DEC t
goto time
Anything missing? any suggestions?
You may want to explore the WHILE-WEND command.
Dave
Always wear safety glasses while programming.
Bookmarks