Use of the RCtime Command - Capacitor Discharge and Charge
' Program RCTIME_2.BAS
'
' Charges external capacitor to near +5.0 VDC. On executing the RCtime
' command, the IO pin goes to a high impedance and capacitor discharges
' toward ground (the state of pin P25) with a time constant RC. When
' the voltage decays below the logic threshold (V_thresh) such that
' it is seen as a zero by the BasicX the time is passed back to
' the calling function in T_fall.
'
' Capacitor is then discharged to zero. On executing the RCtime
' command, the IO pin goes to a high impedance and the capacitor charges
' toward +5VDC (the state of pin P25) with a time constant RC. When
' the voltage rises above the logic threshold (V_thresh) such that
' it is seen as a logic one by the BasicX the time is passed back to
' the calling function in T_rise.
'
' Thus;
'
' T_tot = RC (ln (5.0/V_thresh) + ln (5.0/(5.0-V_thresh))
' or T_tot = RC * k
'
' The use of this technique of measuring both the dscharge and charge
' times drastically reduces errors due to variation in V_thresh from
' one device to another. For example, if V_thresh is a bit low, T_fall
' will be longer, but T_rise will be shorter.
'
' Copyright, Peter H. Anderson, Baltimore, Sept, 99
'
Public Const P24 as byte = 24 ' RCTime
Public Const P25 as byte = 25 ' Used on Resistor side
' 0 for discharge, 1 for charge
Sub Main()
Dim T_rise as Single
Dim T_fall as Single
Dim T_tot as Single
Call OpenSerialPort(2, 9600) ' For debugging
Do
' measure T_fall
Call PutPin(P25, bxOutputLow) ' steady state val is ground
Call PutPin(P24, bxOutputHigh) ' exert a one
Call Sleep(1.0) ' give it time to charge to +5
Call RCtime(P24, 1, T_fall) ' measure T_fall
' now measure T_rise
Call PutPin(P25, bxOutputHigh) ' steady state val is +5
Call PutPin(P24, bxOutputLow) ' exert a zero
Call Sleep(1.0) ' give time for C to discharge
Call RCtime(P24, 0, T_rise) ' measure T_rise
T_tot = T_fall + T_rise
Call PutS(T_rise) ' display the results
Call PutByte(32)
Call PutS(T_fall)
Call PutByte(32)
Call PUTS(T_tot)
Call NewLine()
Loop
End Sub