<?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; LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
		<link>http://forum.rcl-radio.ru/viewtopic.php?id=257</link>
		<atom:link href="http://forum.rcl-radio.ru/extern.php?action=feed&amp;tid=257&amp;type=rss" rel="self" type="application/rss+xml" />
		<description><![CDATA[Недавние сообщения в теме «LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ».]]></description>
		<lastBuildDate>Fri, 05 Apr 2024 06:25:39 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=10052#p10052</link>
			<description><![CDATA[<p>Добрый день. Можно заменить дисплей 1602, на oled 128X64. 1602 не помещается в корпусе. Спасибо.</p>]]></description>
			<author><![CDATA[null@example.com (And-75913691)]]></author>
			<pubDate>Fri, 05 Apr 2024 06:25:39 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=10052#p10052</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7454#p7454</link>
			<description><![CDATA[<p><a href="http://forum.rcl-radio.ru/viewtopic.php?pid=7443#p7443">http://forum.rcl-radio.ru/viewtopic.php?pid=7443#p7443</a></p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Tue, 07 Mar 2023 16:07:11 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7454#p7454</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7395#p7395</link>
			<description><![CDATA[<div class="codebox"><pre><code>if(millis()-times_ads&gt;100){times_ads=millis();ads_i++;i_sum = i_sum + analogRead(A0)/250.00*i_k_r;}
  if(ads_i&gt;9){ads_i=0;i = i_sum/10;i_sum=0;}</code></pre></div><p>Можно поменять интервал измерения, сейчас 100 мс, кол-во измерений, сейчас 10</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Mon, 20 Feb 2023 18:11:55 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7395#p7395</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7394#p7394</link>
			<description><![CDATA[<p>Усреднение работает, &quot;дребезг&quot; показаний пропал. Параметры усреднения как то можно менять в коде?</p>]]></description>
			<author><![CDATA[null@example.com (Sergey-77)]]></author>
			<pubDate>Mon, 20 Feb 2023 15:25:01 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7394#p7394</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7385#p7385</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>Выставил на экране 2А, в мониторе порта при этом выводится 3277</p></blockquote></div><p>Вы подобрали коэффициент const float i_k = 4.999; ?<br />Если нет то нужно на выходе получить стабилизированный ток примерно 2 А, из мерить его и опубликовать число из монитора порта. Но можно подобрать коэффициент методом подбора.</p><p>Я сделал усреднение измерения</p><div class="codebox"><pre><code>#define ADDR_MCP_U 0x60
#define ADDR_MCP_I 0x61

#include &lt;Wire.h&gt;
#include &lt;EEPROM.h&gt;
#include &lt;Encoder.h&gt;  // http://rcl-radio.ru/wp-content/uploads/ … ncoder.zip
#include &lt;MsTimer2.h&gt; // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include &lt;LiquidCrystal_I2C.h&gt; // http://forum.rcl-radio.ru/misc.php?acti … download=1
Encoder myEnc(8, 9);//CLK, DT
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей

unsigned long times,oldPosition  = -999,newPosition,times_ads;
int u_out,u_dig,menu,i_out,i_dig;
const float u_k = 8.22; // калибровка регулятора напряжения
const float i_k = 4.999; // калибровка регулятора тока

const float i_k_r = 0.607;// калибровка измерителя тока
const float r = 0.01;   // сопротивление шунта
float i,i_sum;
byte w;
int ads_i;

void setup(){
  Wire.begin();lcd.init();lcd.backlight();
  Serial.begin(9600);
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  pinMode(10,INPUT);//  SW энкодер MENU
  pinMode(A0,INPUT); // input I
  u_out=EEPROM.read(0)*256+EEPROM.read(1);i_out=EEPROM.read(2);
  }

void loop(){
  reg_u(); 
  reg_i(); 
  if(millis()-times_ads&gt;100){times_ads=millis();ads_i++;i_sum = i_sum + analogRead(A0)/250.00*i_k_r;}
  if(ads_i&gt;9){ads_i=0;i = i_sum/10;i_sum=0;}
  if(digitalRead(10)==LOW){menu++;if(menu&gt;1){menu=0;}delay(200);}

  //////// set out 0-28 V
  if(menu==0){
  if (newPosition != oldPosition){oldPosition = newPosition;
     u_out=u_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     if(u_out&lt;0){u_out=0;}if(u_out&gt;280){u_out=280;}u_dig = float(u_out/10.00)/u_k*4096/5.00;}
     Serial.print(&quot;U_DATA &quot;);Serial.println(u_dig);
     }

  //////// set i 0-2.5 A
  if(menu==1){
  if (newPosition != oldPosition){oldPosition = newPosition;
     i_out=i_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     if(i_out&lt;0){i_out=0;}if(i_out&gt;250){i_out=250;}i_dig = float(i_out/10.00)/i_k*4096/5.00;}
     Serial.print(&quot;I_DATA &quot;);Serial.println(i_dig);
     }

  //////// lcd
  lcd.setCursor(0, 0);if(menu==0){lcd.print(&quot;U*= &quot;);}else{lcd.print(&quot;U = &quot;);}if(u_out&lt;100){lcd.print(&quot; &quot;);}
  lcd.print(float(u_out/10.00),1);lcd.print(&quot; V &quot;); 
  
  lcd.setCursor(11, 0);lcd.print(abs(i),2);lcd.print(&quot;A&quot;);
  
  lcd.setCursor(0, 1);if(menu==1){lcd.print(&quot;A*= &quot;);}else{lcd.print(&quot;I = &quot;);}lcd.print(float(i_out/100.00),2);lcd.print(&quot; A &quot;);

  //////////////// EEPROM
  if(millis()-times&gt;5000&amp;&amp;w==1){EEPROM.update(0,highByte(u_out));EEPROM.update(1,lowByte(u_out));EEPROM.update(2,i_out);menu=0;times=millis();w=0;}
  }//loop

void reg_i(){MCP4725(ADDR_MCP_I,i_dig);}
void reg_u(){MCP4725(ADDR_MCP_U,u_dig);}

void to_Timer(){newPosition = myEnc.read()/4;}

void MCP4725(byte addr,int data){ 
  byte buffer[3];
  buffer[0] = 0b01000000;
  // data=0;
  // buffer[0] = 0b01100000; // запись в память ЦАП 0 В
  buffer[1] = data &gt;&gt; 4;             
  buffer[2] = data &lt;&lt; 4;
  Wire.beginTransmission(addr);
  Wire.write(buffer[0]);
  Wire.write(buffer[1]);
  Wire.write(buffer[2]);
  Wire.endTransmission();
  } </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sun, 19 Feb 2023 09:15:43 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7385#p7385</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7383#p7383</link>
			<description><![CDATA[<div class="quotebox"><cite>liman324 пишет:</cite><blockquote><p>Есть три варианта:</p><p>Перейти на LGT8F328P, 12 бит АЦП точность увеличится в 4 раза.</p><p>Использовать внешний АЦП, например MCP3421 18 бит, доступны будут даже единицы мА</p><p>Оставить адуино с 10 бит АЦП, но сделать усреднение измерения. Сделать 10 измерений в течении секунды и выводить среднее значение, стабильность показаний однозначно возрастет.</p></blockquote></div><p>LGT8F328P заказал, приедет в начале апреля;</p><p>МСР3421 у меня в наличии нет, только если заказывать; </p><p>По усреднению, сейчас еще поэкспериментировал, в режиме ограничения тока цифры настолько быстро меняются что их сложно разобрать, поэтому если это не сложно сделайте усреднение.</p><p>Цель: точность 10 мА в уставке защиты и показаниях на экране.<br /> </p><div class="quotebox"><blockquote><p>можно сразу указать его, но для этого Вам нужно выставить на выходе ровно 2 А и написать мне цифровое значение ЦАП при этом токе.</p></blockquote></div><p>const float u_k&nbsp; откалибровал = 8,22<br />const float i_k_r откалибровал = 0.607</p><p>Выставил на экране 2А, в мониторе порта при этом выводится 3277</p>]]></description>
			<author><![CDATA[null@example.com (Sergey-77)]]></author>
			<pubDate>Sat, 18 Feb 2023 14:59:22 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7383#p7383</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7382#p7382</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>-Ток меньше выставленной уставки: измеряемое значение тока постоянно меняется сотые доли (можно от этого эффекта как то избавиться?)</p></blockquote></div><p>Есть три варианта:</p><p>Перейти на LGT8F328P, 12 бит АЦП точность увеличится в 4 раза.</p><p>Использовать внешний АЦП, например MCP3421 18 бит, доступны будут даже единицы мА</p><p>Оставить адуино с 10 бит АЦП, но сделать усреднение измерения. Сделать 10 измерений в течении секунды и выводить среднее значение, стабильность показаний однозначно возрастет.</p><p> </p><div class="quotebox"><blockquote><p>- Ток больше выставленной уставки: изменяемое значение тока также меняется,&nbsp; и плюс выставлено значение 0,22А а ограниченное значение составляет 0,12А</p></blockquote></div><p>1. калибровка напряжения строка - const float u_k = 5.600; // калибровка регулятора напряжения<br />нужно подобрать коэффициент, но можно сразу указать его, но для этого Вам нужно выставить на выходе ровно 20 В и написать мне цифровое значение ЦАП при этом напряжении.</p><p>2. откалибровать измеритель тока - const float i_k_r = 0.975;// калибровка измерителя тока</p><p>3. калибровка регулятора тока, проводить только после калибровки измерителя тока - const float i_k = 4.999; // калибровка регулятора тока</p><p>можно сразу указать его, но для этого Вам нужно выставить на выходе ровно 2 А и написать мне цифровое значение ЦАП при этом токе.</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Sat, 18 Feb 2023 03:34:16 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7382#p7382</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7381#p7381</link>
			<description><![CDATA[<p>Как работает измерение тока и защита:<br />-Ток меньше выставленной уставки: измеряемое значение тока постоянно меняется сотые доли (можно от этого эффекта как то избавиться?)<br />- Ток больше выставленной уставки: изменяемое значение тока также меняется,&nbsp; и плюс выставлено значение 0,22А а ограниченное значение составляет 0,12А</p>]]></description>
			<author><![CDATA[null@example.com (Sergey-77)]]></author>
			<pubDate>Fri, 17 Feb 2023 17:41:35 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7381#p7381</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7380#p7380</link>
			<description><![CDATA[<div class="quotebox"><cite>liman324 пишет:</cite><blockquote><p>Напряжение на ЦАПах меняется от 0 до 5В ?</p></blockquote></div><p>По току да от 0 до 5В, по напряжению от 0 до 3,2&nbsp; потому что я предел 32 вольта поставил</p>]]></description>
			<author><![CDATA[null@example.com (Sergey-77)]]></author>
			<pubDate>Fri, 17 Feb 2023 17:35:16 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7380#p7380</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7379#p7379</link>
			<description><![CDATA[<p>Напряжение на ЦАПах меняется от 0 до 5В ?</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 17 Feb 2023 17:05:12 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7379#p7379</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7378#p7378</link>
			<description><![CDATA[<p>Про то что нужно перейти в регулировку тока не догадался) Все выводится, адрес верный, значение 4095 не превышается.</p>]]></description>
			<author><![CDATA[null@example.com (Sergey-77)]]></author>
			<pubDate>Fri, 17 Feb 2023 17:01:28 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7378#p7378</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7377#p7377</link>
			<description><![CDATA[<div class="quotebox"><blockquote><p>в порт выводится только значение &quot;U&quot;,</p></blockquote></div><p>Если перейти в регулировку тока должен выводится значение I (у меня выводится)</p><div class="quotebox"><blockquote><p>адрес второго ЦАПа удалось установить только 0х61</p></blockquote></div><p>Это верный адрес?</p><p>Рекомендую проверить сканером адресов-http://forum.rcl-radio.ru/viewtopic.php?id=64</p><p>На платке ЦАП должны быть перемычки для смены адреса</p>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 17 Feb 2023 16:55:19 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7377#p7377</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7376#p7376</link>
			<description><![CDATA[<p>в порт выводится только значение &quot;U&quot;, адрес второго ЦАПа удалось установить только 0х61</p>]]></description>
			<author><![CDATA[null@example.com (Sergey-77)]]></author>
			<pubDate>Fri, 17 Feb 2023 16:40:34 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7376#p7376</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7375#p7375</link>
			<description><![CDATA[<p>Убрал токовую защиту.</p><p>Подключите второй ЦАП, посмотрите его адрес в i2C сканере, он должен отличатся от первого ЦАП, запишите адрес второго ЦАПа в строке:</p><p>#define ADDR_MCP_I 0x62</p><p>В мониторе порта выводится цифровое значение подаваемое на ЦАПы, оно не должно превышать 4095 что равно 5 В на выходе.</p><div class="codebox"><pre><code>#define ADDR_MCP_U 0x60
#define ADDR_MCP_I 0x62

#include &lt;Wire.h&gt;
#include &lt;EEPROM.h&gt;
#include &lt;Encoder.h&gt;  // http://rcl-radio.ru/wp-content/uploads/ … ncoder.zip
#include &lt;MsTimer2.h&gt; // http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip
#include &lt;LiquidCrystal_I2C.h&gt; // http://forum.rcl-radio.ru/misc.php?acti … download=1
Encoder myEnc(8, 9);//CLK, DT
LiquidCrystal_I2C lcd(0x27,16,2);  // Устанавливаем дисплей

unsigned long times,oldPosition  = -999,newPosition;
int u_out,u_dig,menu,i_out,i_dig;
const float u_k = 5.600; // калибровка регулятора напряжения
const float i_k = 4.999; // калибровка регулятора тока

const float i_k_r = 0.975;// калибровка измерителя тока
const float r = 0.01;   // сопротивление шунта
float i;
byte w;

void setup(){
  Wire.begin();lcd.init();lcd.backlight();
  Serial.begin(9600);
  MsTimer2::set(1, to_Timer);MsTimer2::start();
  pinMode(10,INPUT);//  SW энкодер MENU
  pinMode(A0,INPUT); // input I
  u_out=EEPROM.read(0)*256+EEPROM.read(1);i_out=EEPROM.read(2);
  }

void loop(){
  reg_u(); 
  reg_i(); 
  i = analogRead(A0)/250.00*i_k_r;
  if(digitalRead(10)==LOW){menu++;if(menu&gt;1){menu=0;}delay(200);}

  //////// set out 0-28 V
  if(menu==0){
  if (newPosition != oldPosition){oldPosition = newPosition;
     u_out=u_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     if(u_out&lt;0){u_out=0;}if(u_out&gt;280){u_out=280;}u_dig = float(u_out/10.00)/u_k*4096/5.00;}
     Serial.print(&quot;U_DATA &quot;);Serial.println(u_dig);
     }

  //////// set i 0-2.5 A
  if(menu==1){
  if (newPosition != oldPosition){oldPosition = newPosition;
     i_out=i_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;
     if(i_out&lt;0){i_out=0;}if(i_out&gt;250){i_out=250;}i_dig = float(i_out/10.00)/i_k*4096/5.00;}
     Serial.print(&quot;I_DATA &quot;);Serial.println(i_dig);
     }

  //////// lcd
  lcd.setCursor(0, 0);if(menu==0){lcd.print(&quot;U*= &quot;);}else{lcd.print(&quot;U = &quot;);}if(u_out&lt;100){lcd.print(&quot; &quot;);}
  lcd.print(float(u_out/10.00),1);lcd.print(&quot; V &quot;); 
  
  lcd.setCursor(11, 0);lcd.print(abs(i),2);lcd.print(&quot;A&quot;);
  
  lcd.setCursor(0, 1);if(menu==1){lcd.print(&quot;A*= &quot;);}else{lcd.print(&quot;I = &quot;);}lcd.print(float(i_out/100.00),2);lcd.print(&quot; A &quot;);

  //////////////// EEPROM
  if(millis()-times&gt;5000&amp;&amp;w==1){EEPROM.update(0,highByte(u_out));EEPROM.update(1,lowByte(u_out));EEPROM.update(2,i_out);menu=0;times=millis();w=0;}
  }//loop

void reg_i(){MCP4725(ADDR_MCP_I,i_dig);}
void reg_u(){MCP4725(ADDR_MCP_U,u_dig);}

void to_Timer(){newPosition = myEnc.read()/4;}

void MCP4725(byte addr,int data){ 
  byte buffer[3];
  buffer[0] = 0b01000000;
  // data=0;
  // buffer[0] = 0b01100000; // запись в память ЦАП 0 В
  buffer[1] = data &gt;&gt; 4;             
  buffer[2] = data &lt;&lt; 4;
  Wire.beginTransmission(addr);
  Wire.write(buffer[0]);
  Wire.write(buffer[1]);
  Wire.write(buffer[2]);
  Wire.endTransmission();
  } </code></pre></div>]]></description>
			<author><![CDATA[null@example.com (liman324)]]></author>
			<pubDate>Fri, 17 Feb 2023 13:52:14 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7375#p7375</guid>
		</item>
		<item>
			<title><![CDATA[Re: LM723 + ARDUINO = ИСТОЧНИК ПИТАНИЯ 0-28В 0-2.5А С ЗАЩИТОЙ ПО ТОКУ]]></title>
			<link>http://forum.rcl-radio.ru/viewtopic.php?pid=7368#p7368</link>
			<description><![CDATA[<p>Для теста брал этот скетч с первой страницы:<br />#include &lt;Wire.h&gt;<br />#include &lt;EEPROM.h&gt;<br />#include &lt;Encoder.h&gt;&nbsp; // <a href="http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip">http://rcl-radio.ru/wp-content/uploads/ … ncoder.zip</a><br />#include &lt;MsTimer2.h&gt; // <a href="http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip">http://rcl-radio.ru/wp-content/uploads/ … Timer2.zip</a><br />#include &lt;LiquidCrystal_I2C.h&gt; // <a href="http://forum.rcl-radio.ru/misc.php?action=pan_download&amp;item=45&amp;download=1">http://forum.rcl-radio.ru/misc.php?acti … download=1</a><br /> Encoder myEnc(8, 9);//CLK, DT<br /> LiquidCrystal_I2C lcd(0x27,16,2);&nbsp; // Устанавливаем дисплей </p><p> unsigned long times,oldPosition&nbsp; = -999,newPosition;<br /> int u_out,u_dig,menu,i_out;<br /> const float u_k = 7.10; // калибровка регулятора напряжения<br /> const float i_k = 0.975;// калибровка измерителя тока <br /> const float r = 0.01;&nbsp; &nbsp;// сопротивление шунта<br /> byte power = 1; // при подачи питания выходное напряжение 0 В - OFF<br /> float i;<br /> byte w;</p><p>void setup(){<br />&nbsp; Wire.begin();lcd.init();lcd.backlight();<br />&nbsp; MsTimer2::set(1, to_Timer);MsTimer2::start();<br />&nbsp; pinMode(10,INPUT);//&nbsp; SW энкодер MENU<br />&nbsp; pinMode(2,INPUT_PULLUP); // кнопка ON/OFF<br />&nbsp; pinMode(A0,INPUT); // input I<br />&nbsp; u_out=EEPROM.read(0)*256+EEPROM.read(1);i_out=EEPROM.read(2);<br />&nbsp; }</p><p>void loop(){i_kz();<br />&nbsp; if(digitalRead(10)==LOW){menu++;if(menu&gt;1){menu=0;}delay(200);}<br />&nbsp; if(digitalRead(2)==LOW&amp;&amp;power==0){power = 1;delay(200);}<br />&nbsp; if(digitalRead(2)==LOW&amp;&amp;power==1){power = 0;delay(200);}<br />&nbsp; //////// set out 0-28 V<br />&nbsp; if(menu==0){<br />&nbsp; if (newPosition != oldPosition){oldPosition = newPosition;<br />&nbsp; &nbsp; &nbsp;u_out=u_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;<br />&nbsp; &nbsp; &nbsp;if(u_out&lt;0){u_out=0;}if(u_out&gt;280){u_out=280;}u_dig = float(u_out/10.00)/u_k*4096/5.00;}}<br />&nbsp; //////// set i 0-2.5 A<br />&nbsp; if(menu==1){<br />&nbsp; if (newPosition != oldPosition){oldPosition = newPosition;<br />&nbsp; &nbsp; &nbsp;i_out=i_out+newPosition;myEnc.write(0);newPosition=0;times=millis();w=1;<br />&nbsp; &nbsp; &nbsp;if(i_out&lt;0){i_out=0;}if(i_out&gt;250){i_out=250;}}}</p><p>&nbsp; //////// lcd<br />&nbsp; i_kz();<br />&nbsp; lcd.setCursor(0, 0);if(menu==0){lcd.print(&quot;U*= &quot;);}else{lcd.print(&quot;U = &quot;);}if(u_out&lt;100){lcd.print(&quot; &quot;);}<br />&nbsp; lcd.print(float(u_out/10.00),1);lcd.print(&quot; V &quot;);&nbsp; <br />&nbsp; lcd.setCursor(11, 0);lcd.print(abs(i),2);lcd.print(&quot;A&quot;);<br />&nbsp; lcd.setCursor(0, 1);if(menu==1){lcd.print(&quot;A*= &quot;);}else{lcd.print(&quot;I = &quot;);}lcd.print(float(i_out/100.00),2);lcd.print(&quot; A &quot;);<br />&nbsp; i_kz();</p><p>&nbsp; //////////////// EEPROM<br />&nbsp; if(millis()-times&gt;5000&amp;&amp;w==1){EEPROM.update(0,highByte(u_out));EEPROM.update(1,lowByte(u_out));EEPROM.update(2,i_out);menu=0;times=millis();w=0;}<br />&nbsp; }//loop</p><p>void MCP4725(int data){&nbsp; <br />&nbsp; byte buffer[3];<br />&nbsp; buffer[0] = 0b01000000;<br />&nbsp; // data=0;<br />&nbsp; // buffer[0] = 0b01100000; // запись в память ЦАП 0 В <br />&nbsp; buffer[1] = data &gt;&gt; 4;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />&nbsp; buffer[2] = data &lt;&lt; 4;<br />&nbsp; Wire.beginTransmission(0x60);<br />&nbsp; Wire.write(buffer[0]);<br />&nbsp; Wire.write(buffer[1]);<br />&nbsp; Wire.write(buffer[2]);<br />&nbsp; Wire.endTransmission();<br />&nbsp; }&nbsp; <br />void i_kz(){&nbsp; <br />&nbsp; i = analogRead(A0)/250.00*i_k;<br />&nbsp; if(i &gt; float(i_out/100.0)){MCP4725(0);lcd.setCursor(12, 1);lcd.print(&quot;ERR&quot;);delay(3000);power=1;}<br />&nbsp; else{lcd.setCursor(12, 1);<br />&nbsp; if(power==0){MCP4725(u_dig+i*4.00);lcd.print(&quot;ON &quot;);}<br />&nbsp; if(power==1){MCP4725(0);lcd.print(&quot;OFF&quot;);}<br />&nbsp; }}</p><p>void to_Timer(){newPosition = myEnc.read()/4;}</p>]]></description>
			<author><![CDATA[null@example.com (Sergey-77)]]></author>
			<pubDate>Wed, 15 Feb 2023 16:10:44 +0000</pubDate>
			<guid>http://forum.rcl-radio.ru/viewtopic.php?pid=7368#p7368</guid>
		</item>
	</channel>
</rss>
