<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title><![CDATA[forum.rcl-radio.ru &mdash; AD7793]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=505</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=505&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «AD7793».]]></description>
		<lastBuildDate>Fri, 20 Jan 2023 15:11:34 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7253#p7253</link>
			<description><![CDATA[<p>СПАСИБО ВСЕ ОК <br />ПРОГЛЯДЕЛ ЭТИ функции в конце<br />При копировании скеча в буфер обмена с сайта<br />и последующий прогон программной оболочки Arduino IDE сразу не идет <br />то ли добавляются какие то не видимые значки или может англ.буквы меняются на русские &quot;O&quot; <br />идет ошибка <br />stray &#039;\302&#039; in program но с этой ошибкой я справился</p>]]></description>
			<author><![CDATA[null@example.com (ak555)]]></author>
			<pubDate>Fri, 20 Jan 2023 15:11:34 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7253#p7253</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7251#p7251</link>
			<description><![CDATA[<p>Добавьте несколько функции за пределами loop()</p><div class="codebox"><pre><code>void write_byte(byte reg, long data, int bit_){
     digitalWrite(CS,LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (data &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH); 
     }
     digitalWrite(CS,HIGH);
     }

     
  long read_byte(byte reg, int bit_){
     digitalWrite(CS,LOW);
  while(digitalRead(DOUT)!=LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW); 
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  while(digitalRead(DOUT)!=LOW); 
  long data_out=0;
  long dat;
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(SCLK,HIGH);
     dat = digitalRead(DOUT);
     data_out |= (dat&lt;&lt;i); 
     }
     digitalWrite(CS,HIGH);
     return data_out; 
  }

void reset(){
     digitalWrite(CS,LOW);   
  for(int i = 31; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, HIGH);
     digitalWrite(SCLK,HIGH);
     }
     digitalWrite(CS,HIGH);
  }</code></pre></div><p>Скетч который Вы опубликовали не имеет этих функций</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 20 Jan 2023 14:48:11 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7251#p7251</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7250#p7250</link>
			<description><![CDATA[<p>сообщение об ошибке<br />Arduino: 1.8.13 (Windows 10), Плата:&quot;Arduino Nano, ATmega328P&quot;<br />Компиляция скетча...</p><p>&quot;D:\\arduino-1.0.1\\arduino-1.8.13\\arduino-1.8.13-windows\\arduino-1.8.13\\hardware\\tools\\avr/bin/avr-g++&quot; -c -g -Os -w -std=gnu++11 -fpermissive -fno-exceptions -ffunction-sections -fdata-sections -fno-threadsafe-statics -Wno-error=narrowing -MMD -flto -mmcu=atmega328p -DF_CPU=16000000L -DARDUINO=10813 -DARDUINO_AVR_NANO -DARDUINO_ARCH_AVR &quot;-ID:\\arduino-1.0.1\\arduino-1.8.13\\arduino-1.8.13-windows\\arduino-1.8.13\\hardware\\arduino\\avr\\cores\\arduino&quot; &quot;-ID:\\arduino-1.0.1\\arduino-1.8.13\\arduino-1.8.13-windows\\arduino-1.8.13\\hardware\\arduino\\avr\\variants\\eightanaloginputs&quot; &quot;C:\\Users\\User\\AppData\\Local\\Temp\\arduino_build_255010\\sketch\\7793_11.ino.cpp&quot; -o &quot;C:\\Users\\User\\AppData\\Local\\Temp\\arduino_build_255010\\sketch\\7793_11.ino.cpp.o&quot;</p><p>E:\7793_1\PROB\7793_11\7793_11.ino: In function &#039;void setup()&#039;:</p><p>7793_11:49:3: error: &#039;write_byte&#039; was not declared in this scope</p><p>&nbsp; &nbsp;write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER</p><p>&nbsp; &nbsp;^~~~~~~~~~</p><p>exit status 1</p><p>&#039;write_byte&#039; was not declared in this scope</p>]]></description>
			<author><![CDATA[null@example.com (ak555)]]></author>
			<pubDate>Fri, 20 Jan 2023 14:45:57 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7250#p7250</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7249#p7249</link>
			<description><![CDATA[<p>Он же не полный.</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 20 Jan 2023 14:35:18 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7249#p7249</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7248#p7248</link>
			<description><![CDATA[<p>использую :<br />// AD7793<br />#define SCLK&nbsp; &nbsp;2<br />#define CS&nbsp; &nbsp; &nbsp;3<br />#define DIN&nbsp; &nbsp; 4<br />#define DOUT&nbsp; &nbsp;5</p><p>#define AVDD_MONITOR 0b111 // CONF<br />#define TEMP_SENSOR&nbsp; 0b110 // CONF<br />#define CH1&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0b000 // CONF<br />#define CH2&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0b001 // CONF<br />#define CH3&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; 0b011 // CONF<br />#define BIPOLAR&nbsp; &nbsp; &nbsp; 0b00000000 // CONF<br />#define UNIPOLAR&nbsp; &nbsp; &nbsp;0b00010000 // CONF<br />#define BIPOLAR&nbsp; &nbsp; &nbsp; 0b00000000 // CONF<br />#define UNIPOLAR&nbsp; &nbsp; &nbsp;0b00010000 // CONF<br />#define GAIN_1&nbsp; &nbsp; &nbsp; &nbsp;0b000&nbsp; &nbsp; &nbsp; // CONF<br />#define GAIN_2&nbsp; &nbsp; &nbsp; &nbsp;0b001&nbsp; &nbsp; &nbsp; // CONF<br />#define GAIN_4&nbsp; &nbsp; &nbsp; &nbsp;0b010&nbsp; &nbsp; &nbsp; // CONF<br />#define GAIN_8&nbsp; &nbsp; &nbsp; &nbsp;0b011&nbsp; &nbsp; &nbsp; // CONF<br />#define GAIN_16&nbsp; &nbsp; &nbsp; 0b100&nbsp; &nbsp; &nbsp; // CONF<br />#define GAIN_32&nbsp; &nbsp; &nbsp; 0b101&nbsp; &nbsp; &nbsp; // CONF<br />#define GAIN_64&nbsp; &nbsp; &nbsp; 0b110&nbsp; &nbsp; &nbsp; // CONF<br />#define GAIN_128&nbsp; &nbsp; &nbsp;0b111&nbsp; &nbsp; &nbsp; // CONF <br />#define F_ADC_500&nbsp; &nbsp; 0b0001 // MODE <br />#define F_ADC_250&nbsp; &nbsp; 0b0010 // MODE <br />#define F_ADC_125&nbsp; &nbsp; 0b0011 // MODE <br />#define F_ADC_62_5&nbsp; &nbsp;0b0100 // MODE <br />#define F_ADC_50_0&nbsp; &nbsp;0b0101 // MODE <br />#define F_ADC_39_2&nbsp; &nbsp;0b0110 // MODE<br />#define F_ADC_33_3&nbsp; &nbsp;0b0111 // MODE <br />#define F_ADC_19_6&nbsp; &nbsp;0b1000 // MODE <br />#define F_ADC_16_7&nbsp; &nbsp;0b1001 // MODE <br />#define F_ADC_12_5&nbsp; &nbsp;0b1011 // MODE <br />#define F_ADC_10_0&nbsp; &nbsp;0b1100 // MODE <br />#define F_ADC_8_33&nbsp; &nbsp;0b1101 // MODE <br />#define F_ADC_6_25&nbsp; &nbsp;0b1110 // MODE&nbsp; <br />#define F_ADC_4_17&nbsp; &nbsp;0b1111 // MODE</p> <br /> <br /> <br /><p> void setup()<br /> { <br /> Serial.begin(9600);<br />&nbsp; pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT);<br />&nbsp; digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH);<br />&nbsp; delay(100);<br />&nbsp; //reset();<br />&nbsp; write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER<br />//&nbsp; write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER <br /> // write_byte(0x08,(0xC0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Zero-Scale Calibration<br />//&nbsp; write_byte(0x08,(0xE0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Full-Scale Calibration<br />//&nbsp; Serial.print(&quot;Stat &quot;);Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER<br />//&nbsp; Serial.print(&quot;ID&nbsp; &nbsp;&quot;);Serial.println(read_byte(0x60,8),BIN);// ID REGISTER <br />//&nbsp; Serial.print(&quot;Ofst &quot;);Serial.println(read_byte(0x70,24));//OFFSET REGISTER<br />//&nbsp; Serial.print(&quot;ful&nbsp; &quot;);Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER <br /> // write_byte(0x28,0x00, 8);// IO REGISTER<br />&nbsp; <br /> }<br />&nbsp; void loop()<br /> { </p><p>}</p>]]></description>
			<author><![CDATA[null@example.com (ak555)]]></author>
			<pubDate>Fri, 20 Jan 2023 14:32:12 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7248#p7248</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7244#p7244</link>
			<description><![CDATA[<p>Опубликуйте скетч который используете.</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 20 Jan 2023 00:23:27 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7244#p7244</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7243#p7243</link>
			<description><![CDATA[<p>Поясните write_byte не компилируется как поправить?<br />write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER</p>]]></description>
			<author><![CDATA[null@example.com (ak555)]]></author>
			<pubDate>Thu, 19 Jan 2023 18:38:20 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7243#p7243</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=6549#p6549</link>
			<description><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/08/8ca5186f9a957fe535879f53c2c7703a.png" alt="http://forum.rcl-radio.ru/uploads/images/2022/08/8ca5186f9a957fe535879f53c2c7703a.png" /></span> </p><br /><p>AD7793 МИЛЛИОММЕТР 0...32 Ом</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt; 
#include &lt;LiquidCrystal_I2C.h&gt;   // http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей

// AD7793 DVDD = 5V | AVDD = 5V | R = 0...32 Om
#define SCLK   2
#define CS     3
#define DIN    4
#define DOUT   5

#define AVDD_MONITOR 0b111 // CONF
#define TEMP_SENSOR  0b110 // CONF
#define CH1          0b000 // CONF
#define CH2          0b001 // CONF
#define CH3          0b011 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define GAIN_1       0b000      // CONF
#define GAIN_2       0b001      // CONF
#define GAIN_4       0b010      // CONF
#define GAIN_8       0b011      // CONF
#define GAIN_16      0b100      // CONF
#define GAIN_32      0b101      // CONF
#define GAIN_64      0b110      // CONF
#define GAIN_128     0b111      // CONF

#define F_ADC_500    0b0001 // MODE 
#define F_ADC_250    0b0010 // MODE 
#define F_ADC_125    0b0011 // MODE 
#define F_ADC_62_5   0b0100 // MODE 
#define F_ADC_50_0   0b0101 // MODE 
#define F_ADC_39_2   0b0110 // MODE
#define F_ADC_33_3   0b0111 // MODE 
#define F_ADC_19_6   0b1000 // MODE 
#define F_ADC_16_7   0b1001 // MODE 
#define F_ADC_12_5   0b1011 // MODE 
#define F_ADC_10_0   0b1100 // MODE 
#define F_ADC_8_33   0b1101 // MODE 
#define F_ADC_6_25   0b1110 // MODE  
#define F_ADC_4_17   0b1111 // MODE   

#define R_100        99.969  
#define K_0          0.0025
#define K_AVDD       6.065

 byte v1[8] = {0x07,0x07,0x07,0x07,0x07,0x07,0x07,0x07};
 byte v2[8] = {0x07,0x07,0x00,0x00,0x00,0x00,0x00,0x00};      
 byte v3[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x1F,0x1F};
 byte v4[8] = {0x1F,0x1F,0x00,0x00,0x00,0x00,0x1F,0x1F};
 byte v5[8] = {0x1C,0x1C,0x00,0x00,0x00,0x00,0x1C,0x1C};
 byte v6[8] = {0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C,0x1C};
 byte v7[8] = {0x00,0x00,0x00,0x00,0x00,0x00,0x07,0x07};
 byte v8[8] = {0x1F,0x1F,0x00,0x00,0x00,0x00,0x00,0x00};
 byte d1,d2,d3,d4,d5,d6,e1,e2,e3,a[6],x;


void setup(){ 
  Serial.begin(9600);
  pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT);
  digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH);
  delay(100);
  reset();
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((UNIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER 
  write_byte(0x08,(0xC0&lt;&lt;8)|0x0A, 16);delay(100);// MODE REGISTER System Zero-Scale Calibration
  write_byte(0x08,(0xE0&lt;&lt;8)|0x0A, 16);delay(100);// MODE REGISTER System Full-Scale Calibration
  Serial.print(&quot;Stat &quot;);Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER
  Serial.print(&quot;ID   &quot;);Serial.println(read_byte(0x60,8),BIN);// ID REGISTER 
  Serial.print(&quot;Ofst &quot;);Serial.println(read_byte(0x70,24));//OFFSET REGISTER
  Serial.print(&quot;ful  &quot;);Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER 
  write_byte(0x28,0x00, 8);// IO REGISTER 
  lcd.init();lcd.backlight();
  lcd.createChar(1, v1);lcd.createChar(2, v2);lcd.createChar(3, v3);lcd.createChar(4, v4);
  lcd.createChar(5, v5);lcd.createChar(6, v6);lcd.createChar(7, v7);lcd.createChar(8, v8);
  lcd.setCursor(5, 0);lcd.print(F(&quot;AD7793&quot;));
  delay(1000);lcd.clear();
}
 
void loop(){ 
// READ ADC //////////////////////////////////////////////////////////////////  
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((UNIPOLAR|GAIN_1)&lt;&lt;8)|0x90|CH2, 16); // CONFIGURATION REGISTER 
  long adc = read_byte(0x58,24);
  float u = 1170.00/0xFFFFFF*adc/1;
  Serial.print(&quot;DATA:  &quot;);Serial.println(adc);
  delay(1);
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((UNIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER
  adc = read_byte(0x58,24);
  float u_100 = 1170.00/0xFFFFFF*adc*K_AVDD;
  delay(1);  
  float r = ((R_100*u)/(u_100-u))-K_0;
  long number = r*10000;
  Serial.print(&quot;R_NUM: &quot;);Serial.println(number);
  Serial.print(&quot;AVDD:  &quot;);Serial.println(u_100);
  Serial.println();
/// R &lt; 10 
if(r&lt;10){
     a[0]=number/10000;
     a[1]=number/1000%10;
     a[2]=number/100%10;
     a[3]=number/10%10;
     a[4]=number%10;
   for(x=0;x&lt;5;x++){
    switch(x){
        case 0: e1=0;e2=1,e3=2;break;
        case 1: e1=4,e2=5,e3=6;break;
        case 2: e1=7,e2=8,e3=9;break;
        case 3: e1=10,e2=11,e3=12;break;
        case 4: e1=13,e2=14,e3=15;break;
   }digit();}
   lcd.setCursor(3,1);lcd.print(&quot;.&quot;);lcd.setCursor(3,0);lcd.print(&quot; &quot;);
}
/// R &gt; 10 
if(r&gt;=10){
  if(number&gt;319999){number=319999;lcd.setCursor(6,0);lcd.print(&quot;*&quot;);}
  else{lcd.setCursor(6,0);lcd.print(&quot; &quot;);}
     a[0]=number/100000;
     a[1]=number/10000%10;
     a[2]=number/1000%10;
     a[3]=number/100%10;
     a[4]=number/10%10;
   for(x=0;x&lt;5;x++){
    switch(x){
        case 0: e1=0;e2=1,e3=2;break;
        case 1: e1=3,e2=4,e3=5;break;
        case 2: e1=7,e2=8,e3=9;break;
        case 3: e1=10,e2=11,e3=12;break;
        case 4: e1=13,e2=14,e3=15;break;
   }digit();}
   lcd.setCursor(6,1);lcd.print(&quot;.&quot;);
}
}

void digit(){
  switch(a[x]){
    case 0: d1=1,d2=8,d3=6,d4=1,d5=3,d6=6;break;
    case 1: d1=32,d2=2,d3=6,d4=32,d5=32,d6=6;break;
    case 2: d1=2,d2=8,d3=6,d4=1,d5=4,d6=5;break;
    case 3: d1=2,d2=4,d3=6,d4=7,d5=3,d6=6;break;
    case 4: d1=1,d2=3,d3=6,d4=32,d5=32,d6=6;break;
    case 5: d1=1,d2=4,d3=5,d4=7,d5=3,d6=6;break;
    case 6: d1=1,d2=4,d3=5,d4=1,d5=3,d6=6;break;
    case 7: d1=1,d2=8,d3=6,d4=32,d5=32,d6=6;break;
    case 8: d1=1,d2=4,d3=6,d4=1,d5=3,d6=6;break;
    case 9: d1=1,d2=4,d3=6,d4=7,d5=3,d6=6;break;
    case 10:d1=150,d2=150,d3=150,d4=150,d5=150,d6=150;break;
    }
lcd.setCursor(e1,0);lcd.write((uint8_t)d1);
lcd.setCursor(e2,0);lcd.write((uint8_t)d2);lcd.setCursor(e3,0);lcd.write((uint8_t)d3);lcd.setCursor(e1,1);
lcd.write((uint8_t)d4);lcd.setCursor(e2,1);lcd.write((uint8_t)d5);lcd.setCursor(e3,1);lcd.write((uint8_t)d6);}

void write_byte(byte reg, long data, int bit_){
     digitalWrite(CS,LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (data &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH); 
     }
     digitalWrite(CS,HIGH);
     }

     
  long read_byte(byte reg, int bit_){
     digitalWrite(CS,LOW);
  while(digitalRead(DOUT)!=LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW); 
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  while(digitalRead(DOUT)!=LOW); 
  long data_out=0;
  long dat;
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(SCLK,HIGH);
     dat = digitalRead(DOUT);
     data_out |= (dat&lt;&lt;i); 
     }
     digitalWrite(CS,HIGH);
     return data_out; 
  }

void reset(){
     digitalWrite(CS,LOW);   
  for(int i = 31; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, HIGH);
     digitalWrite(SCLK,HIGH);
     }
     digitalWrite(CS,HIGH);
  }</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 19 Aug 2022 07:17:58 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=6549#p6549</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=6548#p6548</link>
			<description><![CDATA[<p>AD7793 + термопара + термосопротивление + терморегулятор</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt; 
#include &lt;LiquidCrystal_I2C.h&gt;   // http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1
#include &lt;Encoder.h&gt;             // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip 
#include &lt;OneWire.h&gt;             // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include &lt;EEPROM.h&gt;
#include &lt;MsTimer2.h&gt;            // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 

 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
 OneWire  ds(6); // Вход датчика 18b20
 Encoder myEnc(8, 9);// DT, CLK


// AD7793 x16 Umax=73mV CH1_DIFF Fads=4.17Hz
#define SCLK   2
#define CS     3
#define DIN    4
#define DOUT   5

#define AVDD_MONITOR 0b111 // CONF
#define TEMP_SENSOR  0b110 // CONF
#define CH1          0b000 // CONF
#define CH2          0b001 // CONF
#define CH3          0b011 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define GAIN_1       0b000      // CONF
#define GAIN_2       0b001      // CONF
#define GAIN_4       0b010      // CONF
#define GAIN_8       0b011      // CONF
#define GAIN_16      0b100      // CONF
#define GAIN_32      0b101      // CONF
#define GAIN_64      0b110      // CONF
#define GAIN_128     0b111      // CONF

#define F_ADC_500    0b0001 // MODE 
#define F_ADC_250    0b0010 // MODE 
#define F_ADC_125    0b0011 // MODE 
#define F_ADC_62_5   0b0100 // MODE 
#define F_ADC_50_0   0b0101 // MODE 
#define F_ADC_39_2   0b0110 // MODE
#define F_ADC_33_3   0b0111 // MODE 
#define F_ADC_19_6   0b1000 // MODE 
#define F_ADC_16_7   0b1001 // MODE 
#define F_ADC_12_5   0b1011 // MODE 
#define F_ADC_10_0   0b1100 // MODE 
#define F_ADC_8_33   0b1101 // MODE 
#define F_ADC_6_25   0b1110 // MODE  
#define F_ADC_4_17   0b1111 // MODE       

// XA K
 const float a[]{0,2.5173462*10,-1.1662878,-1.08336338,-8.9773540/10,-3.7342377/10,-8.6632643/100,-1.0450598/100,-5.1920577/10000};
 const float a1[]{0,2.508355*10,7.860106/100,-2.503131/10,8.315270/100,-1.228034/100,9.804036/10000,-4.413030/100000,1.057734/1000000,-1.052755*pow(10,-8)};
 const float a2[]{-1.318058*100,4.830222*10,-1.646031,5.464731/100,-9.6550715/10000,8.802193/1000000,-3.110810/100000000};
 // XK L
 const float b[]{1.1573067/10000,1.5884573*10,4.0458554/100,0.3170064,0.1666128,5.146958/100,9.5288883/1000,1.0301283/1000,6.0654431/100000,1.5131878/1000000};
 const float b1[]{7.2069422/1000,1.5775525*10,-0.2261183,9.4286756/1000,-3.5394655/10000,1.0050886/100000,-1.9323678/10000000,2.3816891/1000000000,-1.7130654*pow(10,-11),5.4857331*pow(10,-14)};
 
float temp_ds,u,u0,t_iz;
unsigned long times,times_enc,times_eeprom,oldPosition  = -999,newPosition;;
int menu,reg;
bool w,start=1;
/// калибровка
float gis=0.2;
float i_1ma = 1.0137;
float r_0_kall = 0.29;

void setup(){ 
  Serial.begin(9600);
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT);
  digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH);
  delay(100);
  reset();
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((UNIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER 
  write_byte(0x08,(0xC0&lt;&lt;8)|0x0A, 16);delay(10);// MODE REGISTER System Zero-Scale Calibration
  write_byte(0x08,(0xE0&lt;&lt;8)|0x0A, 16);delay(10);// MODE REGISTER System Full-Scale Calibration
  Serial.print(&quot;Stat &quot;);Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER
  Serial.print(&quot;ID   &quot;);Serial.println(read_byte(0x60,8),BIN);// ID REGISTER 
  Serial.print(&quot;Ofst &quot;);Serial.println(read_byte(0x70,24));//OFFSET REGISTER
  Serial.print(&quot;ful  &quot;);Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER 
  write_byte(0x28,0b00001011, 8);// IO REGISTER 2mA
  pinMode(10,INPUT);
  pinMode(13,OUTPUT);
  menu = EEPROM.read(0);reg = EEPROM.read(1)*256 + EEPROM.read(2);
  lcd.init();lcd.backlight();
  lcd.setCursor(5, 0);lcd.print(F(&quot;AD7793&quot;));
  delay(1000);lcd.clear();
}
 
void loop(){ 
// ENCODER ///////////////////////////////////////////////////////////////////
 if(newPosition != oldPosition){oldPosition = newPosition;
  reg=reg+newPosition;myEnc.write(0);newPosition=0;times_enc=millis();times_eeprom=millis();w=1;
  if(menu==0&amp;&amp;reg&gt;1350){reg=1350;}if(menu==0&amp;&amp;reg&lt;-270){reg=-270;}
  if(menu==1&amp;&amp;reg&gt;800){reg=800;}if(menu==1&amp;&amp;reg&lt;-200){reg=-200;}
  if(menu==2&amp;&amp;reg&gt;850){reg=850;}if(menu==1&amp;&amp;reg&lt;-200){reg=-200;}
  }
  
/// termopara ///////////////////  
// READ ADC //////////////////////////////////////////////////////////////////
if((millis()-times_enc&gt;1000||start==1)&amp;&amp;menu&lt;2){  
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_16)&lt;&lt;8)|0x90|CH1, 16); // CONFIGURATION REGISTER 
  long adc = read_byte(0x58,24);
  u = (1170.00/0x800000*(adc-0x800000))/16;
// BIPOLAR  
  Serial.print(&quot;Data b_B &quot;);Serial.println(adc-0x800000);//DATA REGISTER
  Serial.print(&quot;Data V_B &quot;);Serial.println((1170.00/0x800000*(adc-0x800000))/16,3);//DATA REGISTER 
// DS18B20 
  if(millis()-times&gt;10000||start==1){temp_ds = dsRead(0);times=millis();}
  start=0;
}
/// end termopara

// READ ADC //////////////////////////////////////////////////////////////////
if(millis()-times_enc&gt;1000&amp;&amp;menu&gt;1){  
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((UNIPOLAR|GAIN_1)&lt;&lt;8)|0x90|CH2, 16); // CONFIGURATION REGISTER 
  long adc = read_byte(0x58,24);
  u = (1170.00/0xFFFFFF*adc)/i_1ma/2 + r_0_kall;// 2mA
// UNIPOLAR
  Serial.print(&quot;Data b_U &quot;);Serial.println(adc);//DATA REGISTER
  Serial.print(&quot;Data V_U &quot;);Serial.println((1170.00/0xFFFFFF*adc)/1,3);//DATA REGISTER 

  
}

// LCD ///////////////////////////////////////////////////////////////////////  
  if(digitalRead(10)==LOW){menu++;EEPROM.update(0,menu);}
  if(menu&gt;2){menu=0;}
  
  lcd.setCursor(0, 1);
  if(menu&lt;2){lcd.print(u,3);lcd.print(&quot;mV  &quot;);}else{lcd.print(u,2);lcd.print(&quot; Om &quot;);}
  lcd.setCursor(10, 1);lcd.print(reg); lcd.print(&quot; &quot;);lcd.setCursor(14, 1);lcd.print(char(223)); lcd.print(&quot;C  &quot;);
  if(menu==0){txa(); lcd.setCursor(12,0);lcd.print(&quot; TXA&quot;);}
  if(menu==1){txk(); lcd.setCursor(12,0);lcd.print(&quot; TXK&quot;);}
  if(menu==2){p100(); lcd.setCursor(12,0);lcd.print(&quot;100P&quot;);}
  lcd.setCursor(0, 0);
  if(t_iz==-1000){lcd.print(&quot;LOW      &quot;);}
  else if(t_iz==10000){lcd.print(&quot;HIGH     &quot;);}
  else{lcd.print(t_iz,2);lcd.print(char(223)); lcd.print(&quot;C &quot;); }
// rele + gis ////////////////////////
  if(reg &gt;= t_iz + gis){digitalWrite(13,HIGH);lcd.setCursor(10,0);lcd.print(&quot;H&quot;);}
  if(reg &lt;= t_iz - gis){digitalWrite(13,LOW);lcd.setCursor(10,0);lcd.print(&quot;L&quot;);} 

////////////////////// eeprom ////////////////////////////////////////  
  if(w==1&amp;&amp;millis()-times_eeprom&gt;10000){ 
   EEPROM.update(1,highByte(reg)); EEPROM.update(2,lowByte(reg));w=0;}   
  delay(10);  
}

void write_byte(byte reg, long data, int bit_){
     digitalWrite(CS,LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (data &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH); 
     }
     digitalWrite(CS,HIGH);
     }

     
  long read_byte(byte reg, int bit_){
     digitalWrite(CS,LOW);
  while(digitalRead(DOUT)!=LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW); 
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  while(digitalRead(DOUT)!=LOW); 
  long data_out=0;
  long dat;
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(SCLK,HIGH);
     dat = digitalRead(DOUT);
     data_out |= (dat&lt;&lt;i); 
     }
     digitalWrite(CS,HIGH);
     return data_out; 
  }

void reset(){
     digitalWrite(CS,LOW);   
  for(int i = 31; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, HIGH);
     digitalWrite(SCLK,HIGH);
     }
     digitalWrite(CS,HIGH);
  }

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] &lt;&lt; 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
} 

void txa(){u0=u+temp_ds*0.0400;// окружающая температура 0.0400 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXA(K)
if(u0&lt;0){t_iz=(a[0]*pow(u0,0))+(a[1]*pow(u0,1))+(a[2]*pow(u0,2))+(a[3]*pow(u0,3))+(a[4]*pow(u0,4))+(a[5]*pow(u0,5))+(a[6]*pow(u0,6))+(a[7]*pow(u0,7))+(a[8]*pow(u0,8));}
if(u0&gt;=0&amp;&amp;u0&lt;=20.64){t_iz=(a1[0]*pow(u0,0))+(a1[1]*pow(u0,1))+(a1[2]*pow(u0,2))+(a1[3]*pow(u0,3))+(a1[4]*pow(u0,4))+(a1[5]*pow(u0,5))+(a1[6]*pow(u0,6))+(a1[7]*pow(u0,7))+(a1[8]*pow(u0,8))+(a1[9]*pow(u0,9));}
if(u0&gt;20.64){t_iz=(a2[0]*pow(u0,0))+(a2[1]*pow(u0,1))+(a2[2]*pow(u0,2))+(a2[3]*pow(u0,3))+(a2[4]*pow(u0,4))+(a2[5]*pow(u0,5))+(a2[6]*pow(u0,6));}
if(u&lt;-6.35){t_iz=-1000;} if(u&gt;54.9){t_iz=10000;}}
 
void txk(){u0=u+temp_ds*0.06476;// окружающая температура 0.06476 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK(L)
if(u0&lt;0){t_iz=(b[0]*pow(u0,0))+(b[1]*pow(u0,1))+(b[2]*pow(u0,2))+(b[3]*pow(u0,3))+(b[4]*pow(u0,4))+(b[5]*pow(u0,5))+(b[6]*pow(u0,6))+(b[7]*pow(u0,7))+(b[8]*pow(u0,8))+(b[9]*pow(u0,9));}
if(u0&gt;=0){t_iz=(b1[0]*pow(u0,0))+(b1[1]*pow(u0,1))+(b1[2]*pow(u0,2))+(b1[3]*pow(u0,3))+(b1[4]*pow(u0,4))+(b1[5]*pow(u0,5))+(b1[6]*pow(u0,6))+(b1[7]*pow(u0,7))+(b1[8]*pow(u0,8))+(b1[9]*pow(u0,9));}
if(u&lt;-9.49){t_iz=-1000;} if(u&gt;66.47){t_iz=10000;}
}

void p100(){if(u&gt;=100.00){t_iz=(sqrt(0.000015752961+0.0000023364*(1-u/100.00))-0.003969 )/-0.0000011682;}
if(u&lt;100.00){t_iz=251.903*(pow(u/100.00-1,1)) + 8.80035*(pow(u/100.00-1,2)) - 2.91506 *(pow(u/100.00-1,3)) + 1.67611*(pow(u/100.00-1,4));}
if(u&lt;17.24){t_iz=-1000;} if(u&gt;395.16){t_iz=10000;}
  }

void to_Timer(){newPosition = myEnc.read()/4;} </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Thu, 18 Aug 2022 09:13:50 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=6548#p6548</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=6543#p6543</link>
			<description><![CDATA[<p>AD7793 + термопара + терморегулятор</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt; 
#include &lt;LiquidCrystal_I2C.h&gt;   // http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1
#include &lt;Encoder.h&gt;             // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip 
#include &lt;OneWire.h&gt;             // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include &lt;EEPROM.h&gt;
#include &lt;MsTimer2.h&gt;            // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 

 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
 OneWire  ds(6); // Вход датчика 18b20
 Encoder myEnc(8, 9);// DT, CLK


// AD7793 x16 Umax=73mV CH1_DIFF Fads=4.17Hz
#define SCLK   2
#define CS     3
#define DIN    4
#define DOUT   5

#define AVDD_MONITOR 0b111 // CONF
#define TEMP_SENSOR  0b110 // CONF
#define CH1          0b000 // CONF
#define CH2          0b001 // CONF
#define CH3          0b011 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define GAIN_1       0b000      // CONF
#define GAIN_2       0b001      // CONF
#define GAIN_4       0b010      // CONF
#define GAIN_8       0b011      // CONF
#define GAIN_16      0b100      // CONF
#define GAIN_32      0b101      // CONF
#define GAIN_64      0b110      // CONF
#define GAIN_128     0b111      // CONF

#define F_ADC_500    0b0001 // MODE 
#define F_ADC_250    0b0010 // MODE 
#define F_ADC_125    0b0011 // MODE 
#define F_ADC_62_5   0b0100 // MODE 
#define F_ADC_50_0   0b0101 // MODE 
#define F_ADC_39_2   0b0110 // MODE
#define F_ADC_33_3   0b0111 // MODE 
#define F_ADC_19_6   0b1000 // MODE 
#define F_ADC_16_7   0b1001 // MODE 
#define F_ADC_12_5   0b1011 // MODE 
#define F_ADC_10_0   0b1100 // MODE 
#define F_ADC_8_33   0b1101 // MODE 
#define F_ADC_6_25   0b1110 // MODE  
#define F_ADC_4_17   0b1111 // MODE       

// XA K
 const float a[]{0,2.5173462*10,-1.1662878,-1.08336338,-8.9773540/10,-3.7342377/10,-8.6632643/100,-1.0450598/100,-5.1920577/10000};
 const float a1[]{0,2.508355*10,7.860106/100,-2.503131/10,8.315270/100,-1.228034/100,9.804036/10000,-4.413030/100000,1.057734/1000000,-1.052755*pow(10,-8)};
 const float a2[]{-1.318058*100,4.830222*10,-1.646031,5.464731/100,-9.6550715/10000,8.802193/1000000,-3.110810/100000000};
 // XK L
 const float b[]{1.1573067/10000,1.5884573*10,4.0458554/100,0.3170064,0.1666128,5.146958/100,9.5288883/1000,1.0301283/1000,6.0654431/100000,1.5131878/1000000};
 const float b1[]{7.2069422/1000,1.5775525*10,-0.2261183,9.4286756/1000,-3.5394655/10000,1.0050886/100000,-1.9323678/10000000,2.3816891/1000000000,-1.7130654*pow(10,-11),5.4857331*pow(10,-14)};
 
float temp_ds,u,u0,t_iz;
unsigned long times,times_enc,times_eeprom,oldPosition  = -999,newPosition;;
int menu,reg;
bool w,start=1;
float gis=0.2; // гистерезис

void setup(){ 
  Serial.begin(9600);
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT);
  digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH);
  delay(100);
  reset();
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER 
  write_byte(0x08,(0xC0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Zero-Scale Calibration
  write_byte(0x08,(0xE0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Full-Scale Calibration
  Serial.print(&quot;Stat &quot;);Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER
  Serial.print(&quot;ID   &quot;);Serial.println(read_byte(0x60,8),BIN);// ID REGISTER 
  Serial.print(&quot;Ofst &quot;);Serial.println(read_byte(0x70,24));//OFFSET REGISTER
  Serial.print(&quot;ful  &quot;);Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER 
  write_byte(0x28,0x00, 8);// IO REGISTER
  pinMode(10,INPUT);
  pinMode(13,OUTPUT);
  menu = EEPROM.read(0);reg = EEPROM.read(1)*256 + EEPROM.read(2);
  lcd.init();lcd.backlight();
  lcd.setCursor(5, 0);lcd.print(F(&quot;AD7793&quot;));
  delay(1000);lcd.clear();
}
 
void loop(){ 
// ENCODER ///////////////////////////////////////////////////////////////////
 if(newPosition != oldPosition){oldPosition = newPosition;
  reg=reg+newPosition;myEnc.write(0);newPosition=0;times_enc=millis();times_eeprom=millis();w=1;
  if(menu==0&amp;&amp;reg&gt;1350){reg=1350;}if(menu==0&amp;&amp;reg&lt;-270){reg=-270;}
  if(menu==1&amp;&amp;reg&gt;800){reg=800;}if(menu==1&amp;&amp;reg&lt;-200){reg=-200;}
  }
// READ ADC //////////////////////////////////////////////////////////////////
if(millis()-times_enc&gt;1000||start==1){  
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_16)&lt;&lt;8)|0x90|CH1, 16); // CONFIGURATION REGISTER 
  long adc = read_byte(0x58,24);
  u = (1170.00/0x800000*(adc-0x800000))/16;
// BIPOLAR  
  Serial.print(&quot;Data b_B &quot;);Serial.println(adc-0x800000);//DATA REGISTER
  Serial.print(&quot;Data V_B &quot;);Serial.println((1170.00/0x800000*(adc-0x800000))/16,3);//DATA REGISTER 
// DS18B20 
  if(millis()-times&gt;10000||start==1){temp_ds = dsRead(0);times=millis();}
  start=0;
}
// LCD ///////////////////////////////////////////////////////////////////////  
  if(digitalRead(10)==LOW){menu++;}
  if(menu&gt;1){menu=0;}
  
  lcd.setCursor(0, 1);lcd.print(u,3);lcd.print(&quot;mV  &quot;);
  lcd.setCursor(10, 1);lcd.print(reg); lcd.print(&quot; &quot;);lcd.setCursor(14, 1);lcd.print(char(223)); lcd.print(&quot;C  &quot;);
  if(menu==0){txa(); lcd.setCursor(13,0);lcd.print(&quot;TXA&quot;);EEPROM.update(0,menu);}
  if(menu==1){txk(); lcd.setCursor(13,0);lcd.print(&quot;TXK&quot;);EEPROM.update(0,menu);}
  lcd.setCursor(0, 0);
  if(t_iz==-1000){lcd.print(&quot;LOW      &quot;);}
  else if(t_iz==10000){lcd.print(&quot;HIGH     &quot;);}
  else{lcd.print(t_iz,2);lcd.print(char(223)); lcd.print(&quot;C  &quot;); }
// rele + gis ////////////////////////
  if(reg &gt;= t_iz + gis){digitalWrite(13,HIGH);lcd.setCursor(10,0);lcd.print(&quot;H&quot;);}
  if(reg &lt;= t_iz - gis){digitalWrite(13,LOW);lcd.setCursor(10,0);lcd.print(&quot;L&quot;);} 

////////////////////// eeprom ////////////////////////////////////////  
  if(w==1&amp;&amp;millis()-times_eeprom&gt;10000){ 
   EEPROM.update(1,highByte(reg)); EEPROM.update(2,lowByte(reg));w=0;}   
  delay(10);  
}

void write_byte(byte reg, long data, int bit_){
     digitalWrite(CS,LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (data &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH); 
     }
     digitalWrite(CS,HIGH);
     }

     
  long read_byte(byte reg, int bit_){
     digitalWrite(CS,LOW);
  while(digitalRead(DOUT)!=LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW); 
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  while(digitalRead(DOUT)!=LOW); 
  long data_out=0;
  long dat;
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(SCLK,HIGH);
     dat = digitalRead(DOUT);
     data_out |= (dat&lt;&lt;i); 
     }
     digitalWrite(CS,HIGH);
     return data_out; 
  }

void reset(){
     digitalWrite(CS,LOW);   
  for(int i = 31; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, HIGH);
     digitalWrite(SCLK,HIGH);
     }
     digitalWrite(CS,HIGH);
  }

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] &lt;&lt; 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
} 

void txa(){u0=u+temp_ds*0.0400;// окружающая температура 0.0400 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXA(K)
if(u0&lt;0){t_iz=(a[0]*pow(u0,0))+(a[1]*pow(u0,1))+(a[2]*pow(u0,2))+(a[3]*pow(u0,3))+(a[4]*pow(u0,4))+(a[5]*pow(u0,5))+(a[6]*pow(u0,6))+(a[7]*pow(u0,7))+(a[8]*pow(u0,8));}
if(u0&gt;=0&amp;&amp;u0&lt;=20.64){t_iz=(a1[0]*pow(u0,0))+(a1[1]*pow(u0,1))+(a1[2]*pow(u0,2))+(a1[3]*pow(u0,3))+(a1[4]*pow(u0,4))+(a1[5]*pow(u0,5))+(a1[6]*pow(u0,6))+(a1[7]*pow(u0,7))+(a1[8]*pow(u0,8))+(a1[9]*pow(u0,9));}
if(u0&gt;20.64){t_iz=(a2[0]*pow(u0,0))+(a2[1]*pow(u0,1))+(a2[2]*pow(u0,2))+(a2[3]*pow(u0,3))+(a2[4]*pow(u0,4))+(a2[5]*pow(u0,5))+(a2[6]*pow(u0,6));}
if(u&lt;-6.35){t_iz=-1000;} if(u&gt;54.9){t_iz=10000;}}
 
void txk(){u0=u+temp_ds*0.06476;// окружающая температура 0.06476 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK(L)
if(u0&lt;0){t_iz=(b[0]*pow(u0,0))+(b[1]*pow(u0,1))+(b[2]*pow(u0,2))+(b[3]*pow(u0,3))+(b[4]*pow(u0,4))+(b[5]*pow(u0,5))+(b[6]*pow(u0,6))+(b[7]*pow(u0,7))+(b[8]*pow(u0,8))+(b[9]*pow(u0,9));}
if(u0&gt;=0){t_iz=(b1[0]*pow(u0,0))+(b1[1]*pow(u0,1))+(b1[2]*pow(u0,2))+(b1[3]*pow(u0,3))+(b1[4]*pow(u0,4))+(b1[5]*pow(u0,5))+(b1[6]*pow(u0,6))+(b1[7]*pow(u0,7))+(b1[8]*pow(u0,8))+(b1[9]*pow(u0,9));}
if(u&lt;-9.49){t_iz=-1000;} if(u&gt;66.47){t_iz=10000;}
}

void to_Timer(){newPosition = myEnc.read()/4;} </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Wed, 17 Aug 2022 09:24:00 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=6543#p6543</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=6542#p6542</link>
			<description><![CDATA[<p>AD7793 + термопара</p><div class="codebox"><pre><code>#include &lt;Wire.h&gt; 
#include &lt;LiquidCrystal_I2C.h&gt;   // http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1
#include &lt;OneWire.h&gt;             // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include &lt;EEPROM.h&gt;
 LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей
 OneWire  ds(6); // Вход датчика 18b20


// AD7793 x16 Umax=73mV CH1_DIFF Fads=4.17Hz
#define SCLK   2
#define CS     3
#define DIN    4
#define DOUT   5

#define AVDD_MONITOR 0b111 // CONF
#define TEMP_SENSOR  0b110 // CONF
#define CH1          0b000 // CONF
#define CH2          0b001 // CONF
#define CH3          0b011 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define GAIN_1       0b000      // CONF
#define GAIN_2       0b001      // CONF
#define GAIN_4       0b010      // CONF
#define GAIN_8       0b011      // CONF
#define GAIN_16      0b100      // CONF
#define GAIN_32      0b101      // CONF
#define GAIN_64      0b110      // CONF
#define GAIN_128     0b111      // CONF

#define F_ADC_500    0b0001 // MODE 
#define F_ADC_250    0b0010 // MODE 
#define F_ADC_125    0b0011 // MODE 
#define F_ADC_62_5   0b0100 // MODE 
#define F_ADC_50_0   0b0101 // MODE 
#define F_ADC_39_2   0b0110 // MODE
#define F_ADC_33_3   0b0111 // MODE 
#define F_ADC_19_6   0b1000 // MODE 
#define F_ADC_16_7   0b1001 // MODE 
#define F_ADC_12_5   0b1011 // MODE 
#define F_ADC_10_0   0b1100 // MODE 
#define F_ADC_8_33   0b1101 // MODE 
#define F_ADC_6_25   0b1110 // MODE  
#define F_ADC_4_17   0b1111 // MODE       

// XA K
 const float a[]{0,2.5173462*10,-1.1662878,-1.08336338,-8.9773540/10,-3.7342377/10,-8.6632643/100,-1.0450598/100,-5.1920577/10000};
 const float a1[]{0,2.508355*10,7.860106/100,-2.503131/10,8.315270/100,-1.228034/100,9.804036/10000,-4.413030/100000,1.057734/1000000,-1.052755*pow(10,-8)};
 const float a2[]{-1.318058*100,4.830222*10,-1.646031,5.464731/100,-9.6550715/10000,8.802193/1000000,-3.110810/100000000};
 // XK L
 const float b[]{1.1573067/10000,1.5884573*10,4.0458554/100,0.3170064,0.1666128,5.146958/100,9.5288883/1000,1.0301283/1000,6.0654431/100000,1.5131878/1000000};
 const float b1[]{7.2069422/1000,1.5775525*10,-0.2261183,9.4286756/1000,-3.5394655/10000,1.0050886/100000,-1.9323678/10000000,2.3816891/1000000000,-1.7130654*pow(10,-11),5.4857331*pow(10,-14)};
 
float temp_ds,u,u0,t_iz;
unsigned long times=millis()+10000;
int menu;

void setup(){ 
  Serial.begin(9600);
  pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT);
  digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH);
  delay(100);
  reset();
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER 
  write_byte(0x08,(0xC0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Zero-Scale Calibration
  write_byte(0x08,(0xE0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Full-Scale Calibration
  Serial.print(&quot;Stat &quot;);Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER
  Serial.print(&quot;ID   &quot;);Serial.println(read_byte(0x60,8),BIN);// ID REGISTER 
  Serial.print(&quot;Ofst &quot;);Serial.println(read_byte(0x70,24));//OFFSET REGISTER
  Serial.print(&quot;ful  &quot;);Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER 
  write_byte(0x28,0x00, 8);// IO REGISTER
  pinMode(A0,INPUT_PULLUP);
  menu = EEPROM.read(0);
  lcd.init();lcd.backlight();
  lcd.setCursor(5, 0);lcd.print(F(&quot;AD7793&quot;));
  delay(1000);lcd.clear();
}
 
void loop(){ 
// READ ADC //////////////////////////////////////////////////////////////////
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_16)&lt;&lt;8)|0x90|CH1, 16); // CONFIGURATION REGISTER 
  long adc = read_byte(0x58,24);
  u = (1170.00/0x800000*(adc-0x800000))/16;
// BIPOLAR  
  Serial.print(&quot;Data b_B &quot;);Serial.println(adc-0x800000);//DATA REGISTER
  Serial.print(&quot;Data V_B &quot;);Serial.println((1170.00/0x800000*(adc-0x800000))/16,3);//DATA REGISTER 
// DS18B20 
  if(millis()-times&gt;10000){temp_ds = dsRead(0);times=millis();}
// LCD ///////////////////////////////////////////////////////////////////////  
  if(digitalRead(A0)==LOW){menu++;}
  if(menu&gt;1){menu=0;}
  
  lcd.setCursor(0, 1);lcd.print(u,3);lcd.print(&quot;mV  &quot;);
  lcd.setCursor(10, 1);lcd.print(temp_ds,1);lcd.print(char(223)); lcd.print(&quot;C  &quot;); 
  if(menu==0){txa(); lcd.setCursor(13,0);lcd.print(&quot;TXA&quot;);EEPROM.update(0,menu);}
  if(menu==1){txk(); lcd.setCursor(13,0);lcd.print(&quot;TXK&quot;);EEPROM.update(0,menu);}
  lcd.setCursor(0, 0);
  if(t_iz==-1000){lcd.print(&quot;LOW      &quot;);}
  else if(t_iz==10000){lcd.print(&quot;HIGH     &quot;);}
  else{lcd.print(t_iz,2);lcd.print(char(223)); lcd.print(&quot;C  &quot;); }
  
  delay(10);  
}

void write_byte(byte reg, long data, int bit_){
     digitalWrite(CS,LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (data &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH); 
     }
     digitalWrite(CS,HIGH);
     }

     
  long read_byte(byte reg, int bit_){
     digitalWrite(CS,LOW);
  while(digitalRead(DOUT)!=LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW); 
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  while(digitalRead(DOUT)!=LOW); 
  long data_out=0;
  long dat;
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(SCLK,HIGH);
     dat = digitalRead(DOUT);
     data_out |= (dat&lt;&lt;i); 
     }
     digitalWrite(CS,HIGH);
     return data_out; 
  }

void reset(){
     digitalWrite(CS,LOW);   
  for(int i = 31; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, HIGH);
     digitalWrite(SCLK,HIGH);
     }
     digitalWrite(CS,HIGH);
  }

float dsRead(byte x) {
  byte data[2], addr[8][8], kol = 0;
  while (ds.search(addr[kol])) {  // поиск датчиков, определение адреса и кол-ва датчиков
    kol++;
  } 
  ds.reset_search();  // Сброс поиска датчика
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0x44, 0);  // Измерение температуры с переносом данных в память
  ds.reset();         // Инициализация, выполняется сброс шины
  ds.select(addr[x]); // Обращение к датчику по адресу
  ds.write(0xBE);     // Обращение памяти
  data[0] = ds.read();// Чтение памяти byte low
  data[1] = ds.read();// Чтение памяти byte high
  float value = ((data[1] &lt;&lt; 8) | data[0]) / 16.0; return (float)value; // Расчет температуры и вывод
} 

void txa(){u0=u+temp_ds*0.0400;// окружающая температура 0.0400 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXA(K)
if(u0&lt;0){t_iz=(a[0]*pow(u0,0))+(a[1]*pow(u0,1))+(a[2]*pow(u0,2))+(a[3]*pow(u0,3))+(a[4]*pow(u0,4))+(a[5]*pow(u0,5))+(a[6]*pow(u0,6))+(a[7]*pow(u0,7))+(a[8]*pow(u0,8));}
if(u0&gt;=0&amp;&amp;u0&lt;=20.64){t_iz=(a1[0]*pow(u0,0))+(a1[1]*pow(u0,1))+(a1[2]*pow(u0,2))+(a1[3]*pow(u0,3))+(a1[4]*pow(u0,4))+(a1[5]*pow(u0,5))+(a1[6]*pow(u0,6))+(a1[7]*pow(u0,7))+(a1[8]*pow(u0,8))+(a1[9]*pow(u0,9));}
if(u0&gt;20.64){t_iz=(a2[0]*pow(u0,0))+(a2[1]*pow(u0,1))+(a2[2]*pow(u0,2))+(a2[3]*pow(u0,3))+(a2[4]*pow(u0,4))+(a2[5]*pow(u0,5))+(a2[6]*pow(u0,6));}
if(u&lt;-6.35){t_iz=-1000;} if(u&gt;54.9){t_iz=10000;}}
 
void txk(){u0=u+temp_ds*0.06476;// окружающая температура 0.06476 мВ на 1 гр.Цельсия от 0 до 40 гр.Цельсия для TXK(L)
if(u0&lt;0){t_iz=(b[0]*pow(u0,0))+(b[1]*pow(u0,1))+(b[2]*pow(u0,2))+(b[3]*pow(u0,3))+(b[4]*pow(u0,4))+(b[5]*pow(u0,5))+(b[6]*pow(u0,6))+(b[7]*pow(u0,7))+(b[8]*pow(u0,8))+(b[9]*pow(u0,9));}
if(u0&gt;=0){t_iz=(b1[0]*pow(u0,0))+(b1[1]*pow(u0,1))+(b1[2]*pow(u0,2))+(b1[3]*pow(u0,3))+(b1[4]*pow(u0,4))+(b1[5]*pow(u0,5))+(b1[6]*pow(u0,6))+(b1[7]*pow(u0,7))+(b1[8]*pow(u0,8))+(b1[9]*pow(u0,9));}
if(u&lt;-9.49){t_iz=-1000;} if(u&gt;66.47){t_iz=10000;}
}</code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Wed, 17 Aug 2022 07:31:48 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=6542#p6542</guid>
		</item>
		<item>
			<title><![CDATA[Re: AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=6534#p6534</link>
			<description><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/08/23fe8445ffa370827481e1829202e724.png" alt="http://forum.rcl-radio.ru/uploads/images/2022/08/23fe8445ffa370827481e1829202e724.png" /></span> </p><p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/08/6243ddd151b0570e6b57e1b746c459d8.png" alt="http://forum.rcl-radio.ru/uploads/images/2022/08/6243ddd151b0570e6b57e1b746c459d8.png" /></span> </p><br /><div class="codebox"><pre><code>// AD7793
#define SCLK   2
#define CS     3
#define DIN    4
#define DOUT   5

#define AVDD_MONITOR 0b111 // CONF
#define TEMP_SENSOR  0b110 // CONF
#define CH1          0b000 // CONF
#define CH2          0b001 // CONF
#define CH3          0b011 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define GAIN_1       0b000      // CONF
#define GAIN_2       0b001      // CONF
#define GAIN_4       0b010      // CONF
#define GAIN_8       0b011      // CONF
#define GAIN_16      0b100      // CONF
#define GAIN_32      0b101      // CONF
#define GAIN_64      0b110      // CONF
#define GAIN_128     0b111      // CONF

#define F_ADC_500    0b0001 // MODE 
#define F_ADC_250    0b0010 // MODE 
#define F_ADC_125    0b0011 // MODE 
#define F_ADC_62_5   0b0100 // MODE 
#define F_ADC_50_0   0b0101 // MODE 
#define F_ADC_39_2   0b0110 // MODE
#define F_ADC_33_3   0b0111 // MODE 
#define F_ADC_19_6   0b1000 // MODE 
#define F_ADC_16_7   0b1001 // MODE 
#define F_ADC_12_5   0b1011 // MODE 
#define F_ADC_10_0   0b1100 // MODE 
#define F_ADC_8_33   0b1101 // MODE 
#define F_ADC_6_25   0b1110 // MODE  
#define F_ADC_4_17   0b1111 // MODE       

void setup(){ 
  Serial.begin(9600);
  pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT);
  digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH);
  delay(100);
  reset();
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER 
  write_byte(0x08,(0xC0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Zero-Scale Calibration
  write_byte(0x08,(0xE0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Full-Scale Calibration
  Serial.print(&quot;Stat &quot;);Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER
  Serial.print(&quot;ID   &quot;);Serial.println(read_byte(0x60,8),BIN);// ID REGISTER 
  Serial.print(&quot;Ofst &quot;);Serial.println(read_byte(0x70,24));//OFFSET REGISTER
  Serial.print(&quot;ful  &quot;);Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER 
  write_byte(0x28,0x00, 8);// IO REGISTER
}
 
void loop(){ 
// READ ADC //////////////////////////////////////////////////////////////////
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_16)&lt;&lt;8)|0x90|CH1, 16); // CONFIGURATION REGISTER 
  long adc = read_byte(0x58,24);
// BIPOLAR  
  Serial.print(&quot;Data b_B &quot;);Serial.println(adc-0x800000);//DATA REGISTER
  Serial.print(&quot;Data V_B &quot;);Serial.println((1170.00/0x800000*(adc-0x800000))/16,3);//DATA REGISTER 
  delay(500);  
}

void write_byte(byte reg, long data, int bit_){
     digitalWrite(CS,LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (data &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH); 
     }
     digitalWrite(CS,HIGH);
     }

     
  long read_byte(byte reg, int bit_){
     digitalWrite(CS,LOW);
  while(digitalRead(DOUT)!=LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW); 
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  while(digitalRead(DOUT)!=LOW); 
  long data_out=0;
  long dat;
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(SCLK,HIGH);
     dat = digitalRead(DOUT);
     data_out |= (dat&lt;&lt;i); 
     }
     digitalWrite(CS,HIGH);
     return data_out; 
  }

void reset(){
     digitalWrite(CS,LOW);   
  for(int i = 31; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, HIGH);
     digitalWrite(SCLK,HIGH);
     }
     digitalWrite(CS,HIGH);
  }
 </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Tue, 16 Aug 2022 07:21:18 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=6534#p6534</guid>
		</item>
		<item>
			<title><![CDATA[AD7793]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=6528#p6528</link>
			<description><![CDATA[<p><span class="postimg"><img src="http://forum.rcl-radio.ru/uploads/images/2022/08/cf7006c4144ade5d2d4fb6e4a7103eec.png" alt="http://forum.rcl-radio.ru/uploads/images/2022/08/cf7006c4144ade5d2d4fb6e4a7103eec.png" /></span> </p><br /><div class="codebox"><pre><code>// AD7793
#define SCLK   2
#define CS     3
#define DIN    4
#define DOUT   5

#define AVDD_MONITOR 0b111 // CONF
#define TEMP_SENSOR  0b110 // CONF
#define CH1          0b000 // CONF
#define CH2          0b001 // CONF
#define CH3          0b011 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define BIPOLAR      0b00000000 // CONF
#define UNIPOLAR     0b00010000 // CONF
#define GAIN_1       0b000      // CONF
#define GAIN_2       0b001      // CONF
#define GAIN_4       0b010      // CONF
#define GAIN_8       0b011      // CONF
#define GAIN_16      0b100      // CONF
#define GAIN_32      0b101      // CONF
#define GAIN_64      0b110      // CONF
#define GAIN_128     0b111      // CONF

#define F_ADC_500    0b0001 // MODE 
#define F_ADC_250    0b0010 // MODE 
#define F_ADC_125    0b0011 // MODE 
#define F_ADC_62_5   0b0100 // MODE 
#define F_ADC_50_0   0b0101 // MODE 
#define F_ADC_39_2   0b0110 // MODE
#define F_ADC_33_3   0b0111 // MODE 
#define F_ADC_19_6   0b1000 // MODE 
#define F_ADC_16_7   0b1001 // MODE 
#define F_ADC_12_5   0b1011 // MODE 
#define F_ADC_10_0   0b1100 // MODE 
#define F_ADC_8_33   0b1101 // MODE 
#define F_ADC_6_25   0b1110 // MODE  
#define F_ADC_4_17   0b1111 // MODE       

void setup(){ 
  Serial.begin(9600);
  pinMode(SCLK,OUTPUT);pinMode(CS,OUTPUT);pinMode(DIN,OUTPUT);pinMode(DOUT,INPUT);
  digitalWrite(SCLK,HIGH);digitalWrite(CS,HIGH);digitalWrite(DIN,HIGH);
  delay(100);
  reset();
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER 
  write_byte(0x08,(0xC0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Zero-Scale Calibration
  write_byte(0x08,(0xE0&lt;&lt;8)|0x0A, 16);// MODE REGISTER System Full-Scale Calibration
  Serial.print(&quot;Stat &quot;);Serial.println(read_byte(0x40,8),BIN);// STATUS REGISTER
  Serial.print(&quot;ID   &quot;);Serial.println(read_byte(0x60,8),BIN);// ID REGISTER 
  Serial.print(&quot;Ofst &quot;);Serial.println(read_byte(0x70,24));//OFFSET REGISTER
  Serial.print(&quot;ful  &quot;);Serial.println(read_byte(0x78,24));//OFULL-SCALE REGISTER 
  write_byte(0x28,0x00, 8);// IO REGISTER
}
 
void loop(){ 
// READ ADC //////////////////////////////////////////////////////////////////
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|CH1, 16); // CONFIGURATION REGISTER 
  long adc = read_byte(0x58,24);
// BIPOLAR  
  Serial.print(&quot;Data b_B &quot;);Serial.println(adc-0x800000);//DATA REGISTER
  Serial.print(&quot;Data V_B &quot;);Serial.println((1.17/0x800000*(adc-0x800000)),6);//DATA REGISTER 
// UNIPOLAR
//  Serial.print(&quot;Data b_U &quot;);Serial.println(adc);//DATA REGISTER
//  Serial.print(&quot;Data V_U &quot;);Serial.println((1.17/0xFFFFFF*adc),6);//DATA REGISTER 
  Serial.println();
  delay(5);

// READ AVDD ///////////////////////////////////////////////////////////////////  
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|AVDD_MONITOR, 16); // CONFIGURATION REGISTER
    adc = read_byte(0x58,24);
// BIPOLAR  
  Serial.print(&quot;Data AV b_B &quot;);Serial.println(adc-0x800000);//DATA REGISTER
  Serial.print(&quot;Data AV V_B &quot;);Serial.println((1.17/0x800000*(adc-0x800000)*6),4);//DATA REGISTER 
  Serial.println();
  delay(5);

// TEMP SENSOR ///////////////////////////////////////////////////////////////////  
  write_byte(0x08,(0x20&lt;&lt;8)|F_ADC_4_17, 16);// MODE REGISTER
  write_byte(0x10,((BIPOLAR|GAIN_1)&lt;&lt;8)|0x90|TEMP_SENSOR, 16); // CONFIGURATION REGISTER
    adc = read_byte(0x58,24);
// BIPOLAR  
  Serial.print(&quot;Data T b_B &quot;);Serial.println(adc-0x800000);//DATA REGISTER
  Serial.print(&quot;Data T V_B &quot;);Serial.println(1.170/0x800000*(adc-0x800000),4);//DATA REGISTER 
  Serial.println();
  delay(1000);  
}

void write_byte(byte reg, long data, int bit_){
     digitalWrite(CS,LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, (data &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH); 
     }
     digitalWrite(CS,HIGH);
     }

     
  long read_byte(byte reg, int bit_){
     digitalWrite(CS,LOW);
  while(digitalRead(DOUT)!=LOW); 
  for(int i = 7; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW); 
     digitalWrite(DIN, (reg &gt;&gt; i) &amp; 1);
     digitalWrite(SCLK,HIGH);
     }
  while(digitalRead(DOUT)!=LOW); 
  long data_out=0;
  long dat;
  for(int i = bit_-1; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(SCLK,HIGH);
     dat = digitalRead(DOUT);
     data_out |= (dat&lt;&lt;i); 
     }
     digitalWrite(CS,HIGH);
     return data_out; 
  }

void reset(){
     digitalWrite(CS,LOW);   
  for(int i = 31; i &gt;= 0; i--){
     digitalWrite(SCLK,LOW);
     digitalWrite(DIN, HIGH);
     digitalWrite(SCLK,HIGH);
     }
     digitalWrite(CS,HIGH);
  }
 </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 12 Aug 2022 09:56:20 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=6528#p6528</guid>
		</item>
	</channel>
</rss>
