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

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


Ответить

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

Пт июл 09, 2021 21:54:45

alcxa, все ж есть в мануалке: "Если таймер включен, то на индикаторе в младшем разряде светится точка."
Сейчас проверил работу датчика вибрации (положения), все нормально, точка мигает при смене положения паяльника.
Так она горит, при отключенном датчике вибрации, когда включаю, не горит, загорается если паяльник поставить в положение когда датчик замкнут. на старой прошивке с этим же паяльником и силовой платой, все нормально

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

Пт июл 09, 2021 22:11:30

У меня только одна мысль для этого случая,- на вход датчика идет какой-то периодический сигнал, который постоянно сбрасывает таймер когда датчик разомкнут.

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

Сб июл 10, 2021 07:41:43

У меня только одна мысль для этого случая,- на вход датчика идет какой-то периодический сигнал, который постоянно сбрасывает таймер когда датчик разомкнут.
Как программно отслеживается вибро? на прерываниях ? (EXT_INT0 или PC_INT0) ?
в старых платах v.1.13 сигнал VRS на порту PB6(INT6), в новых PB0(INT0)

Осциллографом посмотрел = там чисто
Но почему старое ПО работает тогда ?

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

Сб июл 10, 2021 12:28:53

Как программно отслеживается вибро? на прерываниях ? (EXT_INT0 или PC_INT0) ?
Да зачем там прерывание? Сильно жирно для этого. В одном скане с опросом кнопок с периодом 10мс. Состояние изменилось, значит была стработка.
в старых платах v.1.13 сигнал VRS на порту PB6(INT6), в новых PB0(INT0)
Мы сейчас о какой прошивке говороим вообще? Я о той, что просил GDN для старых плат, но если туда поставить 168 мегу вместо 8й. Т.е. все порты остались остались старые (для плат 1.13).

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

Сб июл 10, 2021 20:35:56

именно о той: аппаратная версия 1.13 только мега168

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

Сб июл 10, 2021 21:25:20

alcxa, тогда мыслей нету. Как вариант можно проверить наличие напряжения на PINB6 без датчика, там включена подтяжка, должна быть единица.
А также попробовать сделать цепь датчика как в более поздних версиях:
Изображение
Еще можно выбрать режим реакции на датчик 2 или 3, сам датчик отключить, на порт припаять провод. Когда станция заснет тыкнуть этим проводом на землю, должна проснуться. Оставить этот провод на земле, подождать пока опять заснет и отключить от земли, опять должна проснуться.

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

Сб июл 10, 2021 22:15:04

Ставил я с кондером и на 10nF и на 100nF, оставил 100nF = осц там чистая единичка, мысля есть мегу заменить
т.е. я спаял плату управления с 168 мегой и поставил вместо платы с 8мегой, на которой вибро нормально работает

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

Вс июл 11, 2021 11:00:50

спаял плату управления с 168 мегой и поставил вместо платы с 8мегой, на которой вибро нормально работает

Не взаимозаменяемы,- совпадает только распиновка
http://ww1.microchip.com/downloads/en/A ... oc2553.pdf

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

Вс июл 11, 2021 13:25:13

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

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

Ср июл 14, 2021 10:37:44

Вот потестил подробнее (силовая аппаратная часть 1.13, меняется только платка управления)
подключил ручку без вибродатчика с тремя проводами (дабы не вытаскивать силовую плату из корпуса и не отпаивать провода), эмуляция датчика пинцетом путем замыкания на землю VRS:
на 168меге (новая прошивка): при включении точка не горит, загорается когда замкнешь и горит пока замкнуто
на 8меге (старая прошивка): при включении точка горит, кратковременно гаснет при замыкании и при размыкании


Раз реакция на замыкание VRS есть - значит порт меги рабочий (да и на 2х мегах проверял) = т.е. проблема программная (может инициализация порта не правильная или где-то в коде физически порт прописан, а не по условию)

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

Ср июл 14, 2021 19:14:39

alcxa все остальное работает корректно,только с датчиком проблема ?

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

Ср июл 14, 2021 19:44:31

alcxa все остальное работает корректно,только с датчиком проблема ?
Я только т12 подключал, паять можно

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

Пт июл 16, 2021 09:07:12

В общем поглядев код, нашел следующее:
Код:
   in   r18,p03       = читаем с порта
   andi   r18,0x40     = маска по биту вибродатчика
   ldi   r19,0                                                                     <= это лишний код связанный с преобразованием типа данных char = int
   lds   r20,D01CC  = тут хранится переменная которая 0 или 1
   ldi   r21,0                                                                     <= это лишний код связанный с преобразованием типа данных char = int
   lds   r24,D01A1
   cp   r18,r20      = если равно, но тут сравнение с переменной которая 0 или 1
   cpc   r19,r21                                                                   <= это лишний код связанный с преобразованием типа данных char = int
   breq   L0947

********  далее

L0947:
   in   r25,p03       = второй раз читаем порт (а если уже состояние порта изменилось ????? т.е. дребезг)
   bst   r25,b6        сохраняем состояние порта вибродатчика во флаг
   clr   r25
   bld   r25,b0        флаг пишем в младший бит
   sts   D01CC,r25  сохраняем в памяти: тут запоминается либо 0 либо 1 (т.е. видимо boolean)

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

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

И если навести порядок с типами переменных (может галка в компиляторе где нить) = то код получится намного меньше и все влезет в 8 мегу
(в CVAVR например убрать галку "Promote chat to int")

----------
Таблетка: Нужно изменить в прошивке по адресу 0x1294 байт 0x90 на 0x96
После этого точка в правом разряде начала отмаргивать состояние вибродатчика

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

Пт июл 16, 2021 10:56:51

В последней версии станция питается от 3.7 вольт. Фьюзы даны для 3.7 и 5 вольт. Станцию можно питать 5 вольтами, без каких либо переделок, установив фьюзы для 5 вольт?

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

Пт июл 16, 2021 11:19:33

RX24, есть схемы с питанием 5В и 3.6В. Питать 3.6В схему пятью вольтами можно, но номиналы некоторых резисторов придется поменять. Собственно, если сравнить между собой схемы, все станет понятно.

alcxa, сравнивать значение байта (да чего угодно) с логической переменной в С никто не запрещает, при этом 0 будет false, все остальное true. Думаю, это Вы и без меня знали. Какие неявные преобразования при этом делает компилятор я не в курсе да и не интересно мне это. Я не програмист в том смысле, что не работаю им, не пишу код постоянно и не вникаю в тонкости языка. Что выучил, тем и пользуюсь как могу.

Не совсем понял эту фразу "в новой аппаратной версии порт вибродатчика нулевой и поэтому это сравнение работает, а для старой этот алгоритм уже не прокатывает". А какая разницы для этого алгоритма какой порт, 0 или 6?

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

Сам код опроса вибродатчика выглядит так (только он не в одной куче как здесь):
Код:
#include <stdbool.h>
...
#define V_SENS   (PINB&(1<<PINB6))
uint8_t VSMode;
bool _VSensLS = false;
bool VSAlarm;
...
   if (V_SENS != _VSensLS)   {
      switch (VSMode)   {
         case 1:   {
            if (StMainMode < SMM_STB_DE) VSAlarm = true;
            break;
         };
         case 2:   {
            if (StMainMode < SMM_OFF_DE) VSAlarm = true;
            break;
         };
         case 3:   {
            VSAlarm = true;
            break;
         };
      }
   }
   _VSensLS = V_SENS;   

Предложите как его изменить на более правильный. Я так понимаю _VSensLS можно сделать байтовой, чтоб небыло неявных преобразований, но что это даст?
Последний раз редактировалось Victor_P. Пт июл 16, 2021 11:39:55, всего редактировалось 1 раз.

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

Пт июл 16, 2021 11:36:18

Victor_P., А где можно увидеть версию станции 1.30 с пятью вольтами? Скачал архив со всеми версиями там только версия 1.30 где питание 3.7 вольт, может я что то просмотрел, или недопонял?

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

Пт июл 16, 2021 11:41:15

Victor_P., А где можно увидеть версию станции 1.30 с пятью вольтами?
1.30 нигде, она только с 3.6В. Но есть же 1.20 и 1.13, вот в них и можно посмотреть.

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

Пт июл 16, 2021 11:59:31

Victor_P., Можно еще вопрос, можно ли в версии, например 1.13 применить драйвер по схеме версии 1.30? В версии 1.30 2 транзистора, в версиях 1.13 и выше 4 транзистора.

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

Пт июл 16, 2021 12:00:24

Предложите как его изменить на более правильный.
ввести логическую переменную и в нее считать данные с порта и потом уже с ней работать (заодно уберется двойное считывание порта),
но возможно и прокатит так:
Код:
   if ((V_SENS) != _VSensLS)   {
нужно смотреть как это компилятор преобразует
Если компилятор CVAVR то объявлять битовые переменные лучше "bit", и потом в условиях будет сравнивать биты, а не байты, да еще компилятор упакует все битовые переменные в байт

Не совсем понял эту фразу "в новой аппаратной версии порт вибродатчика нулевой и поэтому это сравнение работает, а для старой этот алгоритм уже не прокатывает". А какая разницы для этого алгоритма какой порт, 0 или 6?
VRS в версии 1.13 = B6, а в версии 1.30 = B0
т.е.: по исходнику мы читаем состояние порта вибродатчика и для старой версии имеем 0 или 32 (1 << 6) и это число сравниваем с сохраненным значением 0 или 1: и (32==1) но это не так, я думаю понятно куда клоню

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

Пт июл 16, 2021 13:26:19

ввести логическую переменную и в нее считать данные с порта и потом уже с ней работать
И мы опять получим неявное преобразование типов из байта в булевскую величину (не пишу в бит, т.к. не уверен что там именно бит).
(заодно уберется двойное считывание порта),
А где у меня двойное считывание?
но возможно и прокатит так:
Код:
   if ((V_SENS) != _VSensLS)   {
нужно смотреть как это компилятор преобразует
? при этом после обработки препроцессором получим опрос порта в двойных скобках, вот так:
Код:
if (((PINB&(1<<PINB0))) != _VSensLS)   {
зачем?
Если компилятор CVAVR то ...
avr gcc, насколько я в курсе. IDE Microchip(Atmel)Studio.
т.е.: по исходнику мы читаем состояние порта вибродатчика и для старой версии имеем 0 или 32 (1 << 6) и это число сравниваем с сохраненным значением 0 или 1: и (32==1) но это не так, я думаю понятно куда клоню
Понятно, но компилятор по идее должен перед сравнением провести преобразование типов. Хотя вот этот момент нужно продумать, скорее всего собака зарыта где-то рядом. Возможно нужно сделать явное преобразование так:
Код:
if (V_SENS != (uint8_t)_VSensLS)   {
или так
Код:
if ((bool)V_SENS != _VSensLS)   {
или вообще _VSensLS обьявить байтовой.

Добавлено after 5 minutes 22 seconds:
Victor_P.можно ли в версии, например 1.13 применить драйвер по схеме версии 1.30?
можно.
Ответить