как подружить uno с ZSC31050 по I2C?
- Войдите на сайт для отправки комментариев
Всем привет. Попалась мне в руки микра ZSC31050. Прикольная штука для работы с тензодатчиками мостового типа. Ее фишка в том, что к ней можно подключить тензодатчики и параллельно на нее повесить терморезистор. Произвести калибровку измеряемой величины при разных силовых воздействиях и при разной температуре (все это делается на отладочной плате ZMC с их родным софтом). После манипуляций с калибровкой и сохранением коэффициентов в память микры, вы получаете микроконтроллер прошитый именно под этот тензодатчик и именно под этот терморезистор. Тем самым получаем тензодатчик стабилизированный по температуре. ZSC может выдавать аналоговый сигнал (напряжение, токовая петля), ШИМ, и цифровой (I2C, OWI и SPI).
Проекте предполагается минимум проводов, поэтому на плате от микры выведено только питание, пины для подключения датчиков (тензо и термо) и I2С (по нему калибруем, зашиваем коэффициенты и далее забираем данные).
Знания по ардуино у меня начальные. поэтому для начала нарыл вот такой скетч и попытался прочитать значения тензиков с микры
#include <Wire.h> //подключаю библу i2c void setup() { Wire.begin(); // активирую шину i2c Serial.begin(9600); // указываю скорость общения } void loop() { Wire.beginTransmission(0x75); //открываю трансмиссию с адресом давайса 0x75 Wire.write(0); // в первый бит записываю 0, для чтения инфы с девайса Wire.endTransmission(); // закрываю трансмиссию Wire.beginTransmission(0x75); //открываю трансмиссию по новой Wire.requestFrom(0x75, 2); // запрашиваю 2 байта от девайса с адресом 0x75 uint8_t val = Wire.read(); // результат записываю в переменную val Serial.println(val); // вывожу значение на монитор порта Wire.endTransmission(); // закрываю трнасмиссию delay(500); }
В итоге приходит 255, воздействую на тензомост, безрезультатно. В родной отладочной программе значения приходящие тензика меняются в диапазонее 3200 до 32768 (у терморезистора от 15000 до 32768), т.е. там все работает как надо. АЦП то у микры 15 разрядный, поэтому до 32768 значения показывает.
В скетче пытался прочитать 2 байта (в которых по логике должно быть записано значение с тензика). Но моя логика не верна. В идеале считывать значения с тензика и термистора, но каким образом пока недогадался. Штудирую даташ и мануал к микре, но пока явных указаний к регистрам отвечающим за датчик и термистор не нашел.
https://drive.google.com/open?id=16IUdwxr0t7zIFSgtbJpRRKfTJm-Yc97Q даташ на ZSC
https://drive.google.com/open?id=16Kqm8IkriamaHbSYqO1GDs9pd2ZFj2dr тех.описание
https://drive.google.com/open?id=1XI0RYMaWmtBESnLOoh83HBIZ47onMXZM описание калибровочного набора
Цель: по I2с прочитать значения тензомоста и термистора.
Это ты один из двух байт от результата записал в переменную.
Ничего, что Wire.read() возвращает только байт?
И это тоже хрень какая-то. Короче нужно открыть https://www.arduino.cc/en/reference/wire и прочитать, прежде чем колдовать.