@@ -62,12 +62,12 @@ def __init__(
6262 Defaults to 0.
6363 :param str wave_type: The "sine", "triangle", or "square" wave shape.
6464 Defaults to "sine".
65- :param busio.SPI spi: The `busio.SPI` definition. Defaults to None.
66- :param board select: The chip select pin designation. Defaults to None.
65+ :param busio.SPI spi: The `busio.SPI` definition. Defaults to ` None` .
66+ :param board select: The chip select pin designation. Defaults to ` None` .
6767 :param int m_clock: Master clock frequency in Hz. Defaults to 25MHz.
6868 """
6969
70- self ._spi = spi # Define SPI bus
70+ self ._spi = spi # Define SPI bus; 5Mhz clock frequency
7171 self ._cs = digitalio .DigitalInOut (select )
7272 self ._device = SPIDevice (
7373 self ._spi , self ._cs , baudrate = 5000000 , polarity = 1 , phase = 0
@@ -82,11 +82,10 @@ def __init__(
8282 self ._freq_reg = 0 # FREQ0
8383 self ._phase_reg = 0 # PHASE0
8484
85+ # Reset and pause the device
8586 self ._pause = True
8687 self ._reset = True
87-
88- # Reset the device
89- self .reset ()
88+ self ._update_control_register ()
9089
9190 # Set the master clock frequency
9291 self ._m_clock = m_clock
@@ -98,8 +97,8 @@ def wave_freq(self):
9897
9998 @wave_freq .setter
10099 def wave_freq (self , new_wave_freq = 440 ):
101- """:param int new_wave_freq: The waveform frequency in Hz .
102- Defaults to 440."""
100+ """Set the frequency.
101+ :param int new_wave_freq: The waveform frequency in Hz. Defaults to 440."""
103102 self ._wave_freq = new_wave_freq
104103 self ._wave_freq = max (self ._wave_freq , 0 )
105104 self ._wave_freq = min (self ._wave_freq , self ._m_clock // 2 )
@@ -112,8 +111,8 @@ def wave_phase(self):
112111
113112 @wave_phase .setter
114113 def wave_phase (self , new_wave_phase = 0 ):
115- """:param int new_wave_phase: The waveform phase offset .
116- Defaults to 0."""
114+ """Set the output phase value .
115+ :param int new_wave_phase: The waveform phase offset. Defaults to 0."""
117116 self ._wave_phase = int (new_wave_phase )
118117 self ._wave_phase = max (self ._wave_phase , 0 )
119118 self ._wave_phase = min (self ._wave_phase , 4095 )
@@ -126,7 +125,8 @@ def wave_type(self):
126125
127126 @wave_type .setter
128127 def wave_type (self , new_wave_type = "sine" ):
129- """:param str new_wave_type: The waveform type. Defaults to 'sine'."""
128+ """Set the waveform type.
129+ :param str new_wave_type: The waveform type. Defaults to 'sine'."""
130130 self ._wave_type = new_wave_type
131131 if self ._wave_type not in ("triangle" , "square" , "sine" ):
132132 # Default to sine in type isn't valid
@@ -135,54 +135,42 @@ def wave_type(self, new_wave_type="sine"):
135135
136136 def pause (self ):
137137 """Pause the wave generator and freeze the output at the latest voltage
138- level by stopping the internal clock.
139- """
138+ level by stopping the internal clock."""
140139 self ._pause = True # Set the pause bit
141140 self ._update_control_register ()
142141
143142 def start (self ):
144143 """Start the wave generator with current register contents, register
145- selection and wave mode setting.
146- """
147- self ._reset = False # Clear the reset bit
144+ selection and wave mode setting."""
148145 self ._pause = False # Clear the clock disable bit
149146 self ._update_control_register ()
150147
151148 def stop (self ):
152149 """Stop the wave generator and reset the output to the midpoint
153- voltage level.
154- """
155- self ._reset = True # Sets the reset bit
156- self ._pause = True # Set the pause bit
150+ voltage level."""
151+ self ._pause = True
152+ self ._reset = True
157153 self ._update_control_register ()
158154
159155 def reset (self ):
160156 """Stop and reset the waveform generator. Pause the master clock.
161- Update all registers with default values. Set sine wave mode. Clear the
162- reset mode but keep the master clock paused.
163- """
164- # Reset control register contents, pause, and put device in reset state
157+ Update all registers with default values. Set `sine` wave mode."""
165158 self ._reset = True
166159 self ._pause = True
167160 self ._freq_reg = 0
168161 self ._phase_reg = 0
169162 self ._wave_type = "sine"
170163 self ._update_control_register ()
171164
172- # While reset , zero the frequency and phase registers
165+ # While paused , zero the frequency and phase registers
173166 self ._update_freq_register (new_freq = 0 , register = 0 )
174167 self ._update_freq_register (new_freq = 0 , register = 1 )
175168 self ._update_phase_register (new_phase = 0 , register = 0 )
176169 self ._update_phase_register (new_phase = 0 , register = 1 )
177170
178- # Take the waveform generator out of reset state, master clock still paused
179- self ._reset = False
180- self ._update_control_register ()
181-
182171 def _send_data (self , data ):
183172 """Send a 16-bit word through SPI bus as two 8-bit bytes.
184- :param int data: The 16-bit data value to write to the SPI device.
185- """
173+ :param int data: The 16-bit data value to write to the SPI device."""
186174 data &= 0xFFFF
187175 tx_msb = data >> 8
188176 tx_lsb = data & 0xFF
@@ -192,21 +180,22 @@ def _send_data(self, data):
192180
193181 def _update_control_register (self ):
194182 """Construct the control register contents per existing local parameters
195- then send the new control register word to the waveform generator.
196- """
197- # Set default control register mask value (sine wave mode)
198- control_reg = 0x2000
199-
183+ then send the new control register word to the waveform generator."""
200184 if self ._reset :
201- # Set the reset bit
202- control_reg |= 0x0100
185+ # Immediately reset before updating register
186+ self ._send_data (0x2100 )
187+ self ._reset = False
188+ # return
189+
190+ # Set default control register mask value (sine mode, disable reset)
191+ control_reg = 0x2000
203192
204193 if self ._pause :
205194 # Disable master clock bit
206195 control_reg |= 0x0080
207196
208- control_reg |= self ._freq_reg << 11 # Frequency register select bit
209- control_reg |= self ._phase_reg << 10 # Phase register select bit
197+ control_reg |= ( self ._freq_reg & 0x01 ) << 11 # Frequency register select bit
198+ control_reg |= ( self ._phase_reg & 0x01 ) << 10 # Phase register select bit
210199
211200 if self ._wave_type == "triangle" :
212201 # Set triangle mode
@@ -221,12 +210,11 @@ def _update_control_register(self):
221210 def _update_freq_register (self , new_freq , register = None ):
222211 """Load inactive register with new frequency value then set the
223212 register active in order to avoid partial frequency changes. Writes to
224- specified register if != None.
213+ specified register if not ` None` .
225214
226215 :param int new_freq: The new frequency value.
227216 :param union(int, None) register: The register for the new value; FREG0
228- or FREG1. Selects the non-active register if register == None.
229- """
217+ or FREG1. Selects the non-active register if register is `None`."""
230218 self ._wave_freq = new_freq
231219
232220 if register is None :
@@ -258,11 +246,11 @@ def _update_freq_register(self, new_freq, register=None):
258246 def _update_phase_register (self , new_phase , register = None ):
259247 """Load inactive register with new phase value then set the
260248 register active in order to avoid partial phase changes. Writes to
261- specified register if != None.
249+ specified register if not ` None` .
262250
263251 :param int new_phase: The new phase value.
264252 :param union(int, None) register: The register for the new value; PHASE0
265- or PHASE1. Selects the non-active register if register == None.
253+ or PHASE1. Selects the non-active register if register is ` None` .
266254 """
267255 self ._wave_phase = new_phase
268256
0 commit comments