-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathGenerateSquareWave.py
49 lines (38 loc) · 2.01 KB
/
GenerateSquareWave.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
"""
Test step to generate a square waveform
"""
from OpenTap import Display, Unit, Verdict
from System import Double
from opentap import *
from .WaveformGenerator import *
@attribute(Display("Generate Square Wave",
"Generates a Square Wave of given frequency, duty cycle, and phase on given pin",
Groups=["PSLab", "Waveform Generator"]))
class GenerateSquareWave(TestStep):
# Properties
Pin = property(SquareWavePin, SquareWavePin.SQ1) \
.add_attribute(Display("Pin", "Pin on which the square wave is generated", "", -50))
Frequency = property(Double, 1000) \
.add_attribute(Display("Frequency", "The frequency of the square wave", "", -40)) \
.add_attribute(Unit("Hz"))
Phases = property(Double, 0) \
.add_attribute(Display("Phase", "The phase of the square wave", "", -30)) \
.add_attribute(Unit("°")) # this is used for the unit of measurement
Duty_Cycles = property(Double, 0.7) \
.add_attribute(Display("Duty Cycles", "The duty cycle of the square wave", "", -20))
WaveformGenerator = property(WaveformGenerator, None) \
.add_attribute(Display("Waveform Generator", "", "Resources", 0))
def __init__(self):
super(GenerateSquareWave, self).__init__()
self.Rules.Add(
Rule("Frequency", lambda: self.Frequency >= 4, lambda: 'Frequency must be at least 4 Hz.'))
self.Rules.Add(
Rule("Frequency", lambda: self.Frequency <= 10000000, lambda: 'Frequency must not exceed 10000000 Hz.'))
self.Rules.Add(
Rule("Duty_Cycles", lambda: self.Duty_Cycles >= 0.0, lambda: 'Duty Cycle must not be negative.'))
self.Rules.Add(
Rule("Duty_Cycles", lambda: self.Duty_Cycles <= 1.0, lambda: 'Duty Cycle must not exceed 1.'))
def Run(self):
super().Run() # 3.0: Required for debugging to work.
self.WaveformGenerator.generate_square(self.Pin, self.Frequency, self.Duty_Cycles, self.Phases)
self.UpgradeVerdict(Verdict.Pass)