Data Logger. MSP430G2553 and TinyCore Linux.
Измеряем напряжение и сохраняем значения на компьютере.
Noritake Itron VFD Vacuum Fluorescent Display, LCD Compatible Design (HD44780), parallel interface, 20x2.
Мы уже сделали следующее:
1. Соединили LaunchPad (MSP430G2553) с индикатором и это начало работать сразу (ссылка);
2. Сделали одноканальный вольтметр, который выводит данные на экран компьютера (ссылка);
На данный момент в микроконтроллере MSP430G2553 уже "живет" программа, которая каждую секунду выдает информацию в последовательный порт. Проблема в том, что с ней делать. Хотелось бы записывать все во внутреннюю память и просматривать по необходимости. Но это сложно и объем внутренней памяти у MSP430G2553, мягко говоря, очень маленький.
Можно ли записывать в SD Card или USB Flash Drive? Конечно можно, но за 10 минут этого не сделаешь. Да и не хочется.
Есть значительно более простое решение. Linux позволяет легко получать дату через последовательный порт и записывать ее в файл. Это, как бы, часть операционной системы и ничего кроме самого Linux не понадобится.
Потребуется: любой компьютер имеющий два/три USB входа и USB Flash Drive (>16Mb), с предустановленным TinyCore Linux.
Каким образом Вы запустите TinyCore Linux (Live USB, Live CD или с харддрайва) - не имеет значения. На первом экране появится все, что нам необходимо. В данном случае нас интересует только "Terminal".
Прежде всего нам необходимо определить на какой последовательный порт присядет наш MSP430, когда мы подключим его к компьютеру. Это не сложно. Инфо обо всем, что подключается и отключается от компьютера, прописывается в текстовый файл. Его можно посмотреть командой dmesg без параметров. Результат команды dmesg до и после подключения LaunchPad c MSP430G2553 к USB порту компьютера на картинке ниже.
Отлично. LaunchPad повисла на ttyACM0, а если быть более точным, то на /dev/ttyACM0
ttyACM0 это файл в дирректории /dev. А раз так, то его можно прочитать командой cat
cat читает файл и выводит его на экран. Если быть более точным, то он перенаправляет вывод на экран. То есть мониторит все, что приходит на последовательный порт ttyACM0
Напомню, что в Windows под PuTTY это выглядело так.
ttyACM0 перенаправляется в файл так же просто. К команде которая уже работает
cat /dev/ttyACM0 необходимо добавить перенаправление в файл >> data.txt
где data.txt имя файла в котором будут складываться данные. Имя и расширение значения не имеют. Знак >> перенаправляет вывод в файл, и если такого файла не существовало, то создается новый. Если такой файл уже был, то он дописывается в конце.
Результат cat /dev/ttyACM0 >> data.txt
pwd - смотрим, где находимся;
ls - какие файлы в дирректории - никаких;
cat /dev/ttyACM0 >> data.txt - перенаправляем вывод в файл;
Ctrl ^ C - останавливаем;
ls - проверяем файлы. Таки да, data.txt появился;
more data.txt - читаем содержимое файла;
ll (ls -la) - смотрим размер файла (228 байт).
В таком простом варианте даталоггера у Вас будет одно ограничение. Вы можете отправлять значения либо на экран, либо в файл. Если в файл, то во втором экране Terminal команда
tail -f data.txt
будет мониторить файл data.txt и выводить на экран строки, которые в него дописываются.
Что делать дальше каждый решает сам для себя. Я копирую файл на USB Flash Drive
cp data.txt /dev/sdc1
и переношу на компьютер, где есть MS Excel или OpenOffice. Обрабатываю уже там. Если в файле меньше 32000 строк, то проблем не возникает.
Для примера, на картинке ниже, содержание файла записанного аналогичным образом.
Это лог устройства, которое общитывает термоэлектрическую батарею.
Комментарии в первой строке (это перавая строка, которую посылает
msp430g2553 через последовательный интерфейс) - очень полезное дело, тк
через месяц уже сам чёрт не разберет к чему отностятся эти цифры.
Хочется сказать о одном негативном моменте. Последовательный интерфейс, на плате LaunchPad, не совсем стандартный. Не хочется искать "сало в колбасе", но это так.
Что бы LaunchPad передавал данные в Linux based computer через "штатный USB интерфейс" необходимо:
1.Нажать и удерживать кнопку Reset на плате LaunchPad;
2.Подключить запрограммированную LaunchPad через USB к Linux компьютеру;
3.Через 10 секунд, когда компьютер определит наличие ttyACM0 , запустить cat
/dev/ttyACM0 или cat /dev/ttyACM0 >> data.txt
4. И на 15-й секунде отпустить кнопку Reset на плате LaunchPad.
(5)*. Каждый раз когда Вы запускаете cat /dev/ttyACM0 или cat /dev/ttyACM0 >> data.txt процедуру 1-4 необходимо делать снова.
Это связано с реализацией USB to Serial интерфейса на плате LaunchPad. К примеру, для Arduino такой проблемы не возникает.
Дальше: как сделать так, что бы с этим можно было работать.
***TinyCore Linux выбран потому, что он одинаково хорошо работает как на Pentium Core i7 с 96Gb, так и на Celeron 300 Mhz c 128Mb RAM.