Sample Program

Frequency and Electric Power Measuring Program for PF-700


'**************************************************************
'
'  Frequency and Electric Power Measuring Program for PF-700
'
'    2000/11/30 Koichi Hirata
'
'    pf700d.bas
'
'**************************************************************
'
' for AT90S8535-8PC
'
'*********************
' Initial set
'*********************
'
Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 16 * 2                                           'configure lcd screen
Config Timer1 = Timer , Prescale = 1024                       'Timer1 Setup
Config Adc = Single , Prescaler = Auto                        'For A/D conv.
Start Adc
Dim A As Byte
Dim B As String * 16
Dim X As Single
Dim Vv0 As Word
Dim Vv1 As Word
Dim V0 As Single
Dim V1 As Single
Dim Vm As Single
Dim We As Single
Dim B0 As String * 16
Dim B1 As String * 16
Ddrb = &B11111100
Ddrd = &B00110000
'
'*********************
' First screen
'*********************
'
Cls                                                           'clear the LCD display
Lcd "Measuring Prog."                                         'display this at the top line
Lowerline                                                     'select the lower line
Lcd "for PF-700"                                              'display this at the lower line
Wait 1
'
'*********************
' Sencing (Loop)
'*********************
'
' Timer for frequency
'
Start Timer1                                                  'Start Timer1
Do
   A = 0
   Timer1 = 0
   While A < 4
      If A = 0 And Pinb.0 = 1 Then
        A = 1
        Portd.4 = 1
      End If
      If A = 1 And Pinb.0 = 0 Then
        A = 2
        Timer1 = 0
        Portd.4 = 0
      End If
      If A = 2 And Pinb.0 = 1 Then
        A = 3
        Portd.4 = 1
      End If
      If A = 3 And Pinb.0 = 0 Then
        A = 4
        X = Timer1
        Portd.4 = 0
      End If
      If Timer1 => 20000 Then                                 'Time Over = about 2 sec
        A = 4
        X = Timer1
      End If
   Wend
'
' Read A/D value
'
   Vv0 = 0
   Vv1 = 0
   For A = 1 To 50
     Vv0 = Vv0 + Getadc(1)                                    'read A/D value from channel 1
     Vv1 = Vv1 + Getadc(2)                                    'read A/D value from channel 2
     Waitms 5
   Next A
   Vv0 = Vv0 / 50
   Vv1 = Vv1 / 50
'
' Calculation for ferequency
'
   X = 8000 / X                                               'Frequency (Hz)
   X = X / 2                                                  'For PF-700 (Reduced 1/2 by Bevel gears)
   B = Str(x)
   B = Left(b , 4)
'
' Calculation for A/D
'
   V0 = Vv0 * 5
   V0 = V0 / 1024                                             'Voltage (V)
   V1 = Vv1 * 5
   V1 = V1 / 1024                                             'Voltage (V)
   Vm = 2 * V0
   Vm = Vm - V1                                               'Voltage (V) of D/C motor for PF-700
   We = 2 * V1                                                'Electric current (A) for PF-700
   We = We * Vm                                               'Electric power of D/C motor for PF-700
   B0 = Str(vm)
   B0 = Left(b0 , 4)
   V1 = V1 * 2
   B1 = Str(we)
   B1 = Left(b1 , 4)
'
' Result screen
'
   Cls
   Home Upper
   Lcd "Freq= "
   Lcd B
   Lcd " Hz"
   Lowerline                                                  'select the lower line
   Lcd B0
   Lcd " V x "
   Lcd B1
   Lcd " W  "
   Wait 1
Loop
End

[ Microcomputer ] [ Hirata HOME ] [ Power and Energy Engineering Division ] [ NMRI HOME ]
Contact khirata@nmri.go.jp