АДРЕС BYTE
Веднага след "Старт състояние, Host-a трябва да предава байт на следващия адрес на TCN75. Четирите най-значими бита от адреса (A6, A5, A4,A3) са фиксирани до 1001 (B). състояния на A2, A1, A0 в серийния поток трябва да съвпадат със състояния на A2,
А1 и А0 адресни входа за TCN75 да отговорят с потвърждение. Осмия бит в адреса е за четене / писане. Този бит е "1" за да прочетете операция или '0 'за операция за запис.
3.Заключение
Основната грешка при измерването зависи от датчика (преобразувателя температура/съпротивление), във връзка с неговата нелинейност, която се вижда от приложената таблица.По каталожни данни толеранса на преобразувателя не надвишава 1С за измервания обхват, като най-голяма е грешката в областта на най-високите температури.Грешката от преобразуването на аналоговия сигнал в цифров е пренебрежимо малка, тъй като е с няколко порядъка по-малка от грешката, внасяна от датчика.За отличната работа на термометъра допринасят както избора на на микроконтролера, така и неговото програмно осигуряване.По този начин се удовлетворява изискването за грешка по-малка от 2С и продължителната работа без сервизно обслужване.
Програмиране
Нуждаем се от функция конвертираща температурата по Целзий
float tcn75_convertTemp(byte aa, byte bb);
Тази функция превръша температурната стойност в целзий започваща с два бита представяне на TCN75.
За да използваме I2C шина ,се нуждаем от инициализиране на библиотека Wire
Wire.begin();
И за пускане на нашия код, ние ще поставим следната инициализация: Serial.begin(115200)
Тогава ,ние трябва да видим температурата:
tcn75_getTemperature
#include "Wire.h"
#define tcn75address 0x4F
void setup()
{
Wire.begin(); // пускане I2C bus
Serial.begin(115200);
}
float tcn75_getTemperature(int address)
{
byte a, b;
float temp=.0;
Wire.beginTransmission(address); // Започване на предаване
Wire.write((byte)0); // преместване на регистъра до 00h
Wire.endTransmission(); // спиране на предаване
Wire.requestFrom(address, 2); // Изпращане на съдържанието на първите два бита
a = Wire.read(); // първи байт приема и съхранява тук
b = Wire.read(); // втори байт приема и съхранява тук
temp=tcn75_convertTemp(a, b); // да конвертира получените байтове в float value
return(temp);
}
float tcn75_convertTemp(byte aa, byte bb)
{
float temp;
if (aa>127)
{
temp=((aa-128)*-1);
if (bb==128)
{
temp-=0.5;
}
}
else
{
temp=aa;
if (bb==128)
{
temp+=0.5;
}
}
return(temp);
}
void loop()
{
Serial.print("Current temperature = ");
Serial.println(tcn75_getTemperature(tcn75address));
delay(2000);
}
Използвана Литература:
Интернет
Google.bg
www.microchip.com
Сподели с приятели: |