@@ -104,34 +104,38 @@ def test_adc_dac_all(self):
104104
105105 Vdd = 5
106106 Vrm = {
107- # "OFF" : 0,
107+ # "OFF" : 0,
108108 "1.024V" : 1.024 ,
109109 "2.048V" : 2.048 ,
110110 "4.096V" : 4.096 ,
111111 "VDD" : Vdd
112112 }
113- margin = 30
114- dac = 15
113+ max_error = 0.05 # relative error
114+ dac = 10
115115
116116 for adc_ref in Vrm .keys ():
117117 for dac_ref in Vrm .keys ():
118118
119- self .mcp .ADC_config (adc_ref )
120- self .mcp .DAC_config (dac_ref )
121- self .mcp .DAC_write (dac )
119+ with self .subTest (ADC_Vref = adc_ref , DAC_Vref = dac_ref ):
120+ self .mcp .ADC_config (adc_ref )
121+ self .mcp .DAC_config (dac_ref )
122+ self .mcp .DAC_write (dac )
122123
123- sleep (0.1 ) # time to settle-up
124+ sleep (0.01 ) # time to settle-up
124125
125- adc = self .mcp .ADC_read ()[1 ]
126+ adc = self .mcp .ADC_read ()[1 ]
126127
127- expected = (Vrm [dac_ref ] * dac / 32 ) * 1024 / Vrm [adc_ref ]
128- expected = round (expected )
128+ expected = (Vrm [dac_ref ] * dac / 32 ) * 1024 / Vrm [adc_ref ]
129+ expected = round (expected )
129130
130- if expected > 1023 :
131- expected = 1023
131+ if expected > 1023 :
132+ expected = 1023
132133
133- self .assertTrue ((expected - margin ) < adc < (expected + margin ),
134- msg = "ADC_ref: %s, DAC_ref: %s, Expected: %d, Got: %d" % (adc_ref , dac_ref , expected , adc ))
134+ error = (adc - expected )/ expected
135+
136+ self .assertLess (abs (error ), max_error ,
137+ msg = "ADC_ref: %s, DAC_ref: %s, Expected: %d, Got: %d (%+.2f)%%" %
138+ (adc_ref , dac_ref , expected , adc , error * 100 ))
135139
136140
137141if __name__ == '__main__' :
0 commit comments