1. There’s something incredibly satisfying, if a little masochistic, about poring over PIC datasheets and manpages, and tinkering with low-level code you only half understand, when it all actually works and you get two devices to talk to each other (in this case a PIC16F886 and a Raspberry Pi, via I2C)

  2. Fitted basic optical encode circuit to my , now figuring out optimal settings for calculating wheel speed. Notes:

    Sane gurdy speed of 14 revs every 10 seconds = 1.4 RPS
    52 markers on wheel = 52 * 1.4 = 72.8 transitions per second ≈ 73Hz minimal input signal
    
    Timer nominal input freq is Fosc / 4 = 4MHz / 4 = 1Mhz
    Max prescaling = 1:256, i.e. TMR0 increments once for every 256 Fosc/4 pulses
    Resultant timer freq = 1Mhz / 256 = 0.00390625 Mhz = 3906.25 Hz
    
    Input signal has ≈50% duty cycle so periods between pulses should be 1 / 73 = 13.69863014ms
    
    Period of 3906.25Hz wave = 0.256ms
    Num pulses @ 3906.25Hz after 13.7ms = 13.7 / 0.256 = 53.515625
    
    1.4 RPS is minimal normal gurdy trompette playing speed, so counting 54 clicks per transition gives a little space for speeding up and a lot of space for slowing down.
    
    High gurdy trompetting speed of 24 revs per 10 seconds = 2.4 RPS
    TPS = 52 * 2.4 ≈ 124.8 = 125Hz maximum input signal = wavelength of 1 / 125 = 8ms
    Num pulses @ 3906.25Hz after 8ms = 8 / 0.256 = 31.25
    

    So these values should give a just-wide-enough span of ≈20 ticks between nominal and trompetting speed, with room to halve or potentially even quarter the prescaler if this turns out to not be enough. One advantage of these values is space to track much slower wheel movements, opening this up to be used for slower performance tools as well as speed measuring.

    An external switch could always adjust the prescaler if necessary to cover both use cases.