6
6
import sys
7
7
8
8
try :
9
- from machine import Pin , PWM , Counter
9
+ from machine import Counter , Pin , PWM , Timer
10
10
except ImportError :
11
11
print ("SKIP" )
12
12
raise SystemExit
13
13
14
14
15
- FREQ = 500_000 # Hz
15
+ FREQ = 500_000 # 5_000 # Hz
16
16
FILTER_NS = 25 # ns
17
- MATCH = FREQ * 2 # 2 seconds counting time
17
+ SECONDS = 2
18
+ MATCH = FREQ * SECONDS # 2 seconds counting time
18
19
#MATCH = 75
19
20
20
21
@@ -64,18 +65,26 @@ def toggle(pin, x):
64
65
65
66
is_callback = False
66
67
pwm = None
68
+ counter = None
67
69
70
+ @micropython .viper
68
71
def callback_print (counter ):
69
72
global is_callback
70
73
is_callback = True
71
- print (" callback Counter value:" , counter .value (), "status:" , counter .status ())
72
-
74
+ print (" callback Сounter value:" , counter .value (), "status:" , counter .status ())
73
75
76
+ @micropython .viper
74
77
def callback_pwm_deinit (counter ):
75
78
pwm .deinit ()
76
79
print (" callback pwm.deinit()" )
77
80
callback_print (counter )
78
81
82
+ @micropython .viper
83
+ def callback_timer (timer ):
84
+ pwm .deinit ()
85
+ print (" callback pwm.deinit()" )
86
+ print (" callback Сounter value:" , counter .value (), "status:" , counter .status ())
87
+
79
88
80
89
try :
81
90
print ("Test the wire connections: out1 -> inp1." )
@@ -106,6 +115,7 @@ def callback_pwm_deinit(counter):
106
115
print ("Ok." )
107
116
print ()
108
117
118
+
109
119
print ("1) Test count if direction is a constant." )
110
120
print ("out1 -> inp1 is counted pulses." )
111
121
print ("Test count UP at the RISING edge." )
@@ -122,6 +132,7 @@ def callback_pwm_deinit(counter):
122
132
print ("Ok." )
123
133
print ()
124
134
135
+
125
136
print ("Test count DOWN at the FALLING edge." )
126
137
counter .init (inp1 , direction = Counter .DOWN , edge = Counter .FALLING )
127
138
print (counter , "value:" , counter .value ())
@@ -134,8 +145,9 @@ def callback_pwm_deinit(counter):
134
145
assert (counter .value () == - 1 )
135
146
print ("Ok." )
136
147
print ()
137
- counter . deinit ()
148
+
138
149
150
+ counter .deinit ()
139
151
print ("2) Test count if direction is a Pin()." )
140
152
print ("out1 -> inp1 is counted pulses." )
141
153
print ("out2 -> inp2 is direction of counting." )
@@ -153,7 +165,6 @@ def callback_pwm_deinit(counter):
153
165
assert (counter .value () == - 2 )
154
166
print ("Ok." )
155
167
print ()
156
-
157
168
print ("Test count UP when direction Pin()==1 at RISING-FALLING edges." )
158
169
out2 (1 )
159
170
print ("direction:" , out2 , out2 (), "->" , inp2 , inp2 ())
@@ -166,9 +177,10 @@ def callback_pwm_deinit(counter):
166
177
print ("Ok." )
167
178
print ()
168
179
180
+
169
181
print ("3) Test count UP to (2^16 + 1000) and DOWN to -(2^16 + 1000) and callbacks." )
170
182
is_callback = False
171
- counter .irq (handler = callback_print , trigger = Counter .IRQ_MATCH1 , value = 1_000 )
183
+ counter .irq (handler = callback_print , trigger = Counter .IRQ_MATCH , value = 1_000 )
172
184
counter .irq (handler = callback_print , trigger = Counter .IRQ_ZERO )
173
185
assert (counter .value () == 0 )
174
186
print ("Test count UP to (2^16 + 1000)." )
@@ -186,15 +198,17 @@ def callback_pwm_deinit(counter):
186
198
assert (counter .value () == - (2 ** 16 + 1000 )), - (2 ** 16 + 1000 )
187
199
print ("Ok." )
188
200
print ()
189
- counter . deinit ()
201
+
190
202
203
+ counter .deinit ()
191
204
print ("4) Test count UP at inp1 Pin() & DOWN at inp2 Pin()." )
192
205
print ("out1 -> inp1 is counted UP pulses." )
193
206
print ("out2 -> inp2 is counted DOWN pulses." )
207
+
194
208
print ("Test count UP on inp1 Pin() at RISING-FALLING edges." )
195
209
counter = Counter (0 , src = inp1 , _src = inp2 , edge = Counter .RISING | Counter .FALLING )
196
210
is_callback = False
197
- counter .irq (handler = callback_print , trigger = Counter .IRQ_MATCH1 , value = 1_000 )
211
+ counter .irq (handler = callback_print , trigger = Counter .IRQ_MATCH , value = 1_000 )
198
212
counter .irq (handler = callback_print , trigger = Counter .IRQ_ZERO )
199
213
print (counter , "value:" , counter .value ())
200
214
toggle (out1 , 1_100 )
@@ -211,25 +225,44 @@ def callback_pwm_deinit(counter):
211
225
assert (counter .value () == - 1_100 )
212
226
print ("Ok." )
213
227
print ()
214
- counter .irq (handler = None , trigger = Counter .IRQ_MATCH1 )
228
+ counter .irq (handler = None , trigger = Counter .IRQ_MATCH )
215
229
counter .irq (handler = None , trigger = Counter .IRQ_ZERO )
216
- counter .deinit ()
217
230
218
- print ("5) Test PWM counting at inp1 Pin() & direction at inp2 Pin(). Stop PWM in counter callback." )
231
+
232
+ counter .deinit ()
233
+ print ("5) Test PWM counting at inp1 Pin() & direction at inp2 Pin(). Stop PWM in Timer callback." )
219
234
print ("PWM pulses: out1 -> inp1:" , out1 , "->" , inp1 )
220
235
out2 (1 )
221
236
print ("direction of counting: out2 -> inp2:" , out2 , out2 (), "->" , inp2 , inp2 ())
222
237
print ()
223
- print ("5.1) Test count UP when direction Pin()==1 at RISING edges." )
224
238
225
239
pwm = PWM (out1 , freq = FREQ )
226
240
print (pwm )
227
241
pwm .deinit ()
228
242
243
+ counter = Counter (0 , src = inp1 , direction = inp2 )
244
+ print (counter , "value:" , counter .value ())
245
+ timer = Timer (1 )
246
+ timer .init (mode = Timer .ONE_SHOT , period = 1_000 * SECONDS , callback = callback_timer )
247
+ pwm .init (freq = FREQ )
248
+ while counter .value () < MATCH :
249
+ pass
250
+ print (counter , "value:" , counter .value ())
251
+ assert (counter .value () >= MATCH )
252
+ assert (counter .value () < MATCH + MATCH * 0.5 )
253
+ print ("Ok." )
254
+ print ()
255
+ counter .deinit ()
256
+
257
+
258
+ print ("6) Test PWM counting at inp1 Pin() & direction at inp2 Pin(). Stop PWM in Counter callback." )
259
+ print ("6.1) Test count UP when direction Pin()==1 at RISING edges." )
260
+ out2 (1 )
261
+
229
262
counter1 = Counter (1 , src = inp1 , direction = inp2 , filter_ns = FILTER_NS )
230
263
counter = Counter (0 , src = inp1 , direction = inp2 , filter_ns = FILTER_NS )
231
264
is_callback = False
232
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = MATCH )
265
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = MATCH )
233
266
print (counter , "value:" , counter .value ())
234
267
pwm .init (freq = FREQ )
235
268
while counter .value () < MATCH :
@@ -243,7 +276,7 @@ def callback_pwm_deinit(counter):
243
276
print ()
244
277
245
278
is_callback = False
246
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = MATCH + 100 * 3 )
279
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = MATCH + 100 * 3 )
247
280
print (counter , "value:" , counter .value ())
248
281
pwm .init (freq = FREQ )
249
282
while counter .value () < MATCH + 100 * 3 :
@@ -257,7 +290,7 @@ def callback_pwm_deinit(counter):
257
290
print ()
258
291
259
292
is_callback = False
260
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = MATCH + 100 * 5 )
293
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = MATCH + 100 * 5 )
261
294
print (counter , "value:" , counter .value ())
262
295
pwm .init (freq = FREQ )
263
296
while counter .value () < MATCH + 100 * 5 :
@@ -270,11 +303,11 @@ def callback_pwm_deinit(counter):
270
303
print ("Ok." )
271
304
print ()
272
305
273
- print ("5 .2) Test count DOWN when direction Pin()==0 at RISING edges." )
306
+ print ("6 .2) Test count DOWN when direction Pin()==0 at RISING edges." )
274
307
out2 (0 )
275
308
276
309
is_callback = False
277
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = MATCH + 100 * 3 )
310
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = MATCH + 100 * 3 )
278
311
print (counter , "value:" , counter .value ())
279
312
pwm .init (freq = FREQ )
280
313
while counter .value () > MATCH + 100 * 3 :
@@ -288,7 +321,7 @@ def callback_pwm_deinit(counter):
288
321
print ()
289
322
290
323
is_callback = False
291
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = MATCH )
324
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = MATCH )
292
325
print (counter , "value:" , counter .value ())
293
326
pwm .init (freq = FREQ )
294
327
while counter .value () > MATCH :
@@ -302,7 +335,7 @@ def callback_pwm_deinit(counter):
302
335
print ()
303
336
304
337
is_callback = False
305
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = 0 )
338
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = 0 )
306
339
print (counter , "value:" , counter .value ())
307
340
pwm .init (freq = FREQ )
308
341
while counter .value () > 0 :
@@ -315,7 +348,7 @@ def callback_pwm_deinit(counter):
315
348
print ("Ok." )
316
349
print ()
317
350
318
- counter .irq (handler = None , trigger = Counter .IRQ_MATCH1 )
351
+ counter .irq (handler = None , trigger = Counter .IRQ_MATCH )
319
352
320
353
# is_callback = False
321
354
# counter.irq(handler=callback_pwm_deinit, trigger=Counter.IRQ_ZERO)
@@ -334,7 +367,7 @@ def callback_pwm_deinit(counter):
334
367
counter .irq (handler = None , trigger = Counter .IRQ_ZERO )
335
368
336
369
is_callback = False
337
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = - MATCH )
370
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = - MATCH )
338
371
print (counter , "value:" , counter .value ())
339
372
pwm .init (freq = FREQ )
340
373
while counter .value () > - MATCH :
@@ -348,7 +381,7 @@ def callback_pwm_deinit(counter):
348
381
print ()
349
382
350
383
is_callback = False
351
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = - (MATCH + 100 * 3 ))
384
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = - (MATCH + 100 * 3 ))
352
385
print (counter , "value:" , counter .value ())
353
386
pwm .init (freq = FREQ )
354
387
while counter .value () > - (MATCH + 100 * 3 ):
@@ -362,7 +395,7 @@ def callback_pwm_deinit(counter):
362
395
print ()
363
396
364
397
is_callback = False
365
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = - (MATCH + 100 * 5 ))
398
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = - (MATCH + 100 * 5 ))
366
399
print (counter , "value:" , counter .value ())
367
400
pwm .init (freq = FREQ )
368
401
while counter .value () > - (MATCH + 100 * 5 ):
@@ -375,11 +408,11 @@ def callback_pwm_deinit(counter):
375
408
print ("Ok." )
376
409
print ()
377
410
378
- print ("5 .3) Test count UP when direction Pin()==1 at RISING edges." )
411
+ print ("6 .3) Test count UP when direction Pin()==1 at RISING edges." )
379
412
out2 (1 )
380
413
381
414
is_callback = False
382
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = - (MATCH + 100 * 3 ))
415
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = - (MATCH + 100 * 3 ))
383
416
print (counter , "value:" , counter .value ())
384
417
pwm .init (freq = FREQ )
385
418
while counter .value () < - (MATCH + 100 * 3 ):
@@ -393,7 +426,7 @@ def callback_pwm_deinit(counter):
393
426
print ()
394
427
395
428
is_callback = False
396
- counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH1 , value = - MATCH )
429
+ counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_MATCH , value = - MATCH )
397
430
print (counter , "value:" , counter .value ())
398
431
pwm .init (freq = FREQ )
399
432
while counter .value () < - MATCH :
@@ -406,7 +439,7 @@ def callback_pwm_deinit(counter):
406
439
print ("Ok." )
407
440
print ()
408
441
409
- counter .irq (handler = None , trigger = Counter .IRQ_MATCH1 )
442
+ counter .irq (handler = None , trigger = Counter .IRQ_MATCH )
410
443
411
444
is_callback = False
412
445
counter .irq (handler = callback_pwm_deinit , trigger = Counter .IRQ_ZERO )
@@ -425,12 +458,14 @@ def callback_pwm_deinit(counter):
425
458
print ("END." )
426
459
427
460
finally :
461
+ print ("finally:" )
428
462
try :
429
463
pwm .deinit ()
430
464
except :
431
465
pass
432
466
try :
433
- print (counter1 , "value:" , counter1 .value ())
467
+ print (counter1 , end = " " )
468
+ print ("value:" , counter1 .value ())
434
469
except :
435
470
pass
436
471
try :
0 commit comments