два 8-ми сегментных индикаторов

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

d13lider пишет:

я просто не уверен что там ток 30-35А. а если 50? что бы запасик был) по рассчетам 30-35А

Ну, возьмите на 50А - http://www.chipdip.ru/product/ts132-50-8/

Вот здесь подешевле - http://www.promelectrica.ru/catalog/9898989/ts1325012_analog/

Вот на 63А - http://www.platan.ru/cgi-bin/qwery.pl/id=433668020

А вот 100А всего за 460 рублей а вот ещё один.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

Думаю, да. Симисторы на пользовал на таких токах, но вот полевой транзистор IRFZ44N (по даташиту - 49А) в таком же точно корпусе у меня работает и до 42 ампер отлично держит, только радиатор хороший нужен.

хорошо, спасибо) буду пробовать.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

 

Ну, возьмите на 50А - http://www.chipdip.ru/product/ts132-50-8/

Вот здесь подешевле - http://www.promelectrica.ru/catalog/9898989/ts1325012_analog/

Вот на 63А - http://www.platan.ru/cgi-bin/qwery.pl/id=433668020

А вот 100А всего за 460 рублей а вот ещё один.

я просто не хотел заказывать. ждать не охото))) у нас тут магазин большой есть. но по прайсу максималка на 40А. поэтому думал может 2 взять. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

d13lider пишет:

я просто не хотел заказывать. ждать не охото))) у нас тут магазин большой есть. но по прайсу максималка на 40А. поэтому думал может 2 взять. 

Если заказть в платане или chipdip- эжать недолго. Они (по крайней мере вторые) доставляют в евросеть, а это не почта россии - доходит меньше, чем за неделю

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

 

Если заказть в платане или chipdip- эжать недолго. Они (по крайней мере вторые) доставляют в евросеть, а это не почта россии - доходит меньше, чем за неделю

ну попробую сначала взять у себя на 40, поставлю радиатор хороший, если будет все равно греться сильно. там может спереди. или ноги. будем заказывать, а этот поставлю потом куда нибудь домой(если не сгорит) :), а вот еще вопросик, мне хотелось бы точку поставить. в 1 регистре. я думал сделать что то типа такого: если выводится на экран 1-я цифра, там стояла точка. что бы получались цифры 0.01 ; 0.02; 0.68; 5.50 и т.д. это так, просто что бы постоянно она горела в 1 регистре

 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

разобрался 

072 void putNumber(const unsigned number) {
073     static const uint8_t allDigits[] = { D0, D1, D2, D3, D4, D5, D6, D7, D8, D9 };
074     div_t divRes = div(number, 100);
075      putMask((allDigits[divRes.quot]|MASK_DP), 0);
076     divRes = div(divRes.rem, 10);
077     putMask(allDigits[divRes.quot], 1);
078     putMask(allDigits[divRes.rem], 2);
079

}

в строке 75 изменил, добавив туда маску напрямую. 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, если всегда в одном месте, то правильно.

Кстати, помните, я Вам проинициализировал массив масок тремя минусиками? Моветую остаить. Я всегда так делаю. Если горят минусы во всех позиция - типа большой прочерк, значит полезной информации пока не поступало.

Д и ещё. Нашу программу легко упрятать в отдельный файл, чтобы места не занимала перед глазами - будет типа библиотеки. Умеете?

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

Ну нашу программу до библиотеки еще дописать надо, что бы было типа segment.Print(abc123) и она писала на 3-ех, 4-ех, 8-и разрядных "экранах" просто задав пины и количество разрядов. Такое сможем сделать? И писал выбором бегущая строка, либо постоянное свечение)))) вот было бы классно

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

Кстати, помните, я Вам проинициализировал массив масок тремя минусиками? Моветую остаить. Я всегда так делаю. Если горят минусы во всех позиция - типа большой прочерк, значит полезной информации пока не поступало.


Да, заметил сегодня такое, когда методом тыка проверял программу, куда вставить маску точки.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

d13lider пишет:
Ну нашу программу до библиотеки еще дописать надо, что бы было типа segment.Print(abc123) и она писала на 3-ех, 4-ех, 8-и разрядных "экранах" просто задав пины и количество разрядов. Такое сможем сделать? И писал выбором бегущая строка, либо постоянное свечение)))) вот было бы классно

Ну, делайте, тепрь у Вас знаний достаточно.

Я такие вещи делаю по-другому. Дело в том, что я впервые увидел микроконтроллер (тогда ещё не было такого слова) в специзделиях в давно забытые годы. Было там если склероз не изменяет 96 слов оперативной памяти и что-то около килобайта памяти для программы. А впихивать приходилось системы навигации, фурье-анализ и прочие приятные вещи. Да и сейчас, в нынешнем хобби, макетирую я на чём попало, а конечном изделии мой основной инструмент вовсе не мега и даже не нано, а тини с их крохотной памятью.

Поэтому свои "библиотеки" я пишу на уровне препроцессора. Если, допустим, мне нужно три разряда - ни одного байта нужного для работы с четырьмя разрядами в окончательный код не попадает. Это совсем другая техника программирования. И библиотека для семисегментника у меня есть - общие анод/катод, подключение прямо, через сдвиговый регистр или через TLC5940, динамическая индикация или статическая - всё поддерживается, но всё на уровне препроцессора. Окончательный код выглядит как специально написанный для данного конкретного случая - никакой универсальности.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

Хорошо, очень интересно это изучать, с моим среднем образованием даже вовсе не трудно, спасибо за помощь)

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015
void setupTimer2(void) {
  PRR &= ~(1 << PRTIM1);  // Убедимся, что таймер 1 не отключен
  TCCR1A = 0;         // Установим Normal режим
  TCCR1B = PRESACLER;   // Установим делитель частоты
  TCNT1 = TICKS;        // Установим счётчик
  TIMSK1 |= (1 << TOIE1); // Разрешим прерывание по переполнению
  TIFR1 = 1;          //  Очистим Очистим флаг прерывания (если он взведён)
}
//
// Обработка прерывания по переполнению
//
ISR(TIMER1_OVF_vect) {    // т.е. эта функция будет прокручиватся каждый раз когда таймер переполнится????
  TCNT1 = TICKS;        // Установим счётчик для следующего прерывания
  //
  //  Покажем очередную цифру, как мы это делали раньше
  //
  static int8_t currentDigit = 0;
  static const int8_t all_postions[] = { PIN_DIG1, PIN_DIG2, PIN_DIG3 };
  for (register int8_t i = 0; i < TOTAL_DIGITS; i++) {
    digitalWrite(all_postions[i], currentDigit != i);

  }
  setRawSegments(maskArray[currentDigit]);
  currentDigit = (currentDigit + 1) % TOTAL_DIGITS;   // В следующий раз показываем другую цифру


}

а можно еще раз уточнить, вот строка с 12 по 27 это будет все крутится каджый раз когдабудет переполнятся таймер?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Да, конечно. Но здесь почти всё совершенно необходимо. Лишний здесь только цикл 19-21, веренее не совсем лишний - он гасит все цифры, а зажигает новую, которая должна включиться. В идеале он должен гасить не все, а  только ту, что в данный момент горит, предполагая, что остальные гасить не надо. Хотите, сделаем, но сделано так, чтобы не думалось ни о начальных значениях, ни о возможных сбоях в управлении.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

А зачем мы объявляем переменную каждый раз? В строке 17

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

в общем я понял что таймер наподобие "loop"а циклически прокручивает, только loop прокручивает когда весь код пройдет, а таймер через заданный промежуток времени, правильно думаю?

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Перемнная строке 17 объявлена статической. Значит, инициализируется она только один раз, и, что очень важно - она сохраняет своё значение между вызовами функции. Именно это нам позволяет при каждом новом вызове помнить какой разряд высвечивался в прошлый раз.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

d13lider пишет:

в общем я понял что таймер наподобие "loop"а циклически прокручивает, только loop прокручивает когда весь код пройдет, а таймер через заданный промежуток времени, правильно думаю?

Ну, если быть точнее, таймер сам по себе ничего не прокручивает. Он просто тикает и, если закзано, вызывает программу-обработчик при переполнении. А уэ что та делает его (таймера) абсолютно не волнует.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

 

Ну, если быть точнее, таймер сам по себе ничего не прокручивает. Он просто тикает и, если закзано, вызывает программу-обработчик при переполнении. А уэ что та делает его (таймера) абсолютно не волнует.

ну да, я это и имел ввиду. я просто делал проект по автозапуску двигателя, и мне надо было читать обороты тахометра, а без таймера не получалось ничего. неправильные были показания, на самом делел 2000 а пишет то 6000 то 4000 то 2000.... вот буду переделывать на таймер, думаю заработает. 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

вот что получилось, работает отлично, но почему-то прошивку заливаешь, снимаешь питание с ардуинки и прошивка слетает, а вместо нее встает заводской "блинк"

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

может кому надо, набросал скетч для проверки правильности подключения индикатора. смысл такой. заливаешь скетч в ардуинку, открываешь монитор порта и вводишь туда "1"  - 1 разряд,  "2"  - 2 разряд,  "3"  - 3 разряд, "A"- сегмент А, "B"- сегмент B,"C"- сегмент C,

"D"- сегмент D, "E"- сегмент E, "F"- сегмент F, "G"- сегмент G, "H"- сегмент "ТОЧКA" а, если ввести повторно эти сегменты или передать в порт "0" то все сегменты отключатся. это для индикатора с общим катодом


#define PIN_A 9 // пин 9 сегмент A
#define PIN_B 8 // пин 8 Сегмент B
#define PIN_C 7 // пин 7 Сегмент C
#define PIN_D 6 // и т.д.
#define PIN_E 5
#define PIN_F 4
#define PIN_G 3
#define PIN_DP  2

#define PIN_DIG1  10 // пин 10, 1 разряд
#define PIN_DIG2  11// пин 11, 2 разряд
#define PIN_DIG3  12// пин 12, 3 разряд




int analogValue = 0;
int incomingByte = 0;
int smena1 = HIGH;
int smena2 = HIGH;
int smena3 = HIGH;
int smena4 = LOW;
int smena5 = LOW;
int smena6 = LOW;
int smena7 = LOW;
int smena8 = LOW;
int smena9 = LOW;
int smena10 = LOW;
int smena11 = LOW;


void setup() {
  
  Serial.begin(9600);

  pinMode(12, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(2, OUTPUT);
  
}

void loop()  {
  
  if (Serial.available() > 0)
  {
    incomingByte = Serial.read();
    Serial.print("I received: ");
    Serial.println(incomingByte, DEC);
  }
 
  if (incomingByte == 48)
  {
    smena1 = HIGH;
    smena2 = HIGH;
    smena3 = HIGH;
    smena4 = LOW;
    smena5 = LOW;
    smena6 = LOW;
    smena7 = LOW;
    smena8 = LOW;
    smena9 = LOW;
    smena10 = LOW;
    smena11 = LOW;


  }
  else if (incomingByte == 51)
  {
    smena1 = !smena1;
    incomingByte = 0;
  }
  else if (incomingByte == 50)
  {
    smena2 = !smena2;
    incomingByte = 0;
  }
  else if (incomingByte == 49)
  {
    smena3 = !smena3;
    incomingByte = 0;
  }
  else if (incomingByte == 97)
  {
    smena4 = !smena4;
    incomingByte = 0;
  }
  else if (incomingByte == 98)
  {
    smena5 = !smena5;
    incomingByte = 0;
  }
  else if (incomingByte == 99)
  {
    smena6 = !smena6;
    incomingByte = 0;
  }
  else if (incomingByte == 100)
  {
    smena7 = !smena7;
    incomingByte = 0;
  }
  else if (incomingByte == 101)
  {
    smena8 = !smena8;
    incomingByte = 0;
  }
  else if (incomingByte == 102)
  {
    smena9 = !smena9;
    incomingByte = 0;
  }
  else if (incomingByte == 103)
  {
    smena10 = !smena10;
    incomingByte = 0;
  }
  else if (incomingByte == 104)
  {
    smena11 = !smena11;
    incomingByte = 0;
  }

  digitalWrite(PIN_DIG3, smena1);
  digitalWrite(PIN_DIG2, smena2);
  digitalWrite(PIN_DIG1, smena3);
  digitalWrite(PIN_A, smena4);
  digitalWrite(PIN_B, smena5);
  digitalWrite(PIN_C, smena6);
  digitalWrite(PIN_D, smena7);
  digitalWrite(PIN_E, smena8);
  digitalWrite(PIN_F, smena9);
  digitalWrite(PIN_G, smena10);
   digitalWrite(PIN_DP, smena11);

}

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

d13lider пишет:

 

работает отлично, но почему-то прошивку заливаешь, снимаешь питание с ардуинки и прошивка слетает, а вместо нее встает заводской "блинк"

Хрена-се! Впервые слышу о таком глюке! Он что, самоперепрошивается? Не, так не бывает! :) Попробуйте в аппаратном это обсудить.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

 

Хрена-се! Впервые слышу о таком глюке! Он что, самоперепрошивается? Не, так не бывает! :) Попробуйте в аппаратном это обсудить.

почитал, советуют на reset, 5v кинтуть

китай...

домойприду проверю.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

d13lider пишет:

почитал, советуют на reset, 5v кинтуть

китай...

домойприду проверю.

Тока через 10К резистор!!!

А то блин, при ресете КЗ будет

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

 

Тока через 10К резистор!!!

А то блин, при ресете КЗ будет

о!!! точно!! а я думал как же ресет при прошивке будет происходить... а в каких еще случаях ресет происходит? не подскажете?

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Ну, при нажатии кнопки, при прошивке. А также в любом случае, если Вы специально заводите туда дорожку и подаёте на неё Low. Например, у меня как-то был таким образом реализован внешний watchdog на 555 таймере.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

Ну, при нажатии кнопки, при прошивке. А также в любом случае, если Вы специально заводите туда дорожку и подаёте на неё Low. Например, у меня как-то был таким образом реализован внешний watchdog на 555 таймере.

ну в общем я думаю если выпаять кнопку от случайных нажатий и закоротить контакт после прошивки, можно и без резистора обойтись. ну это я так, рассуждаю, если резистор не прокатит. попробую на 10к, если не хватит на 10 поставлю на 1к, а если и так не получится  вообще накоротко сделаю. 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

в общем, я дома, попробовал все. резистор ставил и "накоротко" замыкал ничего не помогает. но заметил такую вещь. если не подключать к компьютеру. а допустим взять зарядку от телефона и подключить как питание ардуино. то все работает хорошо. ничего не слетает. как только подключу к копмьютеру. прошивка слетает. с чем может быть связанно. не понимаю. может драйвер на ch340 поставил такой.... в общем очень отлично все работает, через пару дней выложу видео как работает на споттере и полную схему. если будет работать))) 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

вот такое устройство получилось))) работает супер)

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

https://youtu.be/z6lFHSno8NU вот видео)

ded69
Offline
Зарегистрирован: 28.03.2016

Всем Привет! Прочитал с удовольствием.Хотел сам реализовать такое; в итоге ничего за месяц и не вышло. Тема про Споттер на сайте websvarka.ru Контроллер точечной сварки(споттера) всё подробно--с печатными платами с нех. файлами и т.д. Много вариантов по управлению в разных версиях. Просто хотел сам попробовать т.к. ардуинки есть а заказ из Китая  для споттера ещё небыл доставлен. Буду реализовывать на АТТИННИ2313. Советую посетить сайт. И ещё если можно то весь скетч // Пожалуйста в студию// для общего развития желательно с подробными комментариями.

 

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

Сегодня вечером или в понедельник выложу все, только печатку сами разведете, потому что я делал большую ее, а схему выложу

ded69
Offline
Зарегистрирован: 28.03.2016

Я так понял всё управление "220" через пускатель?

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

Ну да

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

//
//  Определение пинов для сегментов
//  (поставьте Ваши пины, у меня мелкий экран и плохо видно какие там у Вас)
//
#define PIN_A 9
#define PIN_B 8
#define PIN_C 7
#define PIN_D 6
#define PIN_E 5
#define PIN_F 4
#define PIN_G 3
#define PIN_DP  2

#define PIN_DIG1  10
#define PIN_DIG2  11
#define PIN_DIG3  12

#define vihod  13
#define knopka1  A0
#define knopka2  A1
#define knopka3  A2


//
//
//
#define  PRESACLER (1<<CS11)|(1<<CS10) //  Соответствует делителю частоты 64
#define TICKS   ((uint16_t)(65536ul-1666ul)) // Оставляет 1666 тиков до переполнения



//
//  Определение пинов для цифр
//  (поставьте Ваши пины, у меня мелкий экран и плохо видно какие там у Вас)
//


//
//  Определение масок для сегментов
//
#define MASK_A  (1 << 0)
#define MASK_B  (1 << 1)
#define MASK_C  (1 << 2)
#define MASK_D  (1 << 3)
#define MASK_E  (1 << 4)
#define MASK_F  (1 << 5)
#define MASK_G  (1 << 6)
#define MASK_DP   (1 << 7)


//
//  Определение цифр через маски сегментов
//
#define D0  (MASK_A | MASK_B | MASK_C | MASK_D | MASK_E | MASK_F)
#define D1  (MASK_B | MASK_C)
#define D2  (MASK_A | MASK_B | MASK_G | MASK_D | MASK_E)
#define D3  (MASK_A | MASK_B | MASK_C | MASK_D | MASK_G)
#define D4  (MASK_B | MASK_C | MASK_G | MASK_F)
#define D5  (MASK_A | MASK_C | MASK_D | MASK_F | MASK_G)
#define D6  (MASK_A | MASK_C | MASK_D | MASK_E | MASK_F | MASK_G)
#define D7  (MASK_A | (MASK_B | MASK_C))
#define D8  (MASK_A | MASK_B | MASK_C | MASK_D | MASK_E | MASK_F | MASK_G)
#define D9  (MASK_A | MASK_B | MASK_C | MASK_D | MASK_F | MASK_G)
#define D10  (MASK_DP)

#define  TOTAL_DIGITS  3


unsigned long startstop = 0;
unsigned long currentMillis = 0;
unsigned long dlya_sekund = 0;
unsigned long dlya_sekund1 = 0;

const int kolichestvo_sekund = 10;


int schet = 20;
int vihodState = HIGH;
int val = 0;
int dlya_puska = 0;
int val1 = 0;

int polozhenie_knopki =0;
static int8_t currentDigit = 0;
volatile int8_t maskArray[TOTAL_DIGITS] = { MASK_G, MASK_G, MASK_G, };


//
// Функция складывает готовую маску в массив масок
//
inline void putMask(const int8_t mask, const int8_t pos) {
  if (pos < TOTAL_DIGITS) maskArray[pos] = mask;

}

//
// Функция разделяет число на сотни, десятки и единицы и складывает в массив масок
//  сотни в позицию 2
//  десятки в позицию 1
//  единицы в позицию 0
//
void putNumber(const unsigned number) {
  static const int8_t allDigits[] = { D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10 };
  div_t divRes = div(number, 100);
  putMask((allDigits[divRes.quot] | MASK_DP), 0);
  divRes = div(divRes.rem, 10);
  putMask(allDigits[divRes.quot], 1);
  putMask(allDigits[divRes.rem], 2);

}

//
//  Функция устанавливает по маске - параметру (HIGH-горит, LOW-не горит)
//
void setRawSegments(const int8_t mask) {
  digitalWrite(PIN_A, mask & MASK_A);
  digitalWrite(PIN_B, mask & MASK_B);
  digitalWrite(PIN_C, mask & MASK_C);
  digitalWrite(PIN_D, mask & MASK_D);
  digitalWrite(PIN_E, mask & MASK_E);
  digitalWrite(PIN_F, mask & MASK_F);
  digitalWrite(PIN_G, mask & MASK_G);
  digitalWrite(PIN_DP, mask & MASK_DP);
}

//
// Инициализация таймера. делается один раз
//
void setupTimer2(void) {
  PRR &= ~(1 << PRTIM1);  // Убедимся, что таймер 1 не отключен
  TCCR1A = 0;         // Установим Normal режим
  TCCR1B = PRESACLER;   // Установим делитель частоты
  TCNT1 = TICKS;        // Установим счётчик
  TIMSK1 |= (1 << TOIE1); // Разрешим прерывание по переполнению
  TIFR1 = 1;          //  Очистим Очистим флаг прерывания (если он взведён)
}
//
// Обработка прерывания по переполнению
//
ISR(TIMER1_OVF_vect) {
  TCNT1 = TICKS;        // Установим счётчик для следующего прерывания
  //
  //  Покажем очередную цифру, как мы это делали раньше
  //

  static const int8_t all_postions[] = { PIN_DIG1, PIN_DIG2, PIN_DIG3 };
  for (register int8_t i = 0; i < TOTAL_DIGITS; i++) {
    digitalWrite(all_postions[i], currentDigit != i);

  }
  setRawSegments(maskArray[currentDigit]);
  currentDigit = (currentDigit + 1) % TOTAL_DIGITS;   // В следующий раз показываем другую цифру


}

//
//  Всё, что выше  - это своя жизнь. От основной программы требуется только
//  положить число для показа в numberToShow и оно будет показываться.
//  Больше основная программа ни о чём не заботится
//
///////////////////////////////////////////////////////////////////////////////////

void setup() {
  setupTimer2();
  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(11, OUTPUT);
  pinMode(12, OUTPUT);
  pinMode(13, OUTPUT);



}


void loop() {

  if ((analogRead(knopka1) == 0) && (analogRead(knopka2) != 0) && (val == 0))
  {
    schet++;
    val = 1;
    dlya_sekund = millis();
    delay(5);
  }


  if ((analogRead(knopka1) == 0) && (analogRead(knopka2) != 0) && (val == 1))
  {
    delay(5);
    if ((millis() > dlya_sekund + 600) && (millis() > dlya_sekund1 + 300))
    {
      schet = schet + 10;
      dlya_sekund1 = millis();
    }
  }
  if ((analogRead(knopka2) == 0) && (analogRead(knopka1) != 0) && (val == 0))
  {
    schet--;
    val = 1;
    dlya_sekund = millis();
    delay(5);
  }


  if ((analogRead(knopka2) == 0) && (analogRead(knopka1) != 0) && (val == 1))
  {
     delay(5);
    if ((millis() > dlya_sekund + 600) && (millis() > dlya_sekund1 + 300))
    {
      schet = schet - 10;
      dlya_sekund1 = millis();
    }

  }

  if ((analogRead(knopka1) > 0) && (analogRead(knopka2)) > 0)
  {
  
    val = 0;
  }
  if (millis() > dlya_sekund + 700)
  {
    if ((analogRead(knopka1) == 0) && (analogRead(knopka2)) == 0)
    {
      schet = schet + 50;
      dlya_sekund = millis();
      delay(5);
    }
  }
  if (schet > 999) schet = 1;
  else if ( schet < 1) schet = 999;


  if (schet != 999)
  {
    pusk();
  }
  else if (schet == 999)
  {
    pusk_constant();
  }



  putNumber(schet);

}


void pusk()
{
  if ((polozhenie_knopki==0)&&(millis()>startstop+1000)) {
    if (analogRead(knopka3) == 0)
    {
      delay(5);
      startstop = millis();
      currentMillis = millis();
      dlya_puska = 1;
      polozhenie_knopki=1;
    }
  }
  if ((millis() < currentMillis + (kolichestvo_sekund * schet)) && (dlya_puska == 1))
  {
    vihodState = 0;
    
  }
  else {
    vihodState = 1;
    dlya_puska = 0;
  }
  digitalWrite(vihod, vihodState);
  if (analogRead(knopka3) != 0)
  {
     delay(5);
    polozhenie_knopki=0;
  }
}


void pusk_constant()
{
  if (analogRead(knopka3) == 0)
  {
    vihodState = 0;
     delay(5);
  }
  else 
  {
    vihodState = 1;
     
  }
 digitalWrite(vihod, vihodState);
}

сорри, коментарии лень писать, в принципе все понятно тут. но если что спрашивайте

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

d13lider, а можно у Вас проконсультироваться по точеченой сварке? Вы специалист или просто девайс для кого-то другого делаете?

ded69
Offline
Зарегистрирован: 28.03.2016

НЕ очень хорошо.Чкрез некоторое время подгорят контакты. При всём этом нет функции "автозапуск" хотя для начального этапа можно и так. Молодец что осилил с программой. "" МОЛОДЕЦ"" 

ded69
Offline
Зарегистрирован: 28.03.2016

Почитай пост ,,180 ,, сайт про сварку.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ded69 пишет:

НЕ очень хорошо.Чкрез некоторое время подгорят контакты. При всём этом нет функции "автозапуск" хотя для начального этапа можно и так. Молодец что осилил с программой. "" МОЛОДЕЦ"" 


На этом реле споттер уже 2 года работает, только без электроники, а принудительно, а вы можете сказать как автопуск сделать? Поограммно знаю, знаю что на вторичку цеплять, а вот как аппаратно реализовать?

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

d13lider, а можно у Вас проконсультироваться по точеченой сварке? Вы специалист или просто девайс для кого-то другого делаете?


Занимаюсь кузовщиной сам

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ded69 пишет:

Почитай пост ,,180 ,, сайт про сварку.

скиньте ссылочку)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Вопрос собственно, такой.

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

Со временм захотелось варить и что-то мелкое, но неудобно и устал швы зашлифовывать. Прочитал, что для мелких изделий лучше использовать либо автомат, там аккуратненькие ровные шовчики, либо точечную. Пока не купил девайсов, но вот терзают смутные сомнения. Есть подозрения, что точечная - это для узкого круга работ, типа листы меж собой соединять - т.е. не для меня. С автоматом тоже неясно - я не понимаю как оно работает и для каких это работ.

У моих работ нет никакой специфики - просто общехозяйственные вещи типа "для дома для семьи".

Можете посоветовать что мне приобрести и освоить, чтобы было наиболее универсально. Покупать всё - ну я же не профи, зачем мне, только валяться будет.

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ЕвгенийП пишет:

Вопрос собственно, такой.

Сварщик я никакой. Но свой дом, который я недавно построил требует много всего.


В общем не автомат а полуавтомат, это такой сварочный варит проволокой с угекислотой, т. Е. Надо проволку и баллон углекислоты, шов ровный получается, варить сможет любой, но это в основном для тонкого металла, но и толстый можно, стоит дороже чем обычная, но конечно удобнее, я когда варю толстый метал все равно варю электродами, надежнее, а контактная сварка в основном для автомобилей, т. Е. Металл толщиной не более 1-2мм, листовой так что инвертор я считаю для дома лучше всех

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

Завтра про все сварки сниму видео и покаду плюсы и минусы

ded69
Offline
Зарегистрирован: 28.03.2016

websvarka.ru  Форум сварщиков Вебсварка--О сварке в общем-- Изделия и поекты--Контроллер точечной сварки(споттера)

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ded69 пишет:

websvarka.ru  Форум сварщиков Вебсварка--О сварке в общем-- Изделия и поекты--Контроллер точечной сварки(споттера)

что то там ужас вообще. в первичку подают 220В на 10% мощности с помощью симистора и считают на вторичке импульсы с помощью оптосимистора. если они пропадают то типа пошел автостарт. может как то проще организовать...

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

 

ЕвгенийП пишет:

здравствуйте, пришлите пожалуйста эмейл. я вам ссылку на видео кину про сварочные

 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

.

ded69
Offline
Зарегистрирован: 28.03.2016

Всем привет! Вопрос про "авторежим" удалось реализовать или нет?

d13lider
d13lider аватар
Offline
Зарегистрирован: 19.10.2015

ded69 пишет:

Всем привет! Вопрос про "авторежим" удалось реализовать или нет?

автостарт? пока нет((( нет времени совсем. работы много пошло на споттере. пока на кнопке хватает. задумка такая, сделать диммер который будет постоянно давать какой-то процент мощности на первичку, и читать оптосимистором есть ли импульсы, когда вторичка замыкается пропалает сигнал на первичке, и идет сигнал на автостарт. потом естественно полная мощность появляется не первичке и стабилитронгом сглаживать эту полную мощность через высокоомный резистор. думаю как то так.

uragan
Offline
Зарегистрирован: 23.02.2015

Кто-нибудь пробовал код для трех разрядов из этой темы. Для двух все работает. Гружу любой из этой темы для трех разрядов - показывает какую-то ерунду.  Показывает нормально, только если все три цифры одинаковые.