STRELEC писал(а):...в архивах все есть, но вот платок в LAY я не нашёл...
Это потому, что их там нету и никогда не было. Проэкт у меня в формате АльтиумДизайнер. Но в формат лайаута люди переделывали, на форуме где-то есть,- ищите.
Pavel V. писал(а):Как приятно видеть, что тема до сих пор живет и развивается! Ребята, вы молодцы!
Вам спасибо за начальную конструкцию, без нее может и не было б продолжения. Мне очень понравился Ваш вариант обработки нажатий клавиш, я его в переделанном и дополненном (но сам принцип обработки полностью Ваш) виде до сих пор везде использую.
Victor_P. писал(а):Мне очень понравился Ваш вариант обработки нажатий клавиш, я его в переделанном и дополненном (но сам принцип обработки полностью Ваш) виде до сих пор везде использую.
//Кнопка(и)----------------------------------
#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;
Собственно, может этот код принципиально и не отличается от Вашего или вообще от любого иного, какой можно было придумать, но тогда, когда я только начал вникать в программирование МК АВР мне он очень понравился и дальше я по принципу "лучшее враг хорошего" ничего другого и не искал, а просто развивал и изменял этот.
Если у Л. И. есть хоть какой-то debounce, то в коде автора топика я его вообще не наблюдаю. Совсем не искрят кнопки?
Еще есть вопрос к печатке. Дорожка к истоку мосфета выглядит очень тонкой. Для нихромовых паяльников это может еще и достаточно (не проверял), но для керамических нагревателей явно мало. С ростом популярности последних, есть смысл обратить внимание на этот момент.
Вопрос к Viktor_P. решил собрать вашу схему паяльника без блока питания(хотя одну собрал михи ), вот только возникли вопросы.
1.Я содибаю в дип (атмега) Так у вас помойму индикаторы и кнопки имею немного другую распиновку контактов (у оригинальной схемы) подключения к атмеги.Как лучше использовать, как у вас или как в ориг.схеме.
2.У меня термопара (у вас схема под терморезистор).По идеи там можно изменить 2 резистора под термопару?
3.Ваша прошивка рассчитана и на кнопки и на энкодер.
Спасибо
А чего им искрить? Дребезг, если верить гуглу, длится около 1мс, опрос кнопок идет с периодом около 30мс,- запас немерянный Что, кстати, полностью подтверждает практика. Ни одного ложного срабатывания никогда не было.
imon220,
1. Не понял что такое оригинальная схема. Свой индикатор подключаете по его даташиту, кнопки тоже.
2. По идее можно, уже не один десяток раз это обсуждалось на форуме, берете схему ОУ для термопары и вперед.
3. Да, но на кнопки есть только начальные версии, пследние только для энкодера.
С его реализацией страшен не дребезг, а помехи. Любой одиночный импульс помехи может вызвать ложное срабатывание. А дребезг какраз нивелируется нечувствительностью к повторному нажатию по таймеру.
опрос кнопок идет с периодом около 30мс,- запас немерянный
Стоило через эти 30мс повторно проверять нажатие кнопки. Есть нажатие- выполняем, нет- помеха.
А выполнять 10мс "my_beep()" в прерывании- это вообщe плохая идея.
Vseryj писал(а):...Стоило через эти 30мс повторно проверять нажатие кнопки. Есть нажатие- выполняем, нет- помеха...
Хм, это идея, но вродь пока тких помех не было, чтоб срабатывание кнопок из-за них было. У меня одиночные (короткие) нажатия обрабатываются по отпусканию кнопок, а для длинных нажатий такие помехи не актуальны.
Vseryj писал(а):...А выполнять 10мс "my_beep()" в прерывании- это вообщe плохая идея...
Спасибо за ответ.
Да с термопарой я разобрался (нашел , там изм не большие ).
Просто если взять например схему 4 из фао и вашу, то у вашей например индекатор с значением b -PD6 а в 4 схеме b-PD1
Тоесть не получится что индекатор гореть не так как надо будет (или это поразному из-за того что я использую атмегу в dip).Хотя пины должны использоваться те же
2.У меня схема (точно не помню какая) из faq
с 5-мя кнопками и была прошивка от volly .Температура прыгала в пределах 10 грд (Особенно когда подносишь к импульснику)
Я взял и установил вашу прошивку 1.4
и о чудо температура стоит (250- 249грд)
Только не пойму как она тогда работала отлично с кнопками (рассищитана ведь на энкодер).Просто после моих издевательств она вообще перестала работать.
imon220, Вы перепутали все схемы и прошивки.
В этой теме моя схема и прошивка с подписи, она для энкодера.
Вы же, судя по всему, говорите о вариантах станции Михи, которые которые никакого отношения к этой теме не имеют, и прошивки там естественно другие и никак не совместимые с моей станцией из этой темы.
Спасибо. Да очень много инфы .
Как я правильно понял если я использую вашу схему и прошивку 1.4 то мне надо использовать только энкодер, поменять распиновку (если сравнивать со схемами от михи ) и немного переделать усилитель под термопару.
Но в принципе схемы все одинаковые с небольшими изменениями.
imon220, если Вы хотите использовать мою схему, то зачем ее сравнивать со схемой от Михи и что-то там менять? Делаете все точно по схеме. Обвязку ОУ берете для термопары. Последняя прошивка 1.42b у меня в подписи.
Для станции Михи у меня последняя прошивка 1.4, лежит в теме про Михину станцию, и если Вас интересует она, то давайте ее и бсуждать в той теме.
Да теперь я все понял.
Я просто сравниваю то что у меня пины меги разведены под схему михи а у вас чуть по другому (поэтому и спросил) ) .Просто теперь переделою немного.
Как говорится я просто с каждой схемы взял по немногу.
Спасибо за ответ.
Скажите к энкодеру не требуется добавлять кондеры с резисторами и подтяжку 5в. (гдет видел , для уменьшения помех)
Последний раз редактировалось AlekseyEnergo Пн фев 10, 2014 22:30:38, всего редактировалось 1 раз.
Причина:Нарушение пункта 2.2 правил форума. Подредактировал. Предупредил!
Повторил станцию Victor_P, большое ему спасибо за удачную конструкцию. Вход сделал на MCP601, выход как у Леонида Ивановича т.к. у моего паяльника (GOOT RX70G) общий вывод для грелки и терморезистора. Проект переделал в Ultiboard для своего корпуса, плата получилась не очень удачная, но если кому интересно - выложу.
Хочу обратить внимание, что в оригинальной схеме диод по питанию контроллера стоит таким образом, что во время прошивки питание не будет поступать на AVCC, такой режим запрещен даташитом.
altais писал(а):...такой режим запрещен даташитом...
А почему запрещен, не пишут? А то как-бы какой смысл питать аналоговую часть при прошивке. Да собственно и проблем с таким включением никогда не было, я специально такое включение сделал чтоб от программатора можно было зипиывать МК. Хотя никто ж не мешает включать питание станции при прошивке
Запрещено отличие питание на AVCC от VCC более +-0.3в в любом режиме. AVCC к тому же используется для питания PORTC 3...0. У Atmega8 вообщем AVCC и VCC всё равно соеденины вместе внутри МС.
При настройке тоже возникли проблемы с уходом нагрева в максимум при P > 10, D > 10, причем проблема похоже была именно в D. При уменьшении фильтрующих емкостей по входу до 22n, диапазон коэффициентов при стабильной работе значительно расширился, сейчас 25, 40, 12. Я еще подумал, может в прошивке присутствует одна из проблем, описанных здесь:http://habrahabr.ru/post/143388.
Леонид Иванович писал(а):
Сейчас нет технической цензуры, поэтому ничуть не удивляет появление таких бредовых статей.
Ясно. Я по своей ограниченности подумал, что что-то стоящее. Но все же интересно почему станция уходит в насыщение и не возвращается при определенных коэффициентах? Вроде как колебания должны быть при неправильной настройке.