Here’s an example program our engineers might find useful. Kris Bahnsen, a long time engineer for Technologic Systems, wrote this simple program to get the voltage input (Vin) on the 8 – 28 VDC power rail on the TS-7670(Rev. D or later) or TS-7400-V2 (Rev. B or later). Without going into too much detail about implementation of the on-board supervisory microcontroller, there is a register which is used to store various ADC values, including Vin. This example program basically polls this 4byte register via I2C interface, accounts for the voltage divider (see TS-7670 schematic or TS-7400-V2 schematic), and outputs the Vin value. Home
So, without further ado, here’s the code:
get_vin.c
/* * To compile get_vin, use the appropriate cross compiler and run the * command: * * gcc -fno-tree-cselim -Wall -O0 -mcpu=arm9 -o get_vin get_vin.c */ /* This software is intended to run on the TS-7670 Rev. D or later, or * the TS-7400-V2 Rev. B or later. * * The math below is done with all integers, the values are multiplied up * and then divided down to get the best resolution. This software works * for the full VIN range read through the on-board supervisory microcontroller. */ #include <assert.h> #include <unistd.h> #include <fcntl.h> #include <linux/i2c-dev.h> #include <stdio.h> #include <strings.h> int main(void) { unsigned char data[4]; unsigned int vin; int fd; fd = open("/dev/i2c-0", O_RDWR); assert (fd != -1); if (ioctl(fd, I2C_SLAVE_FORCE, 0x78) < 0) { perror("MCU did not ACK 0x78\n"); return -1; } bzero(data, 4); read(fd, data, 4); vin = (data[3]<<8)|data[2]; vin = (((vin*24438)*172)/100000); /* 5.82% div., 2.5 Vref, 10b acc. */ printf("vin_mv=%d\n", vin); return 0; }
Compiling and Running
Once you’ve copied the source code over to the board, you can use the preloaded gcc
command to compile like this:
root@ts7670-496b64:~# gcc get_vin.c -o get_vin
Then, of course, run it! We have a 12 VDC power adapter plugged into the 8 – 28 VDC input, so we expect to see 12V reported as Vin (represented in mV):
root@ts7670-496b64:~# ./get_vin vin_mv=12028
Again, we hope you’ve found this example program to get Vin on the TS-7670 or TS-7400-V2 helpful. Let us know if you have any suggestions to make it better. Home