Цифровая паяльная станция своими руками.(V 2.0)

Вопросы и замечания по статьям и схемам, представленным на нашем сайте

При поддержке РадиоКОТструктор.ру


Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

STRELEC писал(а):...в архивах все есть, но вот платок в LAY я не нашёл...
Это потому, что их там нету и никогда не было. Проэкт у меня в формате АльтиумДизайнер. Но в формат лайаута люди переделывали, на форуме где-то есть,- ищите.
Pavel V. писал(а):Как приятно видеть, что тема до сих пор живет и развивается! Ребята, вы молодцы!
Вам спасибо за начальную конструкцию, без нее может и не было б продолжения. Мне очень понравился Ваш вариант обработки нажатий клавиш, я его в переделанном и дополненном (но сам принцип обработки полностью Ваш) виде до сих пор везде использую. :beer:
Мои паяльные станции: первая, вторая, фен.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Леонид Иванович »

Victor_P. писал(а):Мне очень понравился Ваш вариант обработки нажатий клавиш, я его в переделанном и дополненном (но сам принцип обработки полностью Ваш) виде до сих пор везде использую. :beer:


А что там за принцип? Я использую такой:

Спойлер

Код: Выделить всё

//Модуль поддержки клавиатуры

//----------

#include "Main.h"
#include "Keyboard.h"

//---------- Константы: ----------

#define DB_TM      50 //время подавления дребезга, ms
#define NOREP_TM  800 //время до автоповтора, ms
#define REP_TM    200 //период автоповтора, ms

//---------- Переменные: ----------

static char KeyCode;

//---------- Прототипы функций: ----------

char Scan(void); //сканирование клавиатуры

//---------- Сканирование клавиатуры: ----------

char Scan(void)
{
  char s = 0, d;

  if(!Pin_KEY_S) s |= 0x01;
  if(!Pin_KEY_D) s |= 0x02;
  if(!Pin_KEY_U) s |= 0x04;
  if(!Pin_KEY_C) s |= 0x08;
  if(!Pin_KEY_E) s |= 0x10;

  switch(s) //перекодировка кнопок и их комбинаций:
  {
  case 0x01: d = KEY_STEP; break; //кнопка STEP
  case 0x02: d = KEY_DN;   break; //кнопка DN
  case 0x04: d = KEY_UP;   break; //кнопка UP
  case 0x08: d = KEY_CHAN; break; //кнопка CHAN
  case 0x10: d = KEY_ESB;  break; //кнопка энкодера
  default :  d = KEY_NO;
  }
  return(d);
}

//---------- Инициализация клавиатуры: ----------

void Keyboard_Init(void)
{
  KeyCode = KEY_NO;
}

//---------- Обработка клавиатуры: ----------

void Keyboard_Exe(bool t)
{
  static char LastCode = KEY_NO;
  static char TempCode = KEY_NO;
  static char DbncTimer = 0;
  static int RepTimer = 0;

  if(t)
  {
    if(DbncTimer) DbncTimer--;
    if(RepTimer) RepTimer--;
    char k = Scan();
    if(k != LastCode) //новое нажатие
    {
      if(k != TempCode) //дребезг
      {
        TempCode = k;
        DbncTimer = ms2sys(DB_TM);
      }
      else
      {
        if(!DbncTimer)
        {
          if(k != KEY_NO) //нажатие кнопки
          {
            RepTimer = ms2sys(NOREP_TM);
            KeyCode = k;
          }
          else //отпускание кнопки
          {
            if(!(LastCode & REP))
              KeyCode = LastCode | REL;
          }
          LastCode = k;
        }
      }
    }
    else //удержание кнопки
    {
      if(RepTimer == 1)
      {
        if(k == KEY_UP || k == KEY_DN)
        {
          KeyCode = k | REP;
          RepTimer = ms2sys(REP_TM);
        }
        if(k == KEY_ESB)
          KeyCode = k | REP;
      }
    }
  }
}

//---------- Установка кода кнопки: ----------

void Keyboard_SetCode(char code)
{
  KeyCode = code;
}

//---------- Чтение кода кнопки: ----------

char Keyboard_GetCode(void)
{
  return(KeyCode);
}

//----------
Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

Леонид Иванович, исходники Pavel V. есть в его статье http://www.radiokot.ru/lab/controller/10/.
вот кусок кода обработки клавиш оттуда:
Спойлер

Код: Выделить всё

#define   KEY1_DOWN   (PINC.1 == 0)
#define   KEY2_DOWN   (PINC.2 == 0)
#define   KEY3_DOWN   (PINC.3 == 0)
#define   KEY4_DOWN   (PINB.5 == 0)
#define   KEY5_DOWN   (PINB.4 == 0)
#define   KEY6_DOWN   (PINB.3 == 0)

#define BEEP            PORTB.0   

volatile int ReadKey = 0, KeyDelay = 0;

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
        TCNT0=0x00;
        if (ReadKey == 0) {
           if (KeyDelay == 0) {              // Если KeyDelay == 0, то можно нажимать опять       
                   KeyDelay = 0;
                   if (KEY1_DOWN)   {
                           ReadKey = 1;
                           my_beep();
                   }
                   if (KEY2_DOWN)   {
                           ReadKey = 2;
                           my_beep();
                   }
                   if (KEY3_DOWN)   {
                           ReadKey = 3;
                           my_beep();
                   }
                   if (KEY4_DOWN)   {
                           ReadKey = 4;
                           my_beep();
                   }
                   if (KEY5_DOWN)   {
                           ReadKey = 5;
                           my_beep();
                   }
                   if (KEY6_DOWN)   {
                           ReadKey = 6;
                           my_beep();
                   }

                        if (ReadKey) {
                                KeyDelay = 10;
                        }
                } else {
         KeyDelay--;
      }
   }    // if 
   i--;
      
   if (i==0) {
                T_disp = T;
           i=15;
   }
}
А вот мое творение на основе его принципа (это управление станцией Михи, комментарии на украинском, но понять можно :) ):
Спойлер

Код: Выделить всё

//Кнопка(и)----------
#define BT_PR1  PINB.5 == 0
#define BT_PR2  PINB.4 == 0
#define BT_PR3  PINB.3 == 0
#define BT_MNS  PINB.7 == 0
#define BT_PLS  PINB.6 == 0

//KeyPress
#define MNS_SHT     1
#define MNS_LNG     2
#define PLS_SHT     3
#define PLS_LNG     4
#define PR1_SHT     5
#define PR1_LNG     6
#define PR2_SHT     7
#define PR2_LNG     8
#define PR3_SHT     9
#define PR3_LNG     10
#define PLMN_SHT    11
#define PLMN_LNG    12

//Key Modes
volatile byte KeyPress = 0;                         //Функція нажатої кнопки
volatile bit LngKeyPress = 0;

//----------
#define D_FAST  CPS0_S/25       //Затримка нажим. кнопок мала, 40msec
#define D_NORM  CPS0_S/5        //Затримка нажим. кнопок велика, 200msec
#define T_COUNT D_NORM/5        //Затримка перед "довгим утримуванням" кнопки, 1sec

//---------- в обработчике события таймера:
//Button presed
    if (!KeyPress)                                          //якщо все оброблено (немає значення функції клавіші)
    {
        if (!KeyDelay)                                      //Если KeyDelay == 0, то можно нажимать опять
        {
            if (BT_PR1) KeyPress = PR1_SHT;                 //якщо кнопка "Pr1"
            if (BT_PR2) KeyPress = PR2_SHT;                 //якщо кнопка "Pr2"
            if (BT_PR3) KeyPress = PR3_SHT;                 //якщо кнопка "Pr3"
            if (BT_MNS)
            {
                if (BT_PLS) KeyPress = PLMN_SHT;
                else KeyPress = MNS_SHT;                    //якщо кнопка "-"
            }
            if (BT_PLS)
            {
                if (BT_MNS) KeyPress = PLMN_SHT;
                else KeyPress = PLS_SHT;                    //якщо кнопка "+"
            }
              
            if (KeyPress)                                   //якщо було нажато хоч щось
            {
                if (OldKeyPress == KeyPress) KeyCount++;                //якщо попереднє значення кнопки дорівнює поточному то KeyCount++
                else KeyCount = 0;
                OldKeyPress = KeyPress;                                 //попередньому значенню кнопки встановити поточне
                if (KeyCount == T_COUNT)                                //якщо довге утримування кнопки
                {
                    if (KeyPress == MNS_SHT || KeyPress == PLS_SHT)     //якщо "мінус" або "плюс"
                    {
                        KeyDelay = D_FAST;                              //встановити малу затримку опитування клавіш
                        KeyCount--;
                    }
                    else                                                //
                    {
                        if (KeyPress == PR1_SHT) KeyPress = PR1_LNG;    //довгий "Pr1"
                        if (KeyPress == PR2_SHT) KeyPress = PR2_LNG;    //довгий "Pr2"
                        if (KeyPress == PR3_SHT) KeyPress = PR3_LNG;    //довгий "Pr3"
                        KeyDelay = D_NORM;                              //встановити нормальну затримку опитування клавіш
                        KeyCount = 0;
                    }
                }
                else KeyDelay = D_NORM;                     //якщо коротка кнопка то встановити нормальну затримку опитування клавіш
                if (KeyPress == PR1_SHT ||
                    KeyPress == PR2_SHT ||
                    KeyPress == PR3_SHT) KeyPress = 0;      //
            }
            else                                            //якщо нічого не нажималось
            {
                if (OldKeyPress == PR1_SHT) KeyPress = PR1_SHT;         //короткий "Pr1"
                if (OldKeyPress == PR2_SHT) KeyPress = PR2_SHT;         //короткий "Pr2"
                if (OldKeyPress == PR3_SHT) KeyPress = PR3_SHT;         //короткий "Pr3"
                KeyCount = 0;                       
                OldKeyPress = 0;
            }
        }
        else KeyDelay--;
    }

//----------
В основном коде после выполнения операции, свзанной с событием кнопки, выполняется KeyPress = 0;
Собственно, может этот код принципиально и не отличается от Вашего или вообще от любого иного, какой можно было придумать, но тогда, когда я только начал вникать в программирование МК АВР мне он очень понравился и дальше я по принципу "лучшее враг хорошего" ничего другого и не искал, а просто развивал и изменял этот.
Мои паяльные станции: первая, вторая, фен.
a5021
Друг Кота
Сообщения: 6452
Зарегистрирован: Пт сен 13, 2013 13:11:31

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение a5021 »

Если у Л. И. есть хоть какой-то debounce, то в коде автора топика я его вообще не наблюдаю. Совсем не искрят кнопки?

Еще есть вопрос к печатке. Дорожка к истоку мосфета выглядит очень тонкой. Для нихромовых паяльников это может еще и достаточно (не проверял), но для керамических нагревателей явно мало. С ростом популярности последних, есть смысл обратить внимание на этот момент.
Аватара пользователя
imon220
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб июл 27, 2013 03:46:14
Откуда: Р Крым

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение imon220 »

Вопрос к Viktor_P. решил собрать вашу схему паяльника без блока питания(хотя одну собрал михи ), вот только возникли вопросы.
1.Я содибаю в дип (атмега) Так у вас помойму индикаторы и кнопки имею немного другую распиновку контактов (у оригинальной схемы) подключения к атмеги.Как лучше использовать, как у вас или как в ориг.схеме.
2.У меня термопара (у вас схема под терморезистор).По идеи там можно изменить 2 резистора под термопару?
3.Ваша прошивка рассчитана и на кнопки и на энкодер.
Спасибо
Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

a5021 писал(а):...Совсем не искрят кнопки?...
А чего им искрить? Дребезг, если верить гуглу, длится около 1мс, опрос кнопок идет с периодом около 30мс,- запас немерянный :) Что, кстати, полностью подтверждает практика. Ни одного ложного срабатывания никогда не было.

imon220,
1. Не понял что такое оригинальная схема. Свой индикатор подключаете по его даташиту, кнопки тоже.
2. По идее можно, уже не один десяток раз это обсуждалось на форуме, берете схему ОУ для термопары и вперед.
3. Да, но на кнопки есть только начальные версии, пследние только для энкодера.
Мои паяльные станции: первая, вторая, фен.
Аватара пользователя
Vseryj
Держит паяльник хвостом
Сообщения: 980
Зарегистрирован: Вс авг 05, 2012 12:46:33
Откуда: Сделан в СССР

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Vseryj »

Совсем не искрят кнопки?

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

Стоило через эти 30мс повторно проверять нажатие кнопки. Есть нажатие- выполняем, нет- помеха.
А выполнять 10мс "my_beep()" в прерывании- это вообщe плохая идея.
Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

Vseryj писал(а):...Стоило через эти 30мс повторно проверять нажатие кнопки. Есть нажатие- выполняем, нет- помеха...
Хм, это идея, но вродь пока тких помех не было, чтоб срабатывание кнопок из-за них было. У меня одиночные (короткие) нажатия обрабатываются по отпусканию кнопок, а для длинных нажатий такие помехи не актуальны.
Vseryj писал(а):...А выполнять 10мс "my_beep()" в прерывании- это вообщe плохая идея...
Ну это не мое :), у меня такого нет.
Мои паяльные станции: первая, вторая, фен.
Аватара пользователя
imon220
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб июл 27, 2013 03:46:14
Откуда: Р Крым

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение imon220 »

Спасибо за ответ.
Да с термопарой я разобрался (нашел , там изм не большие ).
Просто если взять например схему 4 из фао и вашу, то у вашей например индекатор с значением b -PD6 а в 4 схеме b-PD1
Тоесть не получится что индекатор гореть не так как надо будет (или это поразному из-за того что я использую атмегу в dip).Хотя пины должны использоваться те же
2.У меня схема (точно не помню какая) из faq
с 5-мя кнопками и была прошивка от volly .Температура прыгала в пределах 10 грд (Особенно когда подносишь к импульснику)
Я взял и установил вашу прошивку 1.4
и о чудо температура стоит (250- 249грд)
Только не пойму как она тогда работала отлично с кнопками (рассищитана ведь на энкодер).Просто после моих издевательств она вообще перестала работать.
Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

imon220, Вы перепутали все схемы и прошивки.
В этой теме моя схема и прошивка с подписи, она для энкодера.
Вы же, судя по всему, говорите о вариантах станции Михи, которые которые никакого отношения к этой теме не имеют, и прошивки там естественно другие и никак не совместимые с моей станцией из этой темы.
Мои паяльные станции: первая, вторая, фен.
Аватара пользователя
imon220
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб июл 27, 2013 03:46:14
Откуда: Р Крым

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение imon220 »

Спасибо. Да очень много инфы .
Как я правильно понял если я использую вашу схему и прошивку 1.4 то мне надо использовать только энкодер, поменять распиновку (если сравнивать со схемами от михи ) и немного переделать усилитель под термопару.
Но в принципе схемы все одинаковые с небольшими изменениями.
Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

imon220, если Вы хотите использовать мою схему, то зачем ее сравнивать со схемой от Михи и что-то там менять? Делаете все точно по схеме. Обвязку ОУ берете для термопары. Последняя прошивка 1.42b у меня в подписи.
Для станции Михи у меня последняя прошивка 1.4, лежит в теме про Михину станцию, и если Вас интересует она, то давайте ее и бсуждать в той теме.
Мои паяльные станции: первая, вторая, фен.
Аватара пользователя
imon220
Потрогал лапой паяльник
Сообщения: 326
Зарегистрирован: Сб июл 27, 2013 03:46:14
Откуда: Р Крым

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение imon220 »

Да теперь я все понял.
Я просто сравниваю то что у меня пины меги разведены под схему михи а у вас чуть по другому (поэтому и спросил) ) .Просто теперь переделою немного.
Как говорится я просто с каждой схемы взял по немногу.
Спасибо за ответ.

Скажите к энкодеру не требуется добавлять кондеры с резисторами и подтяжку 5в. (гдет видел , для уменьшения помех)
Последний раз редактировалось AlekseyEnergo Пн фев 10, 2014 22:30:38, всего редактировалось 1 раз.
Причина: Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!
altais
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вс фев 09, 2014 21:14:00
Откуда: Харьков

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение altais »

Повторил станцию Victor_P, большое ему спасибо за удачную конструкцию. Вход сделал на MCP601, выход как у Леонида Ивановича т.к. у моего паяльника (GOOT RX70G) общий вывод для грелки и терморезистора. Проект переделал в Ultiboard для своего корпуса, плата получилась не очень удачная, но если кому интересно - выложу.
Хочу обратить внимание, что в оригинальной схеме диод по питанию контроллера стоит таким образом, что во время прошивки питание не будет поступать на AVCC, такой режим запрещен даташитом.
Вложения
3.jpg
(105.24 КБ) 1259 скачиваний
2.jpg
(90.7 КБ) 1435 скачиваний
1.jpg
(88.42 КБ) 1390 скачиваний
Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

altais писал(а):...такой режим запрещен даташитом...
А почему запрещен, не пишут? А то как-бы какой смысл питать аналоговую часть при прошивке. Да собственно и проблем с таким включением никогда не было, я специально такое включение сделал чтоб от программатора можно было зипиывать МК. Хотя никто ж не мешает включать питание станции при прошивке :)
Мои паяльные станции: первая, вторая, фен.
Аватара пользователя
Vseryj
Держит паяльник хвостом
Сообщения: 980
Зарегистрирован: Вс авг 05, 2012 12:46:33
Откуда: Сделан в СССР

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Vseryj »

Запрещено отличие питание на AVCC от VCC более +-0.3в в любом режиме. AVCC к тому же используется для питания PORTC 3...0. У Atmega8 вообщем AVCC и VCC вс­ё равно соеденины вместе внутри МС.
Аватара пользователя
Victor_P.
Поставщик валерьянки для Кота
Сообщения: 2168
Зарегистрирован: Сб окт 10, 2009 10:34:07
Откуда: Україна, Хорол

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Victor_P. »

Понятно, буду знать, хотя я и Atmega8A так шил (там внутреннего соединения нету) и ничего страшного не случалось.
Мои паяльные станции: первая, вторая, фен.
altais
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вс фев 09, 2014 21:14:00
Откуда: Харьков

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение altais »

При настройке тоже возникли проблемы с уходом нагрева в максимум при P > 10, D > 10, причем проблема похоже была именно в D. При уменьшении фильтрующих емкостей по входу до 22n, диапазон коэффициентов при стабильной работе значительно расширился, сейчас 25, 40, 12. Я еще подумал, может в прошивке присутствует одна из проблем, описанных здесь:http://habrahabr.ru/post/143388.
Аватара пользователя
Леонид Иванович
Друг Кота
Сообщения: 4779
Зарегистрирован: Сб апр 02, 2011 12:40:46
Откуда: Минск
Контактная информация:

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение Леонид Иванович »

altais писал(а):может в прошивке присутствует одна из проблем, описанных здесь:http://habrahabr.ru/post/143388.


Сейчас нет технической цензуры, поэтому ничуть не удивляет появление таких бредовых статей.
altais
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Вс фев 09, 2014 21:14:00
Откуда: Харьков

Re: Цифровая паяльная станция своими руками.(V 2.0)

Сообщение altais »

Леонид Иванович писал(а):Сейчас нет технической цензуры, поэтому ничуть не удивляет появление таких бредовых статей.

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

Вернуться в «Статьи»