"The eventual goal is a set of programs that anyone can figure out without reading the readme (who reads those?), runs quickly, doesn't care too much if your interface is old, does as much as possible automatically, and offers convenient+powerful tools for CBL software developers."

Since the availability of community-written CBL software is practically nonexistant, I'm diving back into 68k BASIC to write a faster, easier-to-use alternative to DataMate. In particular I hope to provide at least limited compatibility of newer analog sensors through conversion modules, and to enable users to use a single main program to automatically handle the standard set of CBL commands. In addition, its modularity means that the user only needs to install the subprograms for the sensors the user has, greatly reducing the size of the installation.

The v1.0 beta, released on 5 April 2014, showed CBLM's powerful features and relatively small size. However, it had some fundamental issues that prevented its mainstream use before significant changes were made. Primarily, it was limited to using CH1 and only worked with the three standard sensors included with the CBL or CBL 2 (TI Light Sensor, TILT-BTA; Voltage Probe, VP-BTA; and the Stainless Steel Temperature Sensor + compatibles).

With the unreleased v1.1 beta update in mid-April, CBLM could accurately detect the connected interface and sensor, and now worked with the Vernier EKG Sensor. Error detection was now fully functional. After finishing v1.1, I stopped working on CBLM for about two months.

The v1.2 beta update, the first release after April, included the documentation on how to write sensor modules, allowing for the user to quickly make their own if the need arised. Additionally, v1.2 included several major changes, primarily the first implementation for sampling across multiple channels. Following some bugfixing, v1.2.1 beta was released, which allowed for sampling on any channel and complete multichannel support in the subprograms.
See a video of CBLM v1.2.1 in action!

The v1.3 beta update was also a major update. CBLM could finally sample across multiple channels simultaneously, and the error list was completed. Some minor changes were made to the syntax of some of the subprograms to better support multichannel sampling. Unfortunately, while CBLM could perform multichannel sampling, the data display module could not display the data.

Currently v1.4 is planned, which I hope to be the last version in beta before I prepare the release candidate. It is expected to fix a number of bugs, some of which predate the v1.0 beta. Additionally, about 20 sensors should be supported in this release, some of which provide the first calculator support for those sensors or are otherwise not supported by DataMate. Digital sensors, while not recognized by CBLM due to a lack of documentation on such sensors, will have preliminary sampling support.

A more detailed description of the updates can be found here.
CBLM v1.4's release version (download here) was finished a while ago but I forgot to publish it. Whoops.

CBLM v1.4.1 finally fixes realtime sampling on the TI CBL. A bug in the error checking code caused CBLM to report an interface error with ID 0, even though the CBL never returned an error status.

Version 1.4 is the first release version of CBLM. Improving upon the fast execution of version 1.3.1, CBLM v1.4.2 features the following improvements (italics still in development):
  • Significantly faster time to detect sensors
  • Full multichannel support; CBLMDD and CBLMRTDD have been updated for multichannel support
  • Realtime display is functional, with a rewritten realtime display module
  • Official support for the Vernier LabPro
  • A generic Vin-low sensor module to add support for custom sensors using the Vin-low pin
  • Interface modules are now used to verify OS versions (CBL 2 and LabPro)
  • Help browser; sensor modules contain built-in help topics, but CBLM previously did not implement the help system
  • Oversampling; this averages several samples into one. This prevents rapid fluctuations in the data source from causing aliasing in the collected data.
  • A slight change to the syntax of sensor modules to prepare for v1.5

Version 1.5 is currently pending release. A major rewrite of version 1.4, it includes several major changes:
  • The time required to process collected data will be significantly reduced by performing most arithmetic on the interface itself.
  • Finally, support for the DIG OUT module that's been a part of CBLM since v1.0β Still trying to figure this one out.
  • Sensor modules will be in a separate folder
  • A global preference list preserves normally volatile settings, such as default sampling setup and sound preference.
  • Support for Smart ID on Vernier sensors; previously only the CBL's resistor values were used, causing incorrect sensor identification.
  • Incompatible interface firmware versions are put in compatibility mode blocked from using some features instead of erroring out on an invalid command or requiring the interface to operate as a TI CBL.
  • Compatibility option for sensor modules written for CBLM v1.4.2 and v1.3.1 (Compatibility with v1.3.1 and later versions of sensor modules actually happened through happenstance. However, these modules don't support interface-side conversion and thus will not perform well.)
CBLM has historically supported the original TI CBL. Unfortunately, the hardware limitations it presents to me have prevented many new features of CBLM v1.4 and v1.5 from working properly. I am not dropping support, but it will not support enhanced sensor identification via Smart ID, oversampling, or full-speed realtime sampling with multiple channels.
For the TI CBL 2 and Vernier LabPro, I highly suggest using the latest OS v6.27 on the interface. If CBLM detects an OS version that is incompatible with the command set it uses, the interface will operate in compatibility mode. The OS version can be checked within CBLM v1.4.1, via DataMate, or via Send {7}:Get z:100fPart(z[2]) on the homescreen.

Important update for LabPro users: I have found a critical bug in CBLM v1.4, making the LabPro unusable resulting from a bug in the CBLMDI subprogram and an incorrectly named variable within CBLM itself. CBLM v1.4.1 fixes this.
CBLM v1.4.2 is the final version of CBLM in the v1.4 series, and has been finished but not uploaded yet. It includes some features I've planned to include in version 1.5 that I deemed too easy to implement or too necessary to hold off on until version 1.5's release. So far the new features include oversampling, enhanced data display capabilities, improved multichannel sampling, and a large number of bugfixes and optimizations.

Development of version 1.5 has been making steady and significant progress.
  • I've used a Python script to scrape the command 201,945 and 201,955 values and translate sensor AutoID/Smart ID values into sensor names.
  • The first sensor modules (a generic 0-5V sensor module for the 'everything else' sensors, the -10-10V voltage probe module, and TI Light Sensor module) have been upgraded to v1.5 specifications. They maintain backwards compatibility with CBLM v1.3 and v1.4, but are not compatible with the associated sensor module specifications due to the changed syntax for data collection through modules.
  • The improved sensor identification should work in theory, but before I release anything based off of it I will contact Vernier about whether or not it will work.
  • I'm defining OS 6.23 on CBL 2 and LabPro to be the minimum required version for full CBLM compatibility.

Due to the amount of code that I need to revise in version 1.5, the release should be in three to six weeks from now. The most difficult part (CBL2/LabPro AutoID support) is just about over.
Progress on CBLM v1.5 has been strong and steady. Among the most prominent of the new features in this beta of CBLM is the quick setup tool, placing CBLM's time to begin sampling as the fastest for any TI-89 interface software and significantly (~ 8x) faster than DataMate. The complete list of features as so far implemented follows:
  • The bugs involving the original CBL have been worked out (yet again).
  • Information about sensor modules was passed to the data display subprograms in version 1.4. Now, those subprograms use sensor information derived from that setup information in order to better fit data to the screen.
  • Conversion equations are now (and finally) supported by CBLM. This allows any sensor to work with any compatible interface, so long as a sensor module exists that can properly visualize and/or convert the data.
  • Default sampling parameters can now be reset.
  • Quick Setup no longer overwrites the settings used for last sample collection.
  • Sensor modules convey additional information about the sensor. CBLM v1.5 requires the new information in order to properly set up conversion equations.
  • A bug in the non-realtime data display subprogram caused the program to crash when the data minimum equals the data maximum.
  • Sensor AutoID values are now read properly, and a sensor module can specify a range of valid AutoID values as the value can change based on sensor configuration. Additionally, this allows sensors like the 3-Axis Accelerometer to share a sensor module with the Low-g Accelerometer, as the two use identical sensor setup information but four unique AutoID values. However, this leads to the issue of sensors with multiple data ranges requiring multiple sensor modules. This is necessary for compatibility with the original CBL, as it cannot tell the difference between different calibrations.
The legacy v1.4 sensor modules will be updated for v1.5 in order to prevent crashing. The update merely specifies the CBLM target version in the sensor information list.
CBLM v1.5 has been released, and is available from the Cemetech archives here. All the documentation should be up-to-date, as the subprograms' syntax has been significantly altered in this version to allow all the above new features to be added.
CBLM v1.6 is currently in the development stage. For the main program (CBLM), this is primarily a bugfix release. However, the subprograms will be overhauled again. Non-realtime data display is much faster as general statistics are not calculated unless prompted. Also new to non-RT data display is a fast Fourier transform, which is valid for 16, 32, 64, and 128 sample data sets.
The realtime data display will no longer crash when changing channels in graph view, and some minor syntax changes to the subprograms as specified in the CBLM v1.5 technical manual will be implemented. I also hope to include more sensor modules in this release, along with a calibration tool.
As a well-needed addition to CBLM that has been absent since its inception, I'm releasing an add-on pack for CBLM that allows calibration of sensors. While it seems unusual that such a fundamental feature has been absent for so long, it is rather complicated to implement. Previously, CBLM would either use a preconfigured calibration or ask the interface to ask the sensor for calibration details from the sensor's memory. This produced reasonably accurate results for most physics sensors, yet the chemical sensors have very wide fluctuation in readouts and thus frequently require new calibrations. My solution for this is to create a generic sensor module containing code that reads a table of calibration values, and returns the loaded values instead of asking the sensor about calibration.

For users of CBLM v1.5: As the currently selected channel is not sent with CBLM's sensor information discovery command, there is no way to identify the type of sensor connected. Thus, the sensor information returned is generic. A sensor using the Vin-low (0-5V) line cannot use the same setup parameters as one using the Vin or Resistance inputs. As a sensor module is responsible for providing the type of sensor connected, three separate modules for calibrated setup are required (one for each input type: Vin, Vin-low, and Resistance). The solution is bulky, but necessary.
CBLM v1.6 provides a slightly altered syntax to the sensor information discovery command, specifying the sensor channel for which it is collecting information. This allows me to include details about a sensor in the calibration equation table, so one sensor module handles all three input types based on the selected calibration.

The LabPro (and by extension, all [lesser] models such as the CBL2) presents no method of tracking which specific sensors are plugged into the interface at a given time. Additionally, in keeping with CBLM's delivery of performance, calibrations are per-channel instead of per-sensor. If a sensor is swapped out during the same run of CBLM, the calibration must be reloaded. I encourage users to use one sensor with one channel if a custom calibration is loaded. CBLM, as a result of it not seeing the calibrated sensor module as a default module under any circumstance, will load calibrations from the sensor interface by default, and resort to the module's preprogrammed values if the sensor does not support Smart ID.

Now, you may remember me mentioning sensor memory. Using LabPro commands, it is possible to read and write this memory 8 bytes at a time. Logger Pro does this. CBLM won't for a while; I don't yet have the technical know-how to rewrite sensor memory, nor am I willing to risk the integrity of sensors until I can ensure the output is accurate. However, I do use memory reads indirectly to facilitate automatic calibration equation loading in CBLM v1.5.

The add-on pack will also be released with a utility for calibrating sensors. Sensors such as the Vernier Ion-Selective Electrodes, accelerometers, and various chemical sensors have simple two-point calibration techniques resulting in an equation any sensor interface can interpret. However, with my utility I plan to add a calibration technique to any sensor, including ones such as the temperature sensors, using either a two-point calibration with the default equation or a multi-point calibration with a polynomial best-fit equation.

The Sensor Calibration Add-On Modules should work with CBLM back to version 1.2.1, and are officially supported by versions 1.5 and 1.6. It does not modify any of CBLM's binaries, only modifying the sensor module list. It will be released in the coming days as I finalize a GUI for the sensor calibration tool.
CBLM v1.6 is approaching its release candidate. It provides increased flexibility with sampling configuration files (CBLM v1.5 currently saves a fixed-name preferences file containing the sampling configuration), allowing for preset settings to be easily saved and loaded. Other enhancements and bugfixes are being added.
I've long teased a Python implementation of CBLM that runs on computers, since it's often more convenient to use a computer's large and colorful screen to analyze data. The big issue with the Python version has been the rather unusual setup needed, a Graylink to a serial port. Nobody really has either of those devices anymore, so I've decided to tackle a USB implementation, starting with the LabPro's native USB interface. Vernier documents the USB interface in the LabPro technical reference, so I implemented that in WinUSB / libusb1 with python-libusb1 to keep it platform-independent and additionally support Windows XP. After hours of reading Google results and StackOverflow pages, I've tortured python-libusb1 to my will and have achieved greatness. Next, I'll implement the CBL/CBL2 using a Silverlink to mimic my efforts with the Graylink.

It's hard to believe the CBLM project is over seven years old now. And yes, 1.6 (actually 1.6.1 now) is still in beta.
Well I got a TI-92 and wanted to collect some data. Turns out that despite me now owning the devices (I did not in 2015), I never ported CBLM over to the TI-92 or TI-92 Plus. Turns out v1.6 is going to really just be a bugfix release, but it'll support the whole 68k line and not just the TI-89.

There's some inefficiencies in the TI-92 BASIC dialect that I'll have to work around. The hardest part is actually getting the programs over from the TI-89, for which I'm using Text Editor as an intermediary. I'm not looking forward to maintaining two branches of CBLM, but there's not a whole lot to maintain anymore.

The porting process has revealed some bugs in v1.5, so those will get fixed.

Looking good!
Good luck with debugging!
So, CBLM is running on the TI-92, but some architectural decisions with the way CBLM loads sensor description modules are catching up to me, and some very important parts of CBLM are just wholly broken as a result. The sensor modules typically hardcode the expected behavior of a sensor, which lets the CBL use sensors it's officially not compatible with (Command 4, which does conversion equations, works roughly the same way, and conversion equations can be implemented in software). There's three different versions of the sensor module interfacing with CBLM (v1.0, v1.4, v1.5+) and CBLM can use all three, but it's quite strict with how data coming out of the sensor module is formatted and it's causing problems with developing sensor modules. To mediate this, I'm working on a sensor module validator to test both new and existing sensor modules to ensure every module bundled with CBLM is brought up to v1.5+ spec.

To simplify the backporting process, I only intend on releasing CBLM v1.6 with a Auto-ID/Smart-ID module. Since each module is itself a program, the module can talk with CBLMDS or the sensor interface itself and load the calibration from interface or sensor memory. Since one module should be able to talk to all sensors on a CBL2 or LabPro, the user won't need to install a gazillion modules to make things work, plus per-sensor calibration can be used.

Since I've forgotten entirely about how CBLM works, detailed documentation about what each component and variable does will be included with a v1.6 or v1.6.1 release.
CVSoft wrote:
To simplify the backporting process, I only intend on releasing CBLM v1.6 with a Auto-ID/Smart-ID module. Since each module is itself a program, the module can talk with CBLMDS or the sensor interface itself and load the calibration from interface or sensor memory. Since one module should be able to talk to all sensors on a CBL2 or LabPro, the user won't need to install a gazillion modules to make things work, plus per-sensor calibration can be used.

Well, that was easy.

Unfortunately, this relies entirely on commands the CBL doesn't support. CBLM was created to allow the CBL to use any sensor the CBL2 can, as the built-in sensor support for the CBL is very limited. Since this sensor module simply shims built-in sensor support, it offers quite little for the poor old CBL (voltage, current, light, temperature, resistance) while allowing the CBL2/LabPro to work with all Vernier-supported sensors without having to install any extra modules.

While working on this, I archived a great deal of information regarding the DDS/Smart-ID protocol, which is useful to anyone making sensors but won't be implemented in CBLM itself. The documentation is still in the works and will be released with CBLM 1.6.
Register to Join the Conversation
Have your own thoughts to add to this or any other topic? Want to ask a question, offer a suggestion, share your own programs and projects, upload a file to the file archives, get help with calculator and computer programming, or simply chat with like-minded coders and tech and calculator enthusiasts via the site-wide AJAX SAX widget? Registration for a free Cemetech account only takes a minute.

» Go to Registration page
Page 1 of 1
» All times are UTC - 5 Hours
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum