12-kanalovy Data Logger

Pochváľte sa ostatným čo zaujímave ste vyrobili alebo práve vyrábate!

Moderátori: psichac, Moderátori

mr.mio
Ultimate člen
Ultimate člen
Príspevky: 5036
Dátum registrácie: 01 Okt 2009, 00:00
Bydlisko: Podunajska pahorkatina
Vek: 36

Re: 12-kanalovy Data Logger

Príspevok od používateľa mr.mio » 23 Sep 2016, 14:45

Ano,ale treba v programe tuto funkciu zapnut. Viac tu: https://www.arduino.cc/en/Reference/AnalogReference

Ak teraz zmerias napatie na pine aref,bude tam cca 5V.
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1375
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: 12-kanalovy Data Logger

Príspevok od používateľa TomasNM » 23 Sep 2016, 21:18

OK,dik.
Niekedy tu referenciu vyskusam.

Prikladam cely kod:

Kód: Vybrať všetko

#include <SD.h>
#include <SPI.h>
#include <DS1307RTC.h>
#include <Time.h>
#include <Wire.h>
#include <LiquidCrystal.h>
#include <EEPROM.h>

int button1=49;
int button2=48;
int button3=51;
int button4=50;
int button5=22;
int flashled=52;
int logled=53;
int battery1=A0;
int battery2=A1;
int battery3=A2;
int battery4=A3;
int input1=A0;
int input2=A1;
int input3=A2;
int input4=A3;
int input5=A4;
int input6=A5;
int input7=A8;
int input8=A9;
int input9=A10;
int input10=A11;
int input11=A12;
int input12=A13;

LiquidCrystal lcd(14,15,16,17,18,19);
String data="";
File out;
tmElements_t tm;
unsigned long before=0;
boolean edge1=true;
boolean edge2=true;
boolean edge3=true;
boolean edge4=true;
boolean edge5=true;
boolean edge6=true;
boolean scredge=true;
boolean flash=false;
boolean head=true;
boolean startraise=true;
boolean stopraise=true;
boolean repeat=false;
int mode=0,pos=1,chedit=1;
int chcount=12;
int rtcset[6];
int timeset[6];
int timestart[5];
int timestop[5];
long numset[8];
long interval,before1,before2;
long minval[12],maxval[12];
int unit[12];
int startcon=1,stopcon=1,startch=1,stopch=1,startchval=0,stopchval=0;
unsigned long stopsamples=0,recorded=0;

int debug=1;
String filename;

byte g0[8] = {
  B10101,
  B10111,
  B10111,
  B10010,
  B10001,
  B10001,
  B01110,
};
byte g1[8] = {
  B00100,
  B00100,
  B01110,
  B01110,
  B11111,
  B11111,
  B00000,
};
byte g2[8] = {
  B11111,
  B11111,
  B01110,
  B01110,
  B00100,
  B00100,
  B00000,
};
byte g3[8] = {
  B00000,
  B10000,
  B11100,
  B11111,
  B11100,
  B10000,
  B00000,
};
byte g4[8] = {
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
  B11111,
}; 
byte g5[8] = {
  B11111,
  B00000,
  B11111,
  B00000,
  B11111,
  B00000,
  B11111,
}; 
byte g6[8] = {
  B01110,
  B10001,
  B10001,
  B01110,
  B00100,
  B01110,
  B01110,
}; 
byte g7[8] = {
  B00100,
  B01110,
  B11111,
  B01010,
  B01010,
  B01010,
  B01111,
}; 

String screen[19] = { 
  "                                            DATA  LOGGER    Start          Setup",//0
  "                                            DATA  LOGGER    SD-Card  Failure    ",//1
  "                                            DATA  LOGGER    Logging...      Stop",//2
  "                                            DATA  LOGGER    Wait...         Stop",//3
  "DATA LOGGER SettingsChannel Setup   [  ]====================<     +            >",//4
  "DATA LOGGER SettingsInterval       . 00s====================<     -      +     >",//5
  "DATA LOGGER Settings                    Channels Enabled    <    Ch-    Ch+  RTC",//6
  "CHANNEL[  ] SettingsMin.value   +       ====================<     -      +     >",//7
  "CHANNEL[  ] SettingsMax.value   +       ====================<     -      +     >",//8
  "CHANNEL[  ] SettingsUnit               ]====================<     -      +   <##",//9
  "    RTC Settings    Date        .  .    Time          :  :  <     -      +     >",//10
  "Channel Info    [  ]Max:     .          Min:     .         ]<     +             ",//11
  "                                            DATA  LOGGER    RTC  Failure        ",//12
  "                                            DATA  LOGGER    SD Filename Exists  ",//13
  "DATA LOGGER SettingsStart:              ====================<     +            >",//14
  "DATA LOGGER SettingsStop:               ====================<     +            >",//15
  "                    [  ]                ====================<     -      +     >",//16
  "  SCHEDULED           :         .  .    ====================<     -      +     >",//17
  "   STOP - SAMPLES   Records:    00000000====================<     -      +     >"};//18
  
String unitstr[50] = { 
  "V",
  "A",
  "mV",
  "mA",
  "mOhm",
  "Ohm",
  "kOhm",
  "MOhm",
  "uF",
  "nF",
  "pF",
  "dgC",
  "mg",
  "g",
  "dkg",
  "kg",
  "%",
  "Lux",
  "kPa",
  "MPa",
  "bar",
  "psi",
  "dB",
  "dBm",
  "mm",
  "cm",
  "m",
  "km",
  "m/s",
  "km/h",
  "rpm",
  "N",
  "daN",
  "kN"};

void loadvariables()
{
  interval    =EEPROMreadlong(0);
  chcount     =EEPROMreadlong(1);
  startcon    =EEPROMreadlong(2);
  stopcon     =EEPROMreadlong(3);
  startch     =EEPROMreadlong(4);
  stopch      =EEPROMreadlong(5);
  startchval  =EEPROMreadlong(6);
  stopchval   =EEPROMreadlong(7);
  stopsamples =EEPROMreadlong(8);
  if(EEPROMreadlong(9) ==1) { startraise=true;} else { startraise=false;}
  if(EEPROMreadlong(10)==1) { stopraise =true;} else { stopraise =false;}
  if(EEPROMreadlong(11)==1) { repeat    =true;} else { repeat    =false;}
  for(int i=0;i<12;i++) { minval[i]=EEPROMreadlong(3*i+12);maxval[i]=EEPROMreadlong(3*i+13);unit[i]=EEPROMreadlong(3*i+14);}
  for(int i=0;i<5;i++)  { timestart[i]=EEPROMreadlong(48+i);}
  for(int i=0;i<5;i++)  { timestop [i]=EEPROMreadlong(53+i);}
}
void savevariables()
{
  EEPROMwritelong(0,interval);
  EEPROMwritelong(1,chcount );
  EEPROMwritelong(2,startcon);
  EEPROMwritelong(3,stopcon);
  EEPROMwritelong(4,startch);
  EEPROMwritelong(5,stopch);
  EEPROMwritelong(6,startchval);
  EEPROMwritelong(7,stopchval);
  EEPROMwritelong(8,stopsamples);
  if(startraise==true) { EEPROMwritelong(9 ,1);} else { EEPROMwritelong(9 ,0);}
  if(stopraise ==true) { EEPROMwritelong(10,1);} else { EEPROMwritelong(10,0);}
  if(repeat    ==true) { EEPROMwritelong(11,1);} else { EEPROMwritelong(11,0);}
  for(int i=0;i<12;i++) { EEPROMwritelong(3*i+12,minval[i]);EEPROMwritelong(3*i+13,maxval[i]);EEPROMwritelong(3*i+14,unit[i]);}
  for(int i=0;i<5;i++)  { EEPROMwritelong(48+i,timestart[i]);}
  for(int i=0;i<5;i++)  { EEPROMwritelong(53+i,timestop [i]);}
}
void EEPROMwritelong(int address, long value)
{
  byte four  = (value & 0xFF);
  byte three = ((value >> 8) & 0xFF);
  byte two   = ((value >> 16) & 0xFF);
  byte one   = ((value >> 24) & 0xFF);
  EEPROM.write(4*address, four);
  EEPROM.write(4*address + 1, three);
  EEPROM.write(4*address + 2, two);
  EEPROM.write(4*address + 3, one);
}
long EEPROMreadlong(long address)
{
  long four  = EEPROM.read(4*address);
  long three = EEPROM.read(4*address + 1);
  long two   = EEPROM.read(4*address + 2);
  long one   = EEPROM.read(4*address + 3);
  return ((four << 0) & 0xFF) + ((three << 8) & 0xFFFF) + ((two << 16) & 0xFFFFFF) + ((one << 24) & 0xFFFFFFFF);
}

void splitnumber2(int number)
{
  String a;
  if(number<100) { a=""+String(number);}
  if(number<10) { a="0"+String(number);}
  numset[0]=int(a[0])-48;
  numset[1]=int(a[1])-48;
}

void splitnumber3(int number)
{
  String a;
  if(number<1000) { a=""+String(number);}
  if(number<100) { a="0"+String(number);}
  if(number<10) { a="00"+String(number);}
  numset[0]=int(a[0])-48;
  numset[1]=int(a[1])-48;
  numset[2]=int(a[2])-48; 
}

void splitnumber4(int number)
{
  String a;
  if(number<10000) { a=""+String(number);}
  if(number<1000) { a="0"+String(number);}
  if(number<100) { a="00"+String(number);}
  if(number<10) { a="000"+String(number);}
  numset[0]=int(a[0])-48;
  numset[1]=int(a[1])-48;
  numset[2]=int(a[2])-48; 
  numset[3]=int(a[3])-48; 
}
void splitnumber6(long number)
{
  String a;
  number=abs(number);
  if(number<1000000) { a=""+String(number);}
  if(number<100000) { a="0"+String(number);}
  if(number<10000) { a="00"+String(number);}
  if(number<1000) { a="000"+String(number);}
  if(number<100) { a="0000"+String(number);}
  if(number<10) { a="00000"+String(number);}
  numset[0]=int(a[0])-48;
  numset[1]=int(a[1])-48;
  numset[2]=int(a[2])-48; 
  numset[3]=int(a[3])-48; 
  numset[4]=int(a[4])-48; 
  numset[5]=int(a[5])-48; 
}
void splitnumber8(unsigned long number)
{
  String a;
  if(number<100000000) { a=""+String(number);}
  if(number<10000000) { a="0"+String(number);}
  if(number<1000000) { a="00"+String(number);}
  if(number<100000) { a="000"+String(number);}
  if(number<10000) { a="0000"+String(number);}
  if(number<1000) { a="00000"+String(number);}
  if(number<100) { a="000000"+String(number);}
  if(number<10) { a="0000000"+String(number);}
  numset[0]=int(a[0])-48;
  numset[1]=int(a[1])-48;
  numset[2]=int(a[2])-48; 
  numset[3]=int(a[3])-48; 
  numset[4]=int(a[4])-48; 
  numset[5]=int(a[5])-48; 
  numset[6]=int(a[6])-48; 
  numset[7]=int(a[7])-48; 
}

void drawframe(int number)
{
  if(number==0) { 
    lcd.setCursor(0,0);for(int i=0;i<41;i++) { lcd.write(5);}
    lcd.setCursor(19,1);lcd.write(5);
  }
  if(number==1) { lcd.setCursor(0,1);
//    for(int i=0;i<20;i++) { lcd.write(5);}
  } 
}

String inttostr2(int number)
{
  String a;
  if (number < 10) { a="0";}
  a=a+String(number);
  return a;
}
String inttostr3(int number)
{
  String a;
  if (number < 100) { a="0";}
  if (number < 10) { a="00";}
  a=a+String(number);
  return a;
}
String inttostr4(int number)
{
  number=abs(number);
  String a;
  if (number < 1000) { a="0";}
  if (number < 100) { a="00";}
  if (number < 10) { a="000";}
  a=a+String(number);
  return a;
}
String longtostr8(unsigned long number)
{
  String a;
  if (number < 10000000) { a="0";}
  if (number < 1000000) { a="00";}
  if (number < 100000) { a="000";}
  if (number < 10000) { a="0000";}
  if (number < 1000) { a="00000";}
  if (number < 100) { a="000000";}
  if (number < 10) { a="0000000";}
  a=a+String(number);
  return a;
}
String longtostrm6(long number) //0000.00 min-max
{
  number=abs(number);
  String b;
  int a[6];
  if(number<1000000) { b=""+String(number);}
  if(number<100000) { b="0"+String(number);}
  if(number<10000) { b="00"+String(number);}
  if(number<1000) { b="000"+String(number);}
  if(number<100) { b="0000"+String(number);}
  if(number<10) { b="00000"+String(number);}
  a[0]=int(b[0])-48;
  a[1]=int(b[1])-48;
  a[2]=int(b[2])-48;
  a[3]=int(b[3])-48;
  a[4]=int(b[4])-48;
  a[5]=int(b[5])-48;
  b=b.substring(0,4)+"."+b.substring(4,6);
  return b;
}
String longtostri6(long number) //000.000 interval
{
  number=abs(number);
  String b;
  int a[6];
  if(number<1000000) { b=""+String(number);}
  if(number<100000) { b="0"+String(number);}
  if(number<10000) { b="00"+String(number);}
  if(number<1000) { b="000"+String(number);}
  if(number<100) { b="0000"+String(number);}
  if(number<10) { b="00000"+String(number);}
  a[0]=int(b[0])-48;
  a[1]=int(b[1])-48;
  a[2]=int(b[2])-48;
  a[3]=int(b[3])-48;
  a[4]=int(b[4])-48;
  a[5]=int(b[5])-48;
  b=b.substring(0,3)+"."+b.substring(3,6);
  return b;
}
String str2(String a)
{
  int ln=a.length();
  String b;
  if(ln<=2) { b=""+a;}
  if(ln<=1) { b=" "+a;}
  return b;
}
String str3(String a)
{
  int ln=a.length();
  String b;
  if(ln<=3) { b=""+a;}
  if(ln<=2) { b=" "+a;}
  if(ln<=1) { b="  "+a;}
  return b;
}
String str4(String a)
{
  int ln=a.length();
  String b;
  if(ln<=4) { b=""+a;}
  if(ln<=3) { b=" "+a;}
  if(ln<=2) { b="  "+a;}
  if(ln<=1) { b="   "+a;}
  return b;
}
String str5(String a)
{
  int ln=a.length();
  String b;
  if(ln<=5) { b=""+a;}
  if(ln<=4) { b=" "+a;}
  if(ln<=3) { b="  "+a;}
  if(ln<=2) { b="   "+a;}
  if(ln<=1) { b="    "+a;}
  return b;
}
void writeevent()
{
  String log;
  boolean rtcerror=false;
  if(head==true) 
    {
    recorded=0;
    if (RTC.read(tm)) {
      filename=inttostr2(tm.Day)+inttostr2(tm.Hour)+inttostr2(tm.Minute)+inttostr2(tm.Second)+".dtl";
      char charFileName[12] = {0};
      filename.toCharArray(charFileName,13);//why 13,not 12???
      if(SD.exists(charFileName)) { mode=15;scredge=true;return;}
      filewrite("---------------------------------------------------------");
      log="DATA LOGGER Record started =>       "+inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year)+" / "+inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second);
      filewrite(log);
      } else {
      if (RTC.chipPresent()) {
        Serial.println("     RTC Failed / Chip present - DataLogger stopped");
        } else {
          Serial.println("   RTC Failed / RTC disconnected - DataLogger stopped");
          Serial.println("--------------------------------------------------------");
          }
        mode=14;scredge=true;return;
        }
        
      filewrite("---------------------------------------------------------");
      log="Sampling interval: "+longtostri6(interval)+"s          Channels Enabled: "+str2(String(chcount));
      filewrite(log);
      //Serial.println(log);
      
      for(int i=0;i<chcount;i++) { 
        log="Channel "+str2(String(i+1))+" =>   Min:";
        if(minval[i]<0) { log=log+"-";} else { log=log+" ";}
        log=log+longtostrm6(minval[i])+"   Max:";
        if(maxval[i]<0) { log=log+"-";} else { log=log+" ";}
        log=log+longtostrm6(maxval[i])+"   Unit: "+str5(unitstr[unit[i]]);
        filewrite(log);}//Serial.println(log);
      filewrite("---------------------------------------------------------");
      filewrite("");
      head=false;
    } else {
    long var[12];
    int varb[12];
    for(int i=0;i<chcount;i++) { 
      if(i==0) { varb[i]=analogRead(input1);}
      if(i==1) { varb[i]=analogRead(input2);}
      if(i==2) { varb[i]=analogRead(input3);}
      if(i==3) { varb[i]=analogRead(input4);}
      if(i==4) { varb[i]=analogRead(input5);}
      if(i==5) { varb[i]=analogRead(input6);}
      if(i==6) { varb[i]=analogRead(input7);}
      if(i==7) { varb[i]=analogRead(input8);}
      if(i==8) { varb[i]=analogRead(input9);}
      if(i==9) { varb[i]=analogRead(input10);}
      if(i==10){ varb[i]=analogRead(input11);}
      if(i==11){ varb[i]=analogRead(input12);}
      var[i]=map(varb[i], 0, 1023, minval[i], maxval[i]);}
    log="";
    if (RTC.read(tm)) {
      log=inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year)+" / "+inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second)+" => ";
      } else {
      if (RTC.chipPresent()) {
        Serial.println("The DS1307 is stopped.  Please run the SetTime");
        Serial.println("example to initialize the time and begin running.");
        Serial.println();
        } else {
        Serial.println("DS1307 read error!  Please check the circuitry.");
        Serial.println();
        rtcerror=true;
        }
      mode=14;scredge=true;return;
      }
    for(int i=0;i<chcount;i++) { 
      if(var[i]<0) { log=log+"-";} else { log=log+" ";}
      log=log+longtostrm6(var[i])+" "+inttostr4(varb[i]);
      if(i<chcount-1) { log=log+" ; ";}
      }
    filewrite(log);recorded++;
    //Serial.println(log);
  }
}

void filewrite(String data)
{
  char charFileName[12] = {0};
  filename.toCharArray(charFileName,13);//why 13,not 12???
  out=SD.open(charFileName, FILE_WRITE);
  if(out.println(data)==0) { if(mode!=14) { mode=2;scredge=true;}}
  out.close();
}

void setup() {
  Serial.begin(115200);
  while (!Serial) ; // wait for serial
  delay(200);
//  Serial.println("DS1307RTC Read Test");
//  Serial.println("-------------------");
  pinMode(10,OUTPUT);
  pinMode(8,OUTPUT);
  pinMode(button1,INPUT_PULLUP);
  pinMode(button2,INPUT_PULLUP);
  pinMode(button3,INPUT_PULLUP);
  pinMode(button4,INPUT_PULLUP);
  pinMode(button5,INPUT_PULLUP);
  pinMode(flashled,OUTPUT);
  pinMode(logled,OUTPUT);
  digitalWrite(8,HIGH);
  if (RTC.read(tm)) { } else {  if (RTC.chipPresent()) {
       Serial.println("The DS1307 is stopped.  Please run the SetTime");
       Serial.println("example to initialize the time and begin running.");
       Serial.println();
       } else {
       Serial.println("DS1307 read error!  Please check the circuitry.");
       Serial.println();
       }
     mode=14;scredge=true;}
  lcd.begin(20, 4);  
  lcd.setCursor(0,0);
  lcd.createChar(1,g0);
  lcd.createChar(2,g1);
  lcd.createChar(3,g2);
  lcd.createChar(4,g3);
  lcd.createChar(5,g4);
  lcd.createChar(6,g5);
  lcd.createChar(7,g6);
  lcd.createChar(8,g7);
  loadvariables();
  SD.begin(10,11,12,13);
}

void loop() {
  if(digitalRead(button1)==true) { edge1=true;}
  if(digitalRead(button2)==true) { edge2=true;}
  if(digitalRead(button3)==true) { edge3=true;}
  if(digitalRead(button4)==true) { edge4=true;}
  if(digitalRead(button5)==true) { edge5=true;}
  
  if(mode==0)
  { 
    //blank
    lcd.setCursor(0,0);lcd.print(screen[0]);
    lcd.setCursor(0,3);lcd.print("                    ");
    drawframe(0);
    delay(1000);mode=1;
    digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
  }
  
  if(mode==1)
  {
    //start
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[0]);lcd.setCursor(12,3);lcd.write(7);drawframe(0);scredge=false;}
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(startcon==1) { head=true;mode=3;} else { mode=4;}}
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;mode=13;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=5;}
    
    if(digitalRead(button5)==false && edge5==true) { edge5=false;scredge=true;mode=100;}
  }
  if(mode==4)
  {
    //wait for trigger
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[3]);drawframe(0);lcd.setCursor(12,3);lcd.write(4);lcd.write(4);scredge=false;digitalWrite(flashled,HIGH);}
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;head=true;mode=3;digitalWrite(flashled,LOW);}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;head=true;mode=0;digitalWrite(flashled,LOW);}
    
    if(startcon==2) {
      int var;
      if(startch==0) { var=analogRead(input1);}
      if(startch==1) { var=analogRead(input2);}
      if(startch==2) { var=analogRead(input3);}
      if(startch==3) { var=analogRead(input4);}
      if(startch==4) { var=analogRead(input5);}
      if(startch==5) { var=analogRead(input6);}
      if(startch==6) { var=analogRead(input7);}
      if(startch==7) { var=analogRead(input8);}
      if(startch==8) { var=analogRead(input9);}
      if(startch==9) { var=analogRead(input10);}
      if(startch==10){ var=analogRead(input11);}
      if(startch==11){ var=analogRead(input12);}
      if((var>=startchval && startraise==true)||(var<=startchval && startraise==false)) { scredge=true;head=true;mode=3;digitalWrite(flashled,LOW);}
    }
    if(startcon==3) {
      if (RTC.read(tm)) {
        tmElements_t testtm;
        testtm.Hour=timestart[0];testtm.Minute=timestart[1];testtm.Second=0;testtm.Day=timestart[2];testtm.Month=timestart[3];testtm.Year=CalendarYrToTm(timestart[4]);
        time_t time1=makeTime(tm);
        time_t time2=makeTime(testtm);
        if(time1>=time2) { scredge=true;mode=3;head=true;digitalWrite(flashled,LOW);}

        } else {
        if (RTC.chipPresent()) {
          Serial.println("The DS1307 is stopped.  Please run the SetTime");
          Serial.println("example to initialize the time and begin running.");
          Serial.println();
          } else {
          Serial.println("DS1307 read error!  Please check the circuitry.");
          Serial.println();
          }
        mode=14;scredge=true;
      }
    }
  }

  if(mode==3)
  {
    //logging
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[2]);drawframe(0);scredge=false;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;}
    //logging active - write
    if(millis()-before1>=interval) { before1=millis();digitalWrite(logled,HIGH);writeevent();digitalWrite(logled,LOW);} //log
    if(millis()-before2>=450 && flash==false) { flash=true ;before2=millis();digitalWrite(flashled,HIGH);}
    if(millis()-before2>=50  && flash==true ) { flash=false;before2=millis();digitalWrite(flashled,LOW );}
    
    if(stopcon==2) {
      int var;
      if(startch==0) { var=analogRead(input1);}
      if(startch==1) { var=analogRead(input2);}
      if(startch==2) { var=analogRead(input3);}
      if(startch==3) { var=analogRead(input4);}
      if(startch==4) { var=analogRead(input5);}
      if(startch==5) { var=analogRead(input6);}
      if(startch==6) { var=analogRead(input7);}
      if(startch==7) { var=analogRead(input8);}
      if(startch==8) { var=analogRead(input9);}
      if(startch==9) { var=analogRead(input10);}
      if(startch==10){ var=analogRead(input11);}
      if(startch==11){ var=analogRead(input12);}
      if((var>=stopchval && stopraise==true)||(var<=stopchval && stopraise==false)) { scredge=true;head=true;
        if(startcon==2 && repeat==true) { mode=4;} else { mode=0;}digitalWrite(flashled,LOW);}
    }
    if(stopcon==3) {
      if (RTC.read(tm)) {
        tmElements_t testtm;
        testtm.Hour=timestop[0];testtm.Minute=timestop[1];testtm.Second=0;testtm.Day=timestop[2];testtm.Month=timestop[3];testtm.Year=CalendarYrToTm(timestop[4]);
        time_t time1=makeTime(tm);
        time_t time2=makeTime(testtm);
        if(time1>time2) { scredge=true;head=true;if(startcon==2 && repeat==true) { mode=4;} else { mode=0;}digitalWrite(flashled,LOW);}

        } else {
        if (RTC.chipPresent()) {
          Serial.println("The DS1307 is stopped.  Please run the SetTime");
          Serial.println("example to initialize the time and begin running.");
          Serial.println();
          } else {
          Serial.println("DS1307 read error!  Please check the circuitry.");
          Serial.println();
          }
        mode=14;scredge=true;
      }
    }
    if(stopcon==4 && recorded>=stopsamples) { scredge=true;head=true;if(startcon==2 && repeat==true) { mode=4;} else { mode=0;}digitalWrite(flashled,LOW);}
  }

  if(mode==2)
  {
    //SD failure
    digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[1]);drawframe(0);lcd.setCursor(19,3);lcd.write(1);scredge=false;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;SD.begin(10,11,12,13);setup();}
  }  
  if(mode==14)
  {
    //RTC failure
    digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[12]);drawframe(0);lcd.setCursor(19,3);lcd.write(1);scredge=false;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;setup();}
  }  
  if(mode==15)
  {
    //file exists
    digitalWrite(logled,LOW);digitalWrite(flashled,LOW);
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[13]);drawframe(0);lcd.setCursor(19,3);lcd.write(1);scredge=false;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=0;setup();}
  }  
  if(mode==5)
  {
    //channel choose
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[4]);lcd.setCursor(17,2);lcd.print(inttostr2(chedit));lcd.setCursor(1,3);lcd.write(8);lcd.setCursor(13,3);lcd.write(6);drawframe(1);scredge=false;}
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=0;savevariables();}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;chedit++;if(chedit>chcount)chedit=1;}
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;mode=8;pos=1;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=6;pos=1;}
    
  }  
  if(mode==51)
  {
    //start condition
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[14]);
      if(startcon!=1) { lcd.setCursor(13,3);lcd.write(6);}
      if(startcon==1) { lcd.setCursor(14,2);lcd.print("MANUAL");}
      if(startcon==2) { lcd.setCursor(7 ,2);lcd.print("CHANNEL VALUE");}
      if(startcon==3) { lcd.setCursor(11,2);lcd.print("SCHEDULED");}
      drawframe(1);scredge=false;
    }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=6;pos=4;}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;startcon++;if(startcon>3)startcon=1;}
    if(digitalRead(button3)==false && edge3==true && startcon!=1) { edge3=false;scredge=true;pos=1;mode=51+startcon;}//53 ch,54 sch
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=52;pos=1;}   
  }  
  if(mode==52)
  {
    //stop condition
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[15]);
      if(stopcon!=1) { lcd.setCursor(13,3);lcd.write(6);}
      if(stopcon==1) { lcd.setCursor(14,2);lcd.print("MANUAL");}
      if(stopcon==2) { lcd.setCursor(7 ,2);lcd.print("CHANNEL VALUE");}
      if(stopcon==3) { lcd.setCursor(11,2);lcd.print("SCHEDULED");}
      if(stopcon==4) { lcd.setCursor(13,2);lcd.print("SAMPLES");}
      drawframe(1);scredge=false;
    }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=51;}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;stopcon++;if(stopcon>4)stopcon=1;}
    if(digitalRead(button3)==false && edge3==true && stopcon!=1) { edge3=false;scredge=true;pos=1;mode=53+stopcon;}//53 ch,54 sch,55 samples
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=7;pos=1;}   
  }  
  if(mode==53)
  {
    //start by channel
    int ch=startch-1;
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[16]);lcd.setCursor(0,0);lcd.print("START-CHANNEL");scredge=false;
      lcd.setCursor(20-unitstr[unit[ch]].length(),0);lcd.print(unitstr[unit[ch]]);
      lcd.setCursor(1,2);lcd.print(inttostr2(startch));
      lcd.setCursor(5,2);lcd.print(inttostr4(startchval));
      boolean neg=false;long var=map(startchval, 0, 1023, minval[ch], maxval[ch]);
      if(var<0) { neg=true;} lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(var));
      lcd.setCursor(4 ,2);if(startraise==true) { lcd.write(2);} else { lcd.write(3);}
      lcd.setCursor(10,2);if(repeat==true) { lcd.print("X");} else { lcd.print("1");}
      if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(1,2);lcd.cursor();}
      if(pos==2) { lcd.setCursor(4,2);lcd.cursor();}
      if(pos==3) { lcd.setCursor(5,2);lcd.cursor();}
      if(pos==4) { lcd.setCursor(6,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(7,2);lcd.cursor();}
      if(pos==6) { lcd.setCursor(8,2);lcd.cursor();}
      if(pos==7) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(10,2);lcd.cursor();}
    }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else { lcd.noCursor();mode=51;}}
    if(digitalRead(button2)==false && edge2==true) { 
      if(pos==1) { startch--;if(startch==0) {startch=12;}}
      if(pos==2) { startraise= !startraise;}
      if(pos==3) { splitnumber4(startchval);numset[0]--;if(numset[0]<0) { numset[0]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==4) { splitnumber4(startchval);numset[1]--;if(numset[1]<0) { numset[1]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==5) { splitnumber4(startchval);numset[2]--;if(numset[2]<0) { numset[2]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==6) { splitnumber4(startchval);numset[3]--;if(numset[3]<0) { numset[3]=9;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==7) { repeat= !repeat;}
      if(startchval>1023) { startchval=1023;}
      edge2=false;scredge=true;}
    if(digitalRead(button3)==false && edge3==true) { 
      if(pos==1) { startch++;if(startch>12) {startch=1;}}
      if(pos==2) { startraise= !startraise;}
      if(pos==3) { splitnumber4(startchval);numset[0]++;if(numset[0]>9) { numset[0]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==4) { splitnumber4(startchval);numset[1]++;if(numset[1]>9) { numset[1]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==5) { splitnumber4(startchval);numset[2]++;if(numset[2]>9) { numset[2]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==6) { splitnumber4(startchval);numset[3]++;if(numset[3]>9) { numset[3]=0;} startchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==7) { repeat= !repeat;}
      if(startchval>1023) { startchval=1023;}
      edge3=false;scredge=true;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<7) {pos++;} else { lcd.noCursor();mode=51;}}
  }  
  if(mode==54)
  {
    //scheduled start
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[17]);scredge=false;lcd.setCursor(13,0);lcd.print("START");
      lcd.setCursor(0,2);lcd.print(inttostr2(timestart[0]));
      lcd.setCursor(3,2);lcd.print(inttostr2(timestart[1]));
      lcd.setCursor(10,2);lcd.print(inttostr2(timestart[2]));
      lcd.setCursor(13,2);lcd.print(inttostr2(timestart[3]));
      lcd.setCursor(16,2);lcd.print(timestart[4]);
      if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(0,2);lcd.cursor();}
      if(pos==2) { lcd.setCursor(3,2);lcd.cursor();}
      if(pos==3) { lcd.setCursor(10,2);lcd.cursor();}
      if(pos==4) { lcd.setCursor(13,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(16,2);lcd.cursor();}
      }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else { lcd.noCursor();mode=51;}}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
      if(pos==1) { timestart[0]--;if(timestart[0]<0) {timestart[0]=23;}}
      if(pos==2) { timestart[1]--;if(timestart[1]<0) {timestart[1]=59;}}
      if(pos==3) { timestart[2]--;if(timestart[2]<1) {timestart[2]=31;}}
      if(pos==4) { timestart[3]--;if(timestart[3]<1) {timestart[3]=12;}}
      if(pos==5) { timestart[4]--;if(timestart[4]<2000) {timestart[4]=2037;}}
      }
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
      if(pos==1) { timestart[0]++;if(timestart[0]>23) {timestart[0]=0;}}
      if(pos==2) { timestart[1]++;if(timestart[1]>59) {timestart[1]=0;}}
      if(pos==3) { timestart[2]++;if(timestart[2]>31) {timestart[2]=1;}}
      if(pos==4) { timestart[3]++;if(timestart[3]>12) {timestart[3]=1;}}
      if(pos==5) { timestart[4]++;if(timestart[4]>2037) {timestart[4]=2000;}}
      }
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<5) {pos++;} else { lcd.noCursor();mode=51;}}
  }  
  if(mode==55)
  {
    //stop by channel
    int ch=stopch-1;
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[16]);lcd.setCursor(0,0);lcd.print("STOP-CHANNEL");scredge=false;
      lcd.setCursor(20-unitstr[unit[ch]].length(),0);lcd.print(unitstr[unit[ch]]);
      lcd.setCursor(1,2);lcd.print(inttostr2(stopch));
      lcd.setCursor(5,2);lcd.print(inttostr4(stopchval));
      boolean neg=false;long var=map(stopchval, 0, 1023, minval[ch], maxval[ch]);
      if(var<0) { neg=true;} lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(var));
      lcd.setCursor(4,2);if(stopraise==true) { lcd.write(2);} else { lcd.write(3);}
      if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(1,2);lcd.cursor();}
      if(pos==2) { lcd.setCursor(4,2);lcd.cursor();}
      if(pos==3) { lcd.setCursor(5,2);lcd.cursor();}
      if(pos==4) { lcd.setCursor(6,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(7,2);lcd.cursor();}
      if(pos==6) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(8,2);lcd.cursor();}
    }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=52;}}
    if(digitalRead(button2)==false && edge2==true) { 
      if(pos==1) { stopch--;if(stopch==0) {stopch=12;}}
      if(pos==2) { stopraise= !stopraise;}
      if(pos==3) { splitnumber4(stopchval);numset[0]--;if(numset[0]<0) { numset[0]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==4) { splitnumber4(stopchval);numset[1]--;if(numset[1]<0) { numset[1]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==5) { splitnumber4(stopchval);numset[2]--;if(numset[2]<0) { numset[2]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==6) { splitnumber4(stopchval);numset[3]--;if(numset[3]<0) { numset[3]=9;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(stopchval>1023) { stopchval=1023;}
      edge2=false;scredge=true;}
    if(digitalRead(button3)==false && edge3==true) { 
      if(pos==1) { stopch++;if(stopch>12) {stopch=1;}}
      if(pos==2) { stopraise= !stopraise;}
      if(pos==3) { splitnumber4(stopchval);numset[0]++;if(numset[0]>9) { numset[0]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==4) { splitnumber4(stopchval);numset[1]++;if(numset[1]>9) { numset[1]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==5) { splitnumber4(stopchval);numset[2]++;if(numset[2]>9) { numset[2]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(pos==6) { splitnumber4(stopchval);numset[3]++;if(numset[3]>9) { numset[3]=0;} stopchval=1000*numset[0]+100*numset[1]+10*numset[2]+numset[3];}
      if(stopchval>1023) { stopchval=1023;}
      edge3=false;scredge=true;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<6) {pos++;} else { lcd.noCursor();mode=52;}}
  }  
  if(mode==56)
  {
    //scheduled stop
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[17]);scredge=false;lcd.setCursor(14,0);lcd.print("STOP");
      lcd.setCursor(0,2);lcd.print(inttostr2(timestop[0]));
      lcd.setCursor(3,2);lcd.print(inttostr2(timestop[1]));
      lcd.setCursor(10,2);lcd.print(inttostr2(timestop[2]));
      lcd.setCursor(13,2);lcd.print(inttostr2(timestop[3]));
      lcd.setCursor(16,2);lcd.print(timestop[4]);
      if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(0,2);lcd.cursor();}
      if(pos==2) { lcd.setCursor(3,2);lcd.cursor();}
      if(pos==3) { lcd.setCursor(10,2);lcd.cursor();}
      if(pos==4) { lcd.setCursor(13,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(16,2);lcd.cursor();}
      }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else { lcd.noCursor();mode=52;}}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
      if(pos==1) { timestop[0]--;if(timestop[0]<0) {timestop[0]=23;}}
      if(pos==2) { timestop[1]--;if(timestop[1]<0) {timestop[1]=59;}}
      if(pos==3) { timestop[2]--;if(timestop[2]<1) {timestop[2]=31;}}
      if(pos==4) { timestop[3]--;if(timestop[3]<1) {timestop[3]=12;}}
      if(pos==5) { timestop[4]--;if(timestop[4]<2000) {timestop[4]=2037;}}
      }
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
      if(pos==1) { timestop[0]++;if(timestop[0]>23) {timestop[0]=0;}}
      if(pos==2) { timestop[1]++;if(timestop[1]>59) {timestop[1]=0;}}
      if(pos==3) { timestop[2]++;if(timestop[2]>31) {timestop[2]=1;}}
      if(pos==4) { timestop[3]++;if(timestop[3]>12) {timestop[3]=1;}}
      if(pos==5) { timestop[4]++;if(timestop[4]>2037) {timestop[4]=2000;}}
      }
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<5) {pos++;} else { lcd.noCursor();mode=52;}}
  }  
  if(mode==57)
  {
    //stop by samples
    int ch=stopch-1;
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[18]);scredge=false;
      lcd.setCursor(12,2);lcd.print(longtostr8(stopsamples));
      if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(12,2);lcd.cursor();}
      if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
      if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
      if(pos==4) { lcd.setCursor(15,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(16,2);lcd.cursor();}
      if(pos==6) { lcd.setCursor(17,2);lcd.cursor();}
      if(pos==7) { lcd.setCursor(18,2);lcd.cursor();}
      if(pos==8) { lcd.setCursor(17,3);lcd.print("<##");lcd.setCursor(19,2);lcd.cursor();}
      
    }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=52;}}
    if(digitalRead(button2)==false && edge2==true) { 
      if(pos==1) { splitnumber8(stopsamples);numset[0]--;if(numset[0]<0) { numset[0]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==2) { splitnumber8(stopsamples);numset[1]--;if(numset[1]<0) { numset[1]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==3) { splitnumber8(stopsamples);numset[2]--;if(numset[2]<0) { numset[2]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==4) { splitnumber8(stopsamples);numset[3]--;if(numset[3]<0) { numset[3]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==5) { splitnumber8(stopsamples);numset[4]--;if(numset[4]<0) { numset[4]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==6) { splitnumber8(stopsamples);numset[5]--;if(numset[5]<0) { numset[5]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==7) { splitnumber8(stopsamples);numset[6]--;if(numset[6]<0) { numset[6]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==8) { splitnumber8(stopsamples);numset[7]--;if(numset[7]<0) { numset[7]=9;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      edge2=false;scredge=true;}
    if(digitalRead(button3)==false && edge3==true) { 
      if(pos==1) { splitnumber8(stopsamples);numset[0]++;if(numset[0]>9) { numset[0]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==2) { splitnumber8(stopsamples);numset[1]++;if(numset[1]>9) { numset[1]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==3) { splitnumber8(stopsamples);numset[2]++;if(numset[2]>9) { numset[2]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==4) { splitnumber8(stopsamples);numset[3]++;if(numset[3]>9) { numset[3]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==5) { splitnumber8(stopsamples);numset[4]++;if(numset[4]>9) { numset[4]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==6) { splitnumber8(stopsamples);numset[5]++;if(numset[5]>9) { numset[5]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==7) { splitnumber8(stopsamples);numset[6]++;if(numset[6]>9) { numset[6]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      if(pos==8) { splitnumber8(stopsamples);numset[7]++;if(numset[7]>9) { numset[7]=0;} stopsamples=10000000*numset[0]+1000000*numset[1]+100000*numset[2]+10000*numset[3]+1000*numset[4]+100*numset[5]+10*numset[6]+numset[7];}
      edge3=false;scredge=true;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<8) {pos++;} else { lcd.noCursor();mode=52;}}
  }  
  if(mode==6)
  {
    //interval
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[5]);drawframe(1);scredge=false;
      lcd.setCursor(12,2);lcd.print(longtostri6(interval));}
    if(pos==1) { lcd.setCursor(12,2);lcd.cursor();}
    if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
    if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
    if(pos==4) { lcd.setCursor(16,2);lcd.cursor();}
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=5;}}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
      if(pos==1) { splitnumber6(interval);numset[0]--;if(numset[0]<0) { numset[0]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(pos==2) { splitnumber6(interval);numset[1]--;if(numset[1]<0) { numset[1]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(pos==3) { splitnumber6(interval);numset[2]--;if(numset[2]<0) { numset[2]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(pos==4) { splitnumber6(interval);numset[3]--;if(numset[3]<0) { numset[3]=9;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(interval<100) { interval=100;}}
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
      if(pos==1) { splitnumber6(interval);numset[0]++;if(numset[0]>9) { numset[0]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(pos==2) { splitnumber6(interval);numset[1]++;if(numset[1]>9) { numset[1]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(pos==3) { splitnumber6(interval);numset[2]++;if(numset[2]>9) { numset[2]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(pos==4) { splitnumber6(interval);numset[3]++;if(numset[3]>9) { numset[3]=0;} interval=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3];}
      if(interval<100) { interval=100;}}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<4) {pos++;} else {lcd.noCursor();mode=51;}}
  }  
  if(mode==8)
  {
    //min
    boolean neg=false;
    int ch=chedit-1;
    if(minval[ch]<0) { neg=true;}
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[7]);lcd.setCursor(8,0);lcd.print(inttostr2(chedit));drawframe(1);scredge=false;
      lcd.setCursor(1,3);if(pos==1) { lcd.print("##");}
      lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print("+");}
      lcd.print(longtostrm6(minval[ch]));
      if(pos==1) { lcd.setCursor(12,2);lcd.cursor();}
      if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
      if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
      if(pos==4) { lcd.setCursor(15,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(16,2);lcd.cursor();}
      if(pos==6) { lcd.setCursor(18,2);lcd.cursor();}
      if(pos==7) { lcd.setCursor(19,2);lcd.cursor();}}
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=5;}}
    if(digitalRead(button2)==false && edge2==true) { 
      if(pos==1) { minval[ch]= -minval[ch];}
      if(pos==2) { splitnumber6(minval[ch]);numset[0]--;if(numset[0]<0) { numset[0]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==3) { splitnumber6(minval[ch]);numset[1]--;if(numset[1]<0) { numset[1]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==4) { splitnumber6(minval[ch]);numset[2]--;if(numset[2]<0) { numset[2]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==5) { splitnumber6(minval[ch]);numset[3]--;if(numset[3]<0) { numset[3]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==6) { splitnumber6(minval[ch]);numset[4]--;if(numset[4]<0) { numset[4]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==7) { splitnumber6(minval[ch]);numset[5]--;if(numset[5]<0) { numset[5]=9;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      edge2=false;scredge=true;}
    if(digitalRead(button3)==false && edge3==true) { 
      if(pos==1) { minval[ch]= -minval[ch];}
      if(pos==2) { splitnumber6(minval[ch]);numset[0]++;if(numset[0]>9) { numset[0]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==3) { splitnumber6(minval[ch]);numset[1]++;if(numset[1]>9) { numset[1]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==4) { splitnumber6(minval[ch]);numset[2]++;if(numset[2]>9) { numset[2]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==5) { splitnumber6(minval[ch]);numset[3]++;if(numset[3]>9) { numset[3]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==6) { splitnumber6(minval[ch]);numset[4]++;if(numset[4]>9) { numset[4]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==7) { splitnumber6(minval[ch]);numset[5]++;if(numset[5]>9) { numset[5]=0;} minval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      edge3=false;scredge=true;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<7) {pos++;} else {lcd.noCursor();mode=9;pos=1;}}
  }  
  if(mode==9)
  {
    //max
    boolean neg=false;
    int ch=chedit-1;
    if(maxval[ch]<0) { neg=true;}
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[8]);lcd.setCursor(8,0);lcd.print(inttostr2(chedit));drawframe(1);scredge=false;
      lcd.setCursor(12,2);if(neg) { lcd.print("-");} else { lcd.print("+");}
      lcd.print(longtostrm6(maxval[ch]));
      if(pos==1) { lcd.setCursor(12,2);lcd.cursor();}
      if(pos==2) { lcd.setCursor(13,2);lcd.cursor();}
      if(pos==3) { lcd.setCursor(14,2);lcd.cursor();}
      if(pos==4) { lcd.setCursor(15,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(16,2);lcd.cursor();}
      if(pos==6) { lcd.setCursor(18,2);lcd.cursor();}
      if(pos==7) { lcd.setCursor(19,2);lcd.cursor();}}
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=8;pos=7;}}
    if(digitalRead(button2)==false && edge2==true) { 
      if(pos==1) { maxval[ch]= -maxval[ch];}
      if(pos==2) { splitnumber6(maxval[ch]);numset[0]--;if(numset[0]<0) { numset[0]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==3) { splitnumber6(maxval[ch]);numset[1]--;if(numset[1]<0) { numset[1]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==4) { splitnumber6(maxval[ch]);numset[2]--;if(numset[2]<0) { numset[2]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==5) { splitnumber6(maxval[ch]);numset[3]--;if(numset[3]<0) { numset[3]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==6) { splitnumber6(maxval[ch]);numset[4]--;if(numset[4]<0) { numset[4]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==7) { splitnumber6(maxval[ch]);numset[5]--;if(numset[5]<0) { numset[5]=9;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      edge2=false;scredge=true;}
    if(digitalRead(button3)==false && edge3==true) { 
      if(pos==1) { maxval[ch]= -maxval[ch];}
      if(pos==2) { splitnumber6(maxval[ch]);numset[0]++;if(numset[0]>9) { numset[0]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==3) { splitnumber6(maxval[ch]);numset[1]++;if(numset[1]>9) { numset[1]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==4) { splitnumber6(maxval[ch]);numset[2]++;if(numset[2]>9) { numset[2]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==5) { splitnumber6(maxval[ch]);numset[3]++;if(numset[3]>9) { numset[3]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==6) { splitnumber6(maxval[ch]);numset[4]++;if(numset[4]>9) { numset[4]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      if(pos==7) { splitnumber6(maxval[ch]);numset[5]++;if(numset[5]>9) { numset[5]=0;} maxval[ch]=100000*numset[0]+10000*numset[1]+1000*numset[2]+100*numset[3]+10*numset[4]+numset[5];}
      edge3=false;scredge=true;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<7) {pos++;} else {lcd.noCursor();mode=10;}}
  }  
  if(mode==10)
  {
    //unit
    int ch=chedit-1;
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[9]);lcd.setCursor(8,0);lcd.print(inttostr2(chedit));drawframe(1);
      lcd.setCursor(18-unitstr[unit[ch]].length(),2);lcd.print("["+unitstr[unit[ch]]);
      lcd.setCursor(10,2);lcd.print(inttostr2(unit[ch]+1));scredge=false;}
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=9;pos=7;}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;unit[ch]--;if(unit[ch]<0) { unit[ch]=49;} scredge=true;}
    if(digitalRead(button3)==false && edge3==true) { edge3=false;unit[ch]++;if(unit[ch]>49) { unit[ch]=0;} scredge=true;}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=5;}
  }  
  if(mode==7)
  {
    //time and date
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[6]);lcd.setCursor(18,1);lcd.print(inttostr2(chcount));scredge=false;}
    if(millis()-before>=1000) 
    {
      before1=millis();
      if (RTC.read(tm)) {
        lcd.setCursor(0,2);
        lcd.print(inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second)+"  "+inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year));
        } else {
        if (RTC.chipPresent()) {
          Serial.println("The DS1307 is stopped.  Please run the SetTime");
          Serial.println("example to initialize the time and begin running.");
          Serial.println();
          } else {
          Serial.println("DS1307 read error!  Please check the circuitry.");
          Serial.println();
          }
        mode=14;scredge=true;
        }
      }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=52;}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;chcount--;if(chcount<1) { chcount=12;}}
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;chcount++;if(chcount>12) { chcount=1;}}
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;mode=11;pos=1;
    rtcset[0]=tm.Hour;rtcset[1]=tm.Minute;rtcset[2]=tm.Second;rtcset[3]=tm.Day;rtcset[4]=tm.Month;rtcset[5]=tmYearToCalendar(tm.Year);}
  }  
  if(mode==11)
  {
    //rtc
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[10]);scredge=false;
      lcd.setCursor(12,1);lcd.print(inttostr2(rtcset[0]));
      lcd.setCursor(15,1);lcd.print(inttostr2(rtcset[1]));
      lcd.setCursor(18,1);lcd.print(inttostr2(rtcset[2]));
      lcd.setCursor(10,2);lcd.print(inttostr2(rtcset[3]));
      lcd.setCursor(13,2);lcd.print(inttostr2(rtcset[4]));
      lcd.setCursor(16,2);lcd.print(rtcset[5]);
      if(pos==1) { lcd.setCursor(1,3);lcd.print("##");lcd.setCursor(12,1);lcd.cursor();}
      if(pos==2) { lcd.setCursor(15,1);lcd.cursor();}
      if(pos==3) { lcd.setCursor(18,1);lcd.cursor();}
      if(pos==4) { lcd.setCursor(10,2);lcd.cursor();}
      if(pos==5) { lcd.setCursor(13,2);lcd.cursor();}
      if(pos==6) { lcd.setCursor(17,3);lcd.print("Set");lcd.setCursor(16,2);lcd.cursor();}
      }
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;if(pos>1) {pos--;} else {lcd.noCursor();mode=7;}}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;
      if(pos==1) { rtcset[0]--;if(rtcset[0]<0) {rtcset[0]=23;}}
      if(pos==2) { rtcset[1]--;if(rtcset[1]<0) {rtcset[1]=59;}}
      if(pos==3) { rtcset[2]--;if(rtcset[2]<0) {rtcset[2]=59;}}
      if(pos==4) { rtcset[3]--;if(rtcset[3]<1) {rtcset[3]=31;}}
      if(pos==5) { rtcset[4]--;if(rtcset[4]<1) {rtcset[4]=12;}}
      if(pos==6) { rtcset[5]--;if(rtcset[5]<2000) {rtcset[5]=2037;}}
      }
    if(digitalRead(button3)==false && edge3==true) { edge3=false;scredge=true;
      if(pos==1) { rtcset[0]++;if(rtcset[0]>23) {rtcset[0]=0;}}
      if(pos==2) { rtcset[1]++;if(rtcset[1]>59) {rtcset[1]=0;}}
      if(pos==3) { rtcset[2]++;if(rtcset[2]>59) {rtcset[2]=0;}}
      if(pos==4) { rtcset[3]++;if(rtcset[3]>31) {rtcset[3]=1;}}
      if(pos==5) { rtcset[4]++;if(rtcset[4]>12) {rtcset[4]=1;}}
      if(pos==6) { rtcset[5]++;if(rtcset[5]>2037) {rtcset[5]=2000;}}
      }
    if(digitalRead(button4)==false && edge4==true) { edge4=false;scredge=true;if(pos<6) {pos++;} else {mode=12;}}
  }  
  if(mode==12)
  { //RTS set notify
    lcd.noCursor();
    lcd.setCursor(0,3);lcd.print("  TIME & DATE  SET  ");
    setTime(rtcset[0],rtcset[1],rtcset[2],rtcset[3],rtcset[4],rtcset[5]);
    RTC.set(now());
    delay(1000);scredge=true;mode=11;
  }
  
  if(mode==13)
  {
    //overview
    int ch=chedit-1;
    boolean neg=false;
    if(scredge==true) { lcd.setCursor(0,0);lcd.print(screen[11]);lcd.setCursor(1,3);lcd.write(8);
      lcd.setCursor(17,0);lcd.print(inttostr2(chedit));
      if(minval[ch]<0) { neg=true;} lcd.setCursor(4,1);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(minval[ch]));
      neg=false;
      if(maxval[ch]<0) { neg=true;} lcd.setCursor(4,2);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(maxval[ch]));
      lcd.setCursor(20-unitstr[unit[ch]].length(),1);lcd.print(unitstr[unit[ch]]);
      scredge=false;}
    if(digitalRead(button1)==false && edge1==true) { edge1=false;scredge=true;mode=0;}
    if(digitalRead(button2)==false && edge2==true) { edge2=false;scredge=true;chedit++;if(chedit>chcount) { chedit=1;}}

    long var;
    if(ch==0) { var=analogRead(input1);}
    if(ch==1) { var=analogRead(input2);}
    if(ch==2) { var=analogRead(input3);}
    if(ch==3) { var=analogRead(input4);}
    if(ch==4) { var=analogRead(input5);}
    if(ch==5) { var=analogRead(input6);}
    if(ch==6) { var=analogRead(input7);}
    if(ch==7) { var=analogRead(input8);}
    if(ch==8) { var=analogRead(input9);}
    if(ch==9) { var=analogRead(input10);}
    if(ch==10){ var=analogRead(input11);}
    if(ch==11){ var=analogRead(input12);}
    lcd.setCursor(13,2);lcd.print("In:"+str4(String(var)));
    var=map(var, 0, 1023, minval[ch], maxval[ch]);
    if(var<0) { neg=true;} lcd.setCursor(12,3);if(neg) { lcd.print("-");} else { lcd.print(" ");} lcd.print(longtostrm6(var));delay(50);
  }

  if(mode==100)
  {
    //debug
//    if(scredge==true) { lcd.clear();lcd.setCursor(0,0);lcd.print("DEBUG");scredge=false;}  
    lcd.clear();
    
    tmElements_t testtm;
    testtm.Hour=timestart[0];testtm.Minute=timestart[1];testtm.Second=0;testtm.Day=timestart[2];testtm.Month=timestart[3];testtm.Year=CalendarYrToTm(timestart[4]);
    RTC.read(tm);
    time_t time1=makeTime(tm);
    time_t time2=makeTime(testtm);
    if(time1<time2) { lcd.setCursor(0,0);lcd.print("-");} else { lcd.setCursor(0,0);lcd.print("+");}
    lcd.setCursor(0,2);
    lcd.print(inttostr2(tm.Hour)+":"+inttostr2(tm.Minute)+":"+inttostr2(tm.Second)+"  "+inttostr2(tm.Day)+"."+inttostr2(tm.Month)+"."+tmYearToCalendar(tm.Year));
    lcd.setCursor(0,3);
    lcd.print(inttostr2(testtm.Hour)+":"+inttostr2(testtm.Minute)+":"+inttostr2(testtm.Second)+"  "+inttostr2(testtm.Day)+"."+inttostr2(testtm.Month)+"."+tmYearToCalendar(testtm.Year));
    
    delay(100);
    if(digitalRead(button5)==false && edge5==true) { edge5=false;scredge=true;mode=1;}
  }
}
a aj kompletnu schemu...
Prílohy
data logger.pdf
(72.95 KiB) 86 stiahnutí
0

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1375
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: 12-kanalovy Data Logger

Príspevok od používateľa TomasNM » 23 Sep 2016, 22:44

Mimochodom,uz 2 mesiace spat som si vyrobil prvu periferiu(s predstihom).
Jedna sa o diferencialny zosilovac pre meranie prudu pre shunt-rezistory 75mΩ.
Kalibrovatelny offset a gain.
Ako referencia nuly je pouzita zabudovana referencia v LM317,ktora je cca 1.25V.
+1.25V je nasledne negovane na -1.25V a cez nulovaci trimer a pomocne predradne rezistory(kvoli zmenseniu rozsahu) je offsetovany vystup.
Podobne redukovany chod ma aj gain trimer(predradnikom a bocnikmi),ktorym je kalibrovane zosilnenie 66,6666~ (0-75mV -> 0-5V).

Tento vyrobok vypada trosku lepsie zvnutra,pretoze sa jedna o jednoduchu DPS.
Prílohy
20160923_223507.jpg
20160923_225516.jpg
current probe 2.pdf
(62.74 KiB) 84 stiahnutí
0

Používateľov profilový obrázok
Zeren
Nový člen
Nový člen
Príspevky: 81
Dátum registrácie: 09 Nov 2013, 17:28

Re: 12-kanalovy Data Logger

Príspevok od používateľa Zeren » 06 Okt 2016, 10:47

Máš tam přesný poměry těch 10k/2k páru ve vstupu, nebo ten zesilovač měří s velkou CM konverzí? Samozřejmě záleží jak moc je celé zapojení plovoucí vůči měřenému napětí na odporu.
Vzhledem k ceně ad826 se divím, že jsi rovnou nepoužil diferenční zesilovač, který by tento problém aspoň částečně řešil, například LT1990?
0
It's better to be hated for who you are, than to be loved for who you are not.

TomasNM
Zaslúžilý člen
Zaslúžilý člen
Príspevky: 1375
Dátum registrácie: 22 Jan 2012, 19:24
Bydlisko: Nové Mesto nad Váhom
Vek: 43

Re: 12-kanalovy Data Logger

Príspevok od používateľa TomasNM » 06 Okt 2016, 11:51

Niektore pojmy som nepochopil. Co je CM konverzia? Ako to myslis,plavajuce zapojenie voci meranemu napatiu?
Neviem,kolko stoji AD826,ale mal som ho v sufliku,tak som ho pouzil.
Presnosti vstupnych delicov som nijako extra neriesil,ale su z jednej varky.
Na kalibraciu tam mam dva trimre,jednym sa nastavuje offset a druhym gain.
To mi staci a je to dostatocne presne pre moje pouzitie.
0

Používateľov profilový obrázok
Zeren
Nový člen
Nový člen
Príspevky: 81
Dátum registrácie: 09 Nov 2013, 17:28

Re: 12-kanalovy Data Logger

Príspevok od používateľa Zeren » 06 Okt 2016, 15:49

Jde o to, že pokud nejsou poměry těchto odporů stejné, tak dochází ke konverzi souhlasného napětí na vstupech diferenčního zesilovače na diferenční napětí, které je pak zesilováno. U diferenčního zesilovače se požaduje, aby měl minimální zesíleni (maximální potlačení) tohoto souhlasného napětí na vstupech. Toto zapojení bude fungovat uspokojivě jenom pokud bude souhlasné napětí na vstupech zesilovače nízké.

Příkladem může být, že kdyby jsi měl snímací odpor na 12V větvi, tak by se ti na výstupu objevilo napětí 0,390V (v nejhorším případě pro 1% odpory), aniž by snímacím odporem tekl jakýkoliv proud.

Odvození zde:
http://masteringelectronicsdesign.com/t ... or-part-1/

Kalkulačka maximální konverze pro danou toleranci rezistorů zde:
http://masteringelectronicsdesign.com/d ... alculator/
0
It's better to be hated for who you are, than to be loved for who you are not.

Napísať odpoveď