Casio 3-pin serial comms limitation removed - Picaxe and ESP / Arduino datalogging
Posté le 26/10/2025 03:55
My original code from 2006 has been used by others, and after 20 years I revisited using a Casio FX-9750 as a datalogger. Experiments proved it is possible to pause the calculator in the middle of a RECEIVE() request WITHOUT generating a COM error. This likely works with FX-9860 and FX-CG50 3-pin ports.
Quick history: I did the original Picaxe Forum post nearly 20 years ago of classroom use of a Casio FX-9750G connected to a Picaxe for data logging in Physics classes. Forum member Anobium then did a version later in 2011/2012. Clearing out my home lab recently I found my old class set I had made for an education research project (published) when I recalled an idea I had at the time but never tested until now.
For the last 20 years the wider community documentation interpreted the Casio FX-9750 and FX-9860 link mode as synchronous and blocking: once a transfer begins, both connected devices must complete it.
This prohibited real-time interval sampling because Casio BASIC lacks timing functions like PAUSE, WAIT, or a real-time clock. The calculator alone cannot manage precise time-based data collection. Instead, data acquisition units like the EA-100, EA-200 and CLAB handled timed interval sampling independently of the FX-9750 and FX-9860. However they cost $400 - $900.
The innovation: This post shares that I have invented and tested a new Picaxe BASIC algorithm that uses a previously undocumented and unknown exploit that permits pausing the RECEIVE() transmission without generating a COM timeout error.
I have completed a single universal Picaxe Basic program for 08M2 and 14M2 chips. For simple sensor units for younger learners the 08M2 chip connected to a single analog sensor (e.g. Temperature, light, sound, heartbeat) and/or a single digital input. For rates of change or more complex experiments in chemistry, physics or biology, a 14M2 which permits logging up to 3 sensors simultaneously.
The innovation is that both loggers now ALSO RECORD ELAPSED TIME STAMPS with the sensor readings!
The simple 3-pin serial protocol likely works with FX-9860 and FX-CG50 calculators.
This saves $$$$ having to purchase EA-200 or CLAB data acquisition units to enable data logging on the calculators.
The Casio BASIC program is also universal: It works with any connected microcontroller or board; Picaxe, ESP8266, ESP32 and others.
As a proof of concept, I have a working Wemos D1 mini running my new RECEIVE() algorithm.
More details here:
https://mikefentonnz.github.io/projects/casio-calculator-sensor-upgrade.html
Fichier joint
Citer : Posté le 26/10/2025 11:51 | #
This is quite fascinating. I never looked into the data acquisition side of the protocol, only ever using 3-pin for calc-to-calc communication. Can you elaborate on how you keep the calculator busy without raising an error? The diagram on your page says "Pause loop" which I assume does some regular housekeeping to keep the protocol out of timeout range without actually transmitting anything?
Citer : Posté le 27/10/2025 10:50 | #
I systematically inserted a single pause at one step, testing each step at a time. That was what I had intended to do 2007-2010 but never had the time to revisit until now. The Picaxe or ESP microcontroller was coded with ever increasing time delays to see how long each step could be delayed before triggering a COM error. No housekeeping. just sit and make the Casio wait until it timeout out.
Hence the very simple flow diagram showing the best place to insert a pause to allow timer interval logging.
A very thorough search indicates I am the first to find this and document it. I am soon uploading a technical document to my website link that includes detaield packat descriptions, checksum examples, and classroom teaching ideas.