Reverse engineering the 1988 NeXT keyboard protocol
&gt; When I told my Arduino to sleep for 51 microseconds, it was generally sleeping for either 56.2 or 61.3 microseconds. That seemed to easily be bad enough to cause lots of problems.<p>This is why I&#x27;ve never quite liked the Arduino ecosystem, the way it exists. Sure, it works and it&#x27;s accessible to newcomers... but it doesn&#x27;t encourage understanding the inner workings of the platform enough, which is something that is <i>extremely</i> valuable and accessible when you&#x27;re working with simple 8-bit microcontrollers. Learning about hardware registers and clocks and cycle accuracy really isn&#x27;t that scary, that&#x27;s the point of using a tiny (and frankly obsolete) 8-bit platform!<p>But when you give people an API that takes an integer number of microseconds, and then approximates it, people are going to <i>think</i> they can bit bang an async serial protocol in C using it, and they will be very confused when it doesn&#x27;t work (as happened here), and you end up in cargo cultish land of trying to work with bad data instead of developing an actual understanding of the hardware you&#x27;re working with.<p>I&#x27;ve seen so many people thinking they need to design their bespoke board around an Arduino shield connector because the thought of just throwing on the ATMega directly scares them, even though the thing only needs 5V, GND, and crystal (if that), because what would they do outside the comfortable ecosystem? And it just makes me sad. If you&#x27;re at the point you&#x27;re designing your own semi complex boards and you haven&#x27;t graduated from Arduino yet, you&#x27;re not letting yourself grow.<p>(Or maybe I&#x27;m just an old millennial and I think these zoomers should be learning microcontrollers by programming in assembly like I did when I was 10 and using the PIClist delay routine generator and counting my cycles before Arduino existed, now get off my lawn? You decide :-) )