Skip to content

Commit 6f5c330

Browse files
committed
Update machine_Counter.py
1 parent bee2d38 commit 6f5c330

File tree

1 file changed

+65
-30
lines changed

1 file changed

+65
-30
lines changed

tests/extmod_hardware/machine_Counter.py

+65-30
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,16 @@
66
import sys
77

88
try:
9-
from machine import Pin, PWM, Counter
9+
from machine import Counter, Pin, PWM, Timer
1010
except ImportError:
1111
print("SKIP")
1212
raise SystemExit
1313

1414

15-
FREQ = 500_000 # Hz
15+
FREQ = 500_000 # 5_000 # Hz
1616
FILTER_NS = 25 # ns
17-
MATCH = FREQ * 2 # 2 seconds counting time
17+
SECONDS = 2
18+
MATCH = FREQ * SECONDS # 2 seconds counting time
1819
#MATCH = 75
1920

2021

@@ -64,18 +65,26 @@ def toggle(pin, x):
6465

6566
is_callback = False
6667
pwm = None
68+
counter = None
6769

70+
@micropython.viper
6871
def callback_print(counter):
6972
global is_callback
7073
is_callback = True
71-
print(" callback Counter value:", counter.value(), "status:", counter.status())
72-
74+
print(" callback Сounter value:", counter.value(), "status:", counter.status())
7375

76+
@micropython.viper
7477
def callback_pwm_deinit(counter):
7578
pwm.deinit()
7679
print(" callback pwm.deinit()")
7780
callback_print(counter)
7881

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+
7988

8089
try:
8190
print("Test the wire connections: out1 -> inp1.")
@@ -106,6 +115,7 @@ def callback_pwm_deinit(counter):
106115
print("Ok.")
107116
print()
108117

118+
109119
print("1) Test count if direction is a constant.")
110120
print("out1 -> inp1 is counted pulses.")
111121
print("Test count UP at the RISING edge.")
@@ -122,6 +132,7 @@ def callback_pwm_deinit(counter):
122132
print("Ok.")
123133
print()
124134

135+
125136
print("Test count DOWN at the FALLING edge.")
126137
counter.init(inp1, direction=Counter.DOWN, edge=Counter.FALLING)
127138
print(counter, "value:", counter.value())
@@ -134,8 +145,9 @@ def callback_pwm_deinit(counter):
134145
assert(counter.value() == -1)
135146
print("Ok.")
136147
print()
137-
counter.deinit()
148+
138149

150+
counter.deinit()
139151
print("2) Test count if direction is a Pin().")
140152
print("out1 -> inp1 is counted pulses.")
141153
print("out2 -> inp2 is direction of counting.")
@@ -153,7 +165,6 @@ def callback_pwm_deinit(counter):
153165
assert(counter.value() == -2)
154166
print("Ok.")
155167
print()
156-
157168
print("Test count UP when direction Pin()==1 at RISING-FALLING edges.")
158169
out2(1)
159170
print("direction:", out2, out2(), "->", inp2, inp2())
@@ -166,9 +177,10 @@ def callback_pwm_deinit(counter):
166177
print("Ok.")
167178
print()
168179

180+
169181
print("3) Test count UP to (2^16 + 1000) and DOWN to -(2^16 + 1000) and callbacks.")
170182
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)
172184
counter.irq(handler=callback_print, trigger=Counter.IRQ_ZERO)
173185
assert(counter.value() == 0)
174186
print("Test count UP to (2^16 + 1000).")
@@ -186,15 +198,17 @@ def callback_pwm_deinit(counter):
186198
assert(counter.value() == -(2**16 + 1000)), -(2**16 + 1000)
187199
print("Ok.")
188200
print()
189-
counter.deinit()
201+
190202

203+
counter.deinit()
191204
print("4) Test count UP at inp1 Pin() & DOWN at inp2 Pin().")
192205
print("out1 -> inp1 is counted UP pulses.")
193206
print("out2 -> inp2 is counted DOWN pulses.")
207+
194208
print("Test count UP on inp1 Pin() at RISING-FALLING edges.")
195209
counter = Counter(0, src=inp1, _src=inp2, edge=Counter.RISING | Counter.FALLING)
196210
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)
198212
counter.irq(handler=callback_print, trigger=Counter.IRQ_ZERO)
199213
print(counter, "value:", counter.value())
200214
toggle(out1, 1_100)
@@ -211,25 +225,44 @@ def callback_pwm_deinit(counter):
211225
assert(counter.value() == -1_100)
212226
print("Ok.")
213227
print()
214-
counter.irq(handler=None, trigger=Counter.IRQ_MATCH1)
228+
counter.irq(handler=None, trigger=Counter.IRQ_MATCH)
215229
counter.irq(handler=None, trigger=Counter.IRQ_ZERO)
216-
counter.deinit()
217230

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.")
219234
print("PWM pulses: out1 -> inp1:", out1, "->", inp1)
220235
out2(1)
221236
print("direction of counting: out2 -> inp2:", out2, out2(), "->", inp2, inp2())
222237
print()
223-
print("5.1) Test count UP when direction Pin()==1 at RISING edges.")
224238

225239
pwm = PWM(out1, freq=FREQ)
226240
print(pwm)
227241
pwm.deinit()
228242

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+
229262
counter1 = Counter(1, src=inp1, direction=inp2, filter_ns=FILTER_NS)
230263
counter = Counter(0, src=inp1, direction=inp2, filter_ns=FILTER_NS)
231264
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)
233266
print(counter, "value:", counter.value())
234267
pwm.init(freq=FREQ)
235268
while counter.value() < MATCH:
@@ -243,7 +276,7 @@ def callback_pwm_deinit(counter):
243276
print()
244277

245278
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)
247280
print(counter, "value:", counter.value())
248281
pwm.init(freq=FREQ)
249282
while counter.value() < MATCH + 100 * 3:
@@ -257,7 +290,7 @@ def callback_pwm_deinit(counter):
257290
print()
258291

259292
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)
261294
print(counter, "value:", counter.value())
262295
pwm.init(freq=FREQ)
263296
while counter.value() < MATCH + 100 * 5:
@@ -270,11 +303,11 @@ def callback_pwm_deinit(counter):
270303
print("Ok.")
271304
print()
272305

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.")
274307
out2(0)
275308

276309
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)
278311
print(counter, "value:", counter.value())
279312
pwm.init(freq=FREQ)
280313
while counter.value() > MATCH + 100 * 3:
@@ -288,7 +321,7 @@ def callback_pwm_deinit(counter):
288321
print()
289322

290323
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)
292325
print(counter, "value:", counter.value())
293326
pwm.init(freq=FREQ)
294327
while counter.value() > MATCH:
@@ -302,7 +335,7 @@ def callback_pwm_deinit(counter):
302335
print()
303336

304337
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)
306339
print(counter, "value:", counter.value())
307340
pwm.init(freq=FREQ)
308341
while counter.value() > 0:
@@ -315,7 +348,7 @@ def callback_pwm_deinit(counter):
315348
print("Ok.")
316349
print()
317350

318-
counter.irq(handler=None, trigger=Counter.IRQ_MATCH1)
351+
counter.irq(handler=None, trigger=Counter.IRQ_MATCH)
319352

320353
# is_callback = False
321354
# counter.irq(handler=callback_pwm_deinit, trigger=Counter.IRQ_ZERO)
@@ -334,7 +367,7 @@ def callback_pwm_deinit(counter):
334367
counter.irq(handler=None, trigger=Counter.IRQ_ZERO)
335368

336369
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)
338371
print(counter, "value:", counter.value())
339372
pwm.init(freq=FREQ)
340373
while counter.value() > -MATCH:
@@ -348,7 +381,7 @@ def callback_pwm_deinit(counter):
348381
print()
349382

350383
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))
352385
print(counter, "value:", counter.value())
353386
pwm.init(freq=FREQ)
354387
while counter.value() > -(MATCH + 100 * 3):
@@ -362,7 +395,7 @@ def callback_pwm_deinit(counter):
362395
print()
363396

364397
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))
366399
print(counter, "value:", counter.value())
367400
pwm.init(freq=FREQ)
368401
while counter.value() > -(MATCH + 100 * 5):
@@ -375,11 +408,11 @@ def callback_pwm_deinit(counter):
375408
print("Ok.")
376409
print()
377410

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.")
379412
out2(1)
380413

381414
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))
383416
print(counter, "value:", counter.value())
384417
pwm.init(freq=FREQ)
385418
while counter.value() < -(MATCH + 100 * 3):
@@ -393,7 +426,7 @@ def callback_pwm_deinit(counter):
393426
print()
394427

395428
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)
397430
print(counter, "value:", counter.value())
398431
pwm.init(freq=FREQ)
399432
while counter.value() < -MATCH:
@@ -406,7 +439,7 @@ def callback_pwm_deinit(counter):
406439
print("Ok.")
407440
print()
408441

409-
counter.irq(handler=None, trigger=Counter.IRQ_MATCH1)
442+
counter.irq(handler=None, trigger=Counter.IRQ_MATCH)
410443

411444
is_callback = False
412445
counter.irq(handler=callback_pwm_deinit, trigger=Counter.IRQ_ZERO)
@@ -425,12 +458,14 @@ def callback_pwm_deinit(counter):
425458
print("END.")
426459

427460
finally:
461+
print("finally:")
428462
try:
429463
pwm.deinit()
430464
except:
431465
pass
432466
try:
433-
print(counter1, "value:", counter1.value())
467+
print(counter1, end=" ")
468+
print("value:", counter1.value())
434469
except:
435470
pass
436471
try:

0 commit comments

Comments
 (0)