26

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Создал новую учетную запись и все прочие. Компиляция и запись со второй попытки прошли успешно, соберу в схему посмотрю что и как. А пока скрин.http://forum.rcl-radio.ru/uploads/images/2025/01/07d368a3d223fb44a032bce925acf138.png

27

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Похоже у меня дисплей тоже, прислали с SSD1306. Но беда в том что пк не видит ардуинку.Что можно сделать? Искать подходящий дисплей? или можно как то справится.

28

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);    // I2C / TWI

29

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Перезалил, ордуинка увиделась. Но на экране все тоже.http://forum.rcl-radio.ru/uploads/images/2025/01/086fcd5875a5c409ffba8b0b6e824cf5.jpg
А вот сам дисплей.http://forum.rcl-radio.ru/uploads/images/2025/01/fe0786f664d5a73ca6802fe6a0cc8db2.jpg

30 (2025-01-30 18:17:42 отредактировано neganov.vick)

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Делал так, скопировал с форума, в скетче строку удалил, А новую вставил. Пере прошил. Еще, пробовал другую библиотеку. вывод тот же.

31

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

http://forum.rcl-radio.ru/uploads/images/2025/01/4990f9a1ac4eca7e261efb47bde94d76.jpg

В такой комплектации должен работать или все таки нужно собрать полностью.

32

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Загрузите I2C сканер, посмотрите определяется ли адрес дисплея

#include <Wire.h>

void setup() {
  Wire.begin();

  Serial.begin(9600);
  while (!Serial); // Leonardo: wait for serial monitor
  Serial.println("\nI2C Scanner");
}

void loop() {
  int nDevices = 0;

  Serial.println("Scanning...");

  for (byte address = 1; address < 127; ++address) {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    byte error = Wire.endTransmission();

    if (error == 0) {
      Serial.print("I2C device found at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.print(address, HEX);
      Serial.println("  !");

      ++nDevices;
    } else if (error == 4) {
      Serial.print("Unknown error at address 0x");
      if (address < 16) {
        Serial.print("0");
      }
      Serial.println(address, HEX);
    }
  }
  if (nDevices == 0) {
    Serial.println("No I2C devices found\n");
  } else {
    Serial.println("done\n");
  }
  delay(5000); // Wait 5 seconds for next scan
}

33

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

По ходуду определился.

http://forum.rcl-radio.ru/uploads/images/2025/01/e0fb838557d661aece4ca7f020d1beb4.png

34

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

#define NULLL  3248*2
#define MV30   5052*2

#include <Wire.h>
#include <EEPROM.h>
#include <MsTimer2.h>           // http://rcl-radio.ru/wp-content/uploads/2018/11/MsTimer2.zip 
#include <Encoder.h>            // http://rcl-radio.ru/wp-content/uploads/2019/05/Encoder.zip 
#include <U8glib.h> 
#include <OneWire.h>            // http://rcl-radio.ru/wp-content/uploads/2018/07/OneWire.zip
#include <iarduino_KB.h>        // https://github.com/tremaru/iarduino_KB.git
iarduino_KB KB(8,7,6,5, 4,3,2);
Encoder myEnc(11, 12);// DT, CLK
OneWire  ds1(13); // Вход датчика 18b20
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);  // Fast I2C / TWI 
long oldPosition  = 999,newPosition, times, times1,times_ds=10000,times14,save,times_off,k_0,k_30;
bool w,ttt=0;
byte ok,reg;
int menu;
float out = 0,e,temp,t_ok,t_ok_mv,temp_old,k_ok;
long code[5],ccc;
int i,i1,kb;
/// xa
float a[] = {0,3.9450128025*pow(10,-2),2.3622373598*pow(10,-5),-3.2858906784*pow(10,-7),-4.9904828777*pow(10,-9),
6.7509059173*pow(10,-11),-5.7410327428*pow(10,-13),-3.1088872894*pow(10,-15),-1.0451609365*pow(10,-17),
-1.9889266878*pow(10,-20), -1.6322697486*pow(10,-23)};
float b[] = {-1.7600413686*pow(10, -2),3.8921204975 *pow(10, -2),1.8558770032 *pow(10, -5),-9.9457592874 *pow(10, -8),
3.1840945719 *pow(10, -10),-5.6072844889 *pow(10, -13),5.6075059059 *pow(10, -16),-3.2020720003 *pow(10, -19),
9.7151147152 *pow(10, -23),-1.2104721275 *pow(10, -26)};
float c[] = {1.185976 *pow(10, -1),-1.183432 *pow(10, -4)};
float logg=2.718281828;int u=30;
/// xk
float a1[] = {-4.1626930*pow(10,-6),6.3310880*pow(10,-2),6.0118088*pow(10,-5),-7.9469796*pow(10,-8),9.3101891*pow(10,-11),
-2.4299630*pow(10,-14),-2.6547176*pow(10,-16),4.4332477*pow(10,-19),-2.1172626*pow(10,-22)};
// pps
//Для термопары типа S
float a2[] = {0, 5.40313308631*pow(10,-3),1.25934289740*pow(10,-5),-2.32477968689*pow(10,-8),3.22028823036*pow(10,-11),
-3.31465196389*pow(10,-14),2.55744251786*pow(10,-17),-1.25068871393*pow(10,-20),2.71443176145*pow(10,-24)};
float b2[] = {1.32900444085,3.34509311344*pow(10,-3),6.54805192818*pow(10,-6),-1.64856259209*pow(10,-9),1.29989605174*pow(10,-14)};
float c2[] = {1.46628232636*pow(10,2),-2.58430516752*pow(10,-1),1.63693574641*pow(10,-4),-3.30439046987*pow(10,-8),-9.43223690612*pow(10,-15)};

void setup(){
  Serial.begin(9600);
  delay(500);
  pinMode(10,INPUT);// encoder button
  // TIMER_1 D9 OUTPUT
  DDRB = 1 << PB1; // D9 output pwm
  noInterrupts();
  TCCR1A=0;TCCR1B=0;
  TCCR1A = 1 << COM1A1 | 1 << WGM11;
  TCCR1B = 1 << WGM13 | 1 << WGM12 | 1 << CS10;
  ICR1 = 40000;
  MsTimer2::set(2, to_Timer);MsTimer2::start();
 k_ok = (EEPROM.read(10)<<8)+EEPROM.read(11);
 k_0 = (EEPROM.read(20)<<8)+EEPROM.read(21);
 k_30 = (EEPROM.read(30)<<8)+EEPROM.read(31);
 ok=EEPROM.read(0);menu=EEPROM.read(1);
 if(menu>100){menu=0;}
 times=float(MV30-1500+k_30)/30.0*out+NULLL-1500+k_0;
 OCR1A = times;
 interrupts();
 KB.begin(KB3); 
// if(ok==1||ok==2){temp = dsRead(0)*k_ok/100;}else{temp=0;}
  }

void loop(){
  if(digitalRead(10)==LOW){times_off=millis();}
  
  if(KB.check(KEY_DOWN )){ kb=1;
     if(digitalRead(10)==HIGH && KB.getNum==14){i=0;ccc=0;for(i1=0;i1<5;i1++){code[i]=0;}kb=0;temp=0;delay(200);}
     if(digitalRead(10)==HIGH && KB.getNum==15){delay(200);kb=0;temp=ccc;i=0;ccc=0;for(i1=0;i1<5;i1++){code[i]=0;}}
     if(digitalRead(10)==LOW && KB.getNum==1){menu=0;arr();}
     if(digitalRead(10)==LOW && KB.getNum==2){menu=1;arr();}
     if(digitalRead(10)==LOW && KB.getNum==3){menu=2;arr();}
     if(digitalRead(10)==LOW && KB.getNum==4){menu=3;arr();}
     if(digitalRead(10)==LOW && KB.getNum==5){menu=5;delay(200);}
     if(digitalRead(10)==LOW && KB.getNum==6){menu=6;delay(200);}

     if(digitalRead(10)==LOW && KB.getNum==7){ok=0;w=1;times1=millis();kb=0;temp=ccc;i=0;ccc=0;for(i1=0;i1<5;i1++){code[i]=0;}delay(200);}
     if(digitalRead(10)==LOW && KB.getNum==8){ok=1;w=1;times1=millis();kb=0;temp=ccc;i=0;ccc=0;for(i1=0;i1<5;i1++){code[i]=0;}delay(200);}
     if(digitalRead(10)==LOW && KB.getNum==9){ok=2;w=1;times1=millis();kb=0;temp=ccc;i=0;ccc=0;for(i1=0;i1<5;i1++){code[i]=0;}delay(200);}

     if(digitalRead(10)==LOW && KB.getNum==0&&ttt==0){kb=0;KB.getNum=500;ttt=1;Serial.println(ttt);delay(500);}
     if(digitalRead(10)==LOW && KB.getNum==0&&ttt==1){kb=0;KB.getNum=500;ttt=0;Serial.println(ttt);delay(500);}

     if(digitalRead(10)==LOW && KB.getNum==14){menu=14;delay(200);}

     if(menu==14&&KB.getNum==15){EEPROM.update(10,highByte(int(k_ok)));EEPROM.update(11,lowByte(int(k_ok)));save=millis();delay(200);}
     if(menu==5&&KB.getNum==15){EEPROM.update(20,highByte(int(k_0)));EEPROM.update(21,lowByte(int(k_0)));save=millis();delay(200);}
     if(menu==6&&KB.getNum==15){EEPROM.update(30,highByte(int(k_30)));EEPROM.update(31,lowByte(int(k_30)));save=millis();delay(200);}

//////////////////////////////////////////////////////////// 
     if(KB.getNum<10&&i<5&&digitalRead(10)==HIGH){
      code[i] = KB.getNum;delay(200);
   switch(i){
     case 0: ccc = code[0];break;
     case 1: ccc = code[0]*10 + code[1];break;
     case 2: ccc = code[0]*100 + code[1]*10 + code[2];break;
     case 3: ccc = code[0]*1000 + code[1]*100 + code[2]*10 + code[3];break;
     case 4: ccc = code[0]*10000 + code[1]*1000 + code[2]*100 + code[3]*10 + code[4];break;
    }
    i++;if(i>3){i=4;}
    if(menu==0){if(ccc>13720){ccc=13720;}}
    if(menu==1){if(ccc>8000){ccc=8000;}}
    if(menu==2){if(ccc>17680){ccc=17680;}}
    if(menu==3){if(ccc>10000){ccc=10000;}}
    }
  }

  
  if(millis()-times_ds>10000){t_ok=dsRead(0)*k_ok/1000;times_ds=millis();}
  if(menu==0){ 
  if(newPosition != oldPosition){oldPosition = newPosition;pos();
      if(digitalRead(10)==LOW){temp=temp+newPosition*50;}else{temp=temp+newPosition;}times_off=millis();
      myEnc.write(0);newPosition=0;if(temp<-2700){temp=-2700;}if(temp>13720){temp=13720;}}
      t_ok_mv = (t_ok-20)*0.0405+0.798;
      if(ok==0){out=fun_xa(temp/10.0);}
      if(ok>0){out=fun_xa(temp/10.0)-t_ok_mv;}
      if(ttt==1){out=0;}
      OCR1A=float(MV30-1500+k_30)/30.0*out+NULLL-1500+k_0;
      if(millis()-times_off>300000){u8g.firstPage();do {  }   while( u8g.nextPage() );}
      else{
      u8g.firstPage();do {   
      u8g.setFont(u8g_font_profont29r);
      u8g.setPrintPos(0, 20);
      if(ttt==1){u8g.setFont(u8g_font_profont17r);u8g.drawStr(10,40,"Out=0 mV");}
       else{
      if(kb==0){u8g.print(temp/10.0,1);}
      if(kb==1){u8g.print(ccc/10.0,1);}
      u8g.setPrintPos(0, 45);
      if(ok==2){u8g.print(out+t_ok_mv,3);}
      else{u8g.print(out,3);} 
      u8g.setFont(u8g_font_profont17r);u8g.drawStr(5,64,"TXA");u8g.drawStr(100,20,"*C");
      u8g.drawStr(100,45,"mV"); 
      u8g.setPrintPos(75, 64);if(ok>0){u8g.print(t_ok,1);}
      if(ok==2){;u8g.drawStr(60,64,"+");} 
      }
  } 
  while( u8g.nextPage() );
      }}

  if(menu==1){ 
  if(newPosition != oldPosition){oldPosition = newPosition;pos();
      if(digitalRead(10)==LOW){temp=temp+newPosition*50;}else{temp=temp+newPosition;}times_off=millis();
      myEnc.write(0);newPosition=0;if(temp<-2000){temp=-2000;}if(temp>8000){temp=8000;}}
      t_ok_mv = (t_ok-20)*0.0661+1.290;
      if(ok==0){out=fun_xk(temp/10.0);}
      if(ok>0){out=fun_xk(temp/10.0)-t_ok_mv;}
      if(ttt==1){out=0;}
      OCR1A=float(MV30-1500+k_30)/30.0*out+NULLL-1500+k_0;
      if(millis()-times_off>300000){u8g.firstPage();do {  }   while( u8g.nextPage() );}
      else{
      u8g.firstPage();do {   
      u8g.setFont(u8g_font_profont29r);
      u8g.setPrintPos(0, 20);
      if(ttt==1){u8g.setFont(u8g_font_profont17r);u8g.drawStr(10,40,"Out=0 mV");}
       else{
      if(kb==0){u8g.print(temp/10.0,1);}
      if(kb==1){u8g.print(ccc/10.0,1);}
      u8g.setPrintPos(0, 45);
      if(ok==2){u8g.print(out+t_ok_mv,3);}
      else{u8g.print(out,3);} 
      u8g.setFont(u8g_font_profont17r);u8g.drawStr(5,64,"TXK");u8g.drawStr(100,20,"*C");
      u8g.drawStr(100,45,"mV"); 
      u8g.setPrintPos(75, 64);if(ok>0){u8g.print(t_ok,1);}
      if(ok==2){;u8g.drawStr(60,64,"+");} 
      }
  } 
  while( u8g.nextPage() );
      }}

  if(menu==2){ 
  if(newPosition != oldPosition){oldPosition = newPosition;pos();
      if(digitalRead(10)==LOW){temp=temp+newPosition*50;}else{temp=temp+newPosition;}times_off=millis();
      myEnc.write(0);newPosition=0;if(temp<-500){temp=-500;}if(temp>17680){temp=17680;}}
      t_ok_mv = (t_ok-20)*0.006+0.113;
      if(ttt==1){out=0;}
      if(ok==0){out=fun_pps(temp/10.0);}
      if(ok>0){out=fun_pps(temp/10.0)-t_ok_mv;}
      OCR1A=float(MV30-1500+k_30)/30.0*out+NULLL-1500+k_0;
      if(millis()-times_off>300000){u8g.firstPage();do {  }   while( u8g.nextPage() );}
      else{
      u8g.firstPage();do {   
      u8g.setFont(u8g_font_profont29r);
      u8g.setPrintPos(0, 20);
      if(ttt==1){u8g.setFont(u8g_font_profont17r);u8g.drawStr(10,40,"Out=0 mV");}
       else{
      if(kb==0){u8g.print(temp/10.0,1);}
      if(kb==1){u8g.print(ccc/10.0,1);}
      u8g.setPrintPos(0, 45);
      if(ok==2){u8g.print(out+t_ok_mv,3);}
      else{u8g.print(out,3);} 
      u8g.setFont(u8g_font_profont17r);u8g.drawStr(5,64,"TPPs");u8g.drawStr(100,20,"*C");
      u8g.drawStr(100,45,"mV"); 
      u8g.setPrintPos(75, 64);if(ok>0){u8g.print(t_ok,1);}
      if(ok==2){;u8g.drawStr(60,64,"+");} 
      }
  } 
  while( u8g.nextPage() );
      }}          
  
 if(menu==3){ 
  if(newPosition != oldPosition){oldPosition = newPosition;pos();
      if(digitalRead(10)==LOW){temp=temp+newPosition*30;}else{temp=temp+newPosition;}times_off=millis();
      myEnc.write(0);newPosition=0;if(temp<-1000){temp=-1000;}if(temp>10000){temp=10000;}reg=1;}
      out=temp;
      if(ttt==1){out=0;}
      OCR1A=float(MV30-1500+k_30)/30.0*out/100+NULLL-1500+k_0; 
      if(reg==1){reg=0;Serial.println(OCR1A);}
      if(millis()-times_off>300000){u8g.firstPage();do {  }   while( u8g.nextPage() );}
      else{
      u8g.firstPage();do {   
      u8g.setFont(u8g_font_profont29r);
      u8g.setPrintPos(5, 20);
      if(ttt==1){u8g.setFont(u8g_font_profont17r);u8g.drawStr(10,40,"Out=0 mV");}
       else{
      if(kb==0){u8g.print(temp/100.0,2);}
      if(kb==1){u8g.print(ccc/100.0,2);} 
      u8g.setFont(u8g_font_profont17r);if(kb==0){u8g.drawStr(100,20,"mV");}
      }
  } 
  while( u8g.nextPage() );
      }}

/// kall 0
  if(menu==5){ 
  if(newPosition != oldPosition){oldPosition = newPosition;pos();
      if(digitalRead(10)==LOW){k_0=k_0+newPosition*50;}else{k_0=k_0+newPosition;}myEnc.write(0);newPosition=0;
      if(k_0<0){k_0=0;}if(k_0>3000){k_0=3000;}}
      OCR1A=float(MV30-1500+k_30)/30.0*0/100+NULLL-1500+k_0; 
      u8g.firstPage();do {  
      u8g.setFont(u8g_font_profont29r);
      u8g.setPrintPos(5, 20);u8g.print(k_0);
      u8g.setFont(u8g_font_profont17r);
      if(millis()-save<1000){u8g.drawStr(5,60,"SAVE");}
      else{u8g.drawStr(5,60,"kall 0");}
  } 
  while( u8g.nextPage() );
      }  

/// kall 30
  if(menu==6){ 
  if(newPosition != oldPosition){oldPosition = newPosition;pos();
      if(digitalRead(10)==LOW){k_30=k_30+newPosition*50;}else{k_30=k_30+newPosition;}myEnc.write(0);newPosition=0;
      if(k_30<0){k_30=0;}if(k_30>3000){k_30=3000;}}
      OCR1A=float(MV30-1500+k_30)/30.0*3000/100+NULLL-1500+k_0; 
      u8g.firstPage();do {  
      u8g.setFont(u8g_font_profont29r);
      u8g.setPrintPos(5, 20);u8g.print(k_30);
      u8g.setFont(u8g_font_profont17r);
      if(millis()-save<1000){u8g.drawStr(5,60,"SAVE");}
      else{u8g.drawStr(5,60,"kall 30");}
  } 
  while( u8g.nextPage() );
      }        

  if(menu==14){ 
  if(newPosition != oldPosition){oldPosition = newPosition;pos();
      k_ok=k_ok+newPosition;myEnc.write(0);t_ok=dsRead(0)*k_ok/1000;newPosition=0;if(k_ok<800){k_ok=800;}if(k_ok>1200){k_ok=1200;}}
      u8g.firstPage();do {  
      if(millis()-times14>1000){t_ok=dsRead(0)*k_ok/1000;times14=millis();}
      u8g.setFont(u8g_font_profont29r);
      u8g.setPrintPos(5, 20);u8g.print(t_ok,1);
      u8g.setPrintPos(5, 45);u8g.print(k_ok/1000,3);
      u8g.setFont(u8g_font_profont17r);
      if(millis()-save<1000){u8g.drawStr(5,60,"SAVE");}
      else{u8g.drawStr(5,60,"kall t_ok");}
  } 
  while( u8g.nextPage() );
      }     

  if(millis()-times1>5000 && w==1){EEPROM.update(0,ok);EEPROM.update(1,menu);w=0;}
  
  }  

float fun_xa(float t){
//термопары типа К -270...1372 (ХA)
if(t<=0){
e=(a[0]*pow(t,0))+(a[1]*pow(t,1))+(a[2]*pow(t,2))+(a[3]*pow(t,3))+(a[4]*pow(t,4))+(a[5]*pow(t,5))+(a[6]*pow(t,6))+(a[7]*pow(t,7))+(a[8]*pow(t,8))+(a[9]*pow(t,9))+(a[10]*pow(t,10));}
if(t>0){
e=(b[0]*pow(t,0))+(b[1]*pow(t,1))+(b[2]*pow(t,2))+(b[3]*pow(t,3))+(b[4]*pow(t,4))+(b[5]*pow(t,5))+(b[6]*pow(t,6))+(b[7]*pow(t,7))+(b[8]*pow(t,8))+(b[9]*pow(t,9)+(c[0]*pow(logg,c[1]*pow(t-126.9686,2))));}
return e;
}
float fun_xk(float t){
//термопары типа L -200...800 (ХК)
e=(a1[0]*pow(t,0))+(a1[1]*pow(t,1))+(a1[2]*pow(t,2))+(a1[3]*pow(t,3))+(a1[4]*pow(t,4))+(a1[5]*pow(t,5))+(a1[6]*pow(t,6))+(a1[7]*pow(t,7))+(a1[8]*pow(t,8));
return e;
}
// pps  -50...+1768 (PPs)
float fun_pps(float t){
if(t<=1064){
e=(a2[0]*pow(t,0))+(a2[1]*pow(t,1))+(a2[2]*pow(t,2))+(a2[3]*pow(t,3))+(a2[4]*pow(t,4))+(a2[5]*pow(t,5))+(a2[6]*pow(t,6))+(a2[7]*pow(t,7))+(a2[8]*pow(t,8))+(a2[9]*pow(t,9));}
if(t>=1065 and t<=1664){
e=(b2[0]*pow(t,0))+(b2[1]*pow(t,1))+(b2[2]*pow(t,2))+(b2[3]*pow(t,3))+(b2[4]*pow(t,4))+(b2[5]*pow(t,5));}
if(t>=1665){
e=(c2[0]*pow(t,0))+(c2[1]*pow(t,1))+(c2[2]*pow(t,2))+(c2[3]*pow(t,3))+(c2[4]*pow(t,4));}
return e;
}
void pos(){if(newPosition>1){newPosition=1;}if(newPosition<-1){newPosition=-1;}}

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

void arr(){w=1;times1=millis();kb=0;temp=ccc;i=0;ccc=0;for(i1=0;i1<5;i1++){code[i]=0;}delay(200);}

35

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Скомпилировался без проблем прошился первый раз выдал ошибку, что то с программатором СТК 500, поменял на другой и прошился без проблем. На дисплее появилось изображение со смещением в лево. На энкодер не реагирует.

http://forum.rcl-radio.ru/uploads/images/2025/01/fb03c95b787690a96dc415eca34f3b13.jpg

36

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

так может у Вас дисплей 1,3?

37 (2025-01-31 12:45:27 отредактировано neganov.vick)

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Ну да. У вас на схеме так и указано.

38

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);    // Dev 0, Fast I2C / TWI

39

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Это не то, прошился, экран темный с права только полоска осталась.

40

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Верну прежнею прошивку С SSD1306 c 34 поста. Экран 1.3" в 29 посту с обратной стороны фотка. Контроллер не указан.

41

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

SSD1306 0,96
SH1106  1,3

42

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NONE);    // I2C / TWI
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);    // Dev 0, Fast I2C / TWI
//U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_NO_ACK);    // Display which does not send ACK

//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);    // I2C / TWI
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_NO_ACK|U8G_I2C_OPT_FAST);    // Fast I2C / TWI
//U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NO_ACK);    // Display which does not send AC

43

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Вот мои уставки в инструментах

http://forum.rcl-radio.ru/uploads/images/2025/01/2cace0de1543adb9ca3da3e00bc561a9.png

44

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Я так не понял. Пробовать по строчке или все сразу.

45

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Использовать можно только одну строчку, остальные должны быть закомментированы.

Одна из строчек должна подойти.

46 (2025-01-31 13:49:08 отредактировано neganov.vick)

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Подошла вот эта. U8GLIB_SH1106_128X64 u8g(U8G_I2C_OPT_DEV_0|U8G_I2C_OPT_FAST);    // Dev 0, Fast I2C / TWI 
и скетч с 34 поста. Прошивалась без проблем.
Изображение четкое, без смещений. Вот только на эн кодер не реагирует.

47

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Сегодня все собрал. Пока вот так, а потом сделаю корпус. Думаю питать от USBзарядного.
http://forum.rcl-radio.ru/uploads/images/2025/02/01f9cf2122e115d0ad2c72bc98347394.jpg
Вот только энкодер не работает, кнопка работает, крутилка нет. Клавиатура норм.
Энкодер по маркировке такой же, но платка другая.
http://forum.rcl-radio.ru/uploads/images/2025/02/3d62e12c931ef9494014e48bd07f71cc.jpg

48

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

http://forum.rcl-radio.ru/uploads/images/2025/02/30e76453b121fde19a31befc9cba0e30.png

Моего энкодера немного другая схема

http://forum.rcl-radio.ru/uploads/images/2025/02/100187132ad6bb4566d38d20adeb2e28.png

Возможно в этом причина

49 (2025-02-01 13:35:59 отредактировано neganov.vick)

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

То есть если в место R4 и R1 поставить перемычки, то будет то что нужно. По пробую.

50

Re: Иммитатор сигнала термопар (ТХА, ТХК, ТППs, -10...+100 mV)

Спасибо все прекрасно заработало. Прошел калибровку, ровно ноль выставить не получилось, вышло " -0.1.." , по этому где то на 2 градуса ошибка. Но это не принципиально. Моя искренняя благодарность за прибор. Давно искал похожее. Буду мудрить в корпус.