# numbers_log for 004-unit4-microcontrollers (rerun 2026-10-11 02:10)

===== fig01_bounce.py (exit 0, 1.2 s)
raw edges in this record 14 (press edge + release edge each chatter)
W 0 events per press 5.813 presses lost percent 0.0
W 1 events per press 2.287 presses lost percent 0.0
W 2 events per press 1.173 presses lost percent 0.0
W 5 events per press 1.0 presses lost percent 0.0
W 10 events per press 0.987 presses lost percent 1.3
W 20 events per press 0.947 presses lost percent 5.3
W 30 events per press 0.893 presses lost percent 10.7
W 60 events per press 0.773 presses lost percent 22.7

===== fig02_polling.py (exit 0, 0.9 s)
poll 500 Hz counted -183 true 3177 illegal jumps 316 error percent -105.76
poll 1000 Hz counted -816 true 3180 illegal jumps 0 error percent -125.66
poll 2000 Hz counted 817 true 3181 illegal jumps 1182 error percent -74.32
poll 3000 Hz counted 2816 true 3182 illegal jumps 183 error percent -11.5
poll 3500 Hz counted 3182 true 3182 illegal jumps 0 error percent 0.0
poll 4000 Hz counted 3182 true 3182 illegal jumps 0 error percent 0.0
poll 8000 Hz counted 3182 true 3182 illegal jumps 0 error percent 0.0
poll 16000 Hz counted 3183 true 3183 illegal jumps 0 error percent 0.0
isr 5.0 us: load at 0.5 m/s 1.59 percent; load at 3 m/s 9.5 percent
isr 20.0 us: load at 0.5 m/s 6.37 percent; load at 3 m/s 38.2 percent

===== fig03_uart.py (exit 0, 3.3 s)
first byte error at mismatch + 5.885 percent; at - 5.265 percent; theory +5.882 / -5.263
mismatch 0.0 error rate percent 0.0
mismatch 0.04 error rate percent 0.0
mismatch 0.06 error rate percent 47.85
mismatch -0.04 error rate percent 0.0
mismatch -0.06 error rate percent 73.85
0x5A mismatch 0.0 -> received 90
0x5A mismatch 0.04 -> received 90
0x5A mismatch 0.06 -> received 218

===== fig04_i2c.py (exit 0, 0.8 s)
C 100.0 pF: max pull-up for 1000 ns 11802 ohm; for 300 ns 3541 ohm; 4.7k gives 398.2 ns
C 400.0 pF: max pull-up for 1000 ns 2951 ohm; for 300 ns 885 ohm; 4.7k gives 1592.9 ns
read 1 bytes: clocks 39 100 kHz us 390.0 400 kHz us 97.5
read 2 bytes: clocks 48 100 kHz us 480.0 400 kHz us 120.0
read 6 bytes: clocks 84 100 kHz us 840.0 400 kHz us 210.0
bus busy fraction reading 2 bytes at 10 Hz, 100 kHz (percent): 0.48 ; pull-up current when low at 4.7k (mA): 0.702

===== fig05_fsm.py (exit 0, 0.7 s)


===== fig06_policy.py (exit 0, 0.9 s)
super-loop, short tasks: gap max 10.0 ms median 10.0
super-loop, 300 ms blocking publish: gap max 305.2 ms; gaps over 20 ms: 2 of 11999
blind distance at 0.5 m/s for the worst gap (cm): 15.3  for preemptive 10 ms: 0.5
no retry (1 attempt) [(0.0, 35.5, 100.0), (0.05, 32.5, 95.0), (0.1, 30.0, 90.0), (0.2, 25.9, 80.0), (0.3, 22.9, 70.0), (0.5, 18.5, 50.0)]
3 attempts, back-off idle 20 mA [(0.0, 35.5, 100.0), (0.05, 29.9, 99.99), (0.1, 25.4, 99.9), (0.2, 18.7, 99.2), (0.3, 14.1, 97.3), (0.5, 8.6, 87.5)]
3 attempts, back-off light sleep 1 mA [(0.0, 35.5, 100.0), (0.05, 31.1, 99.99), (0.1, 27.3, 99.9), (0.2, 21.3, 99.2), (0.3, 16.8, 97.3), (0.5, 10.9, 87.5)]
check p=0.2 M=3 idle: simulated {'avg_ma': 3.5485, 'delivery': 0.9926, 'awake_s': 3.3061} expected {'avg_ma': 3.5705, 'delivery': 0.992, 'awake_s': 3.3376}
