PROGRAM Series_RLC

   SET MODE "LACEHIGH2"
   DECLARE FUNCTION RLC$

   LET R = 50
   LET C = 1E-6
   LET L = 2E-3
   LET F = 1000

   CALL Page_Title
   
   FOR F = 100 TO 4000 STEP 100
   
      CALL Display_Results(F, RLC$(R,L,C,F))
      IF F <> 1500 then PRINT
   
   NEXT F

END



FUNCTION RLC$(R, L, C, F)

   LIBRARY "CMPLXLIB*"
   DECLARE FUNCTION COMP$

   LET OMEGA = 2*PI*F

   ! Return impedance as a complex number
   !
   IF F = 0 OR C = 0 THEN
      LET RLC$ = COMP$(R,-1E9)
   ELSE
      LET RLC$ = COMP$(R, OMEGA*L - 1/(OMEGA*C))
   END IF

END FUNCTION



SUB Display_Results(Freq, R$)

   LIBRARY "CMPLXLIB*"
   DECLARE FUNCTION REAL, IMAG, CABS, CANG

   LET FORMAT$ = "#######  ######.######   +++++#.######  ######.######    +++#.######"
   PRINT USING FORMAT$ : Freq,REAL(R$),IMAG(R$),CABS(R$),CANG(R$)*180/PI;

END SUB



SUB Page_Title

   PRINT "                    Analysis of series RLC circuit"
   PRINT "                      Impedance versus frequency"
   PRINT
   PRINT "Frequency   Resistance      Reactance      Impedance      Phase angle"
   PRINT "---------   ----------      ---------      ---------      -----------"

END SUB


