alcxa, все ж есть в мануалке: "Если таймер включен, то на индикаторе в младшем разряде светится точка." Сейчас проверил работу датчика вибрации (положения), все нормально, точка мигает при смене положения паяльника.
Так она горит, при отключенном датчике вибрации, когда включаю, не горит, загорается если паяльник поставить в положение когда датчик замкнут. на старой прошивке с этим же паяльником и силовой платой, все нормально
У меня только одна мысль для этого случая,- на вход датчика идет какой-то периодический сигнал, который постоянно сбрасывает таймер когда датчик разомкнут.
У меня только одна мысль для этого случая,- на вход датчика идет какой-то периодический сигнал, который постоянно сбрасывает таймер когда датчик разомкнут.
Как программно отслеживается вибро? на прерываниях ? (EXT_INT0 или PC_INT0) ? в старых платах v.1.13 сигнал VRS на порту PB6(INT6), в новых PB0(INT0)
Осциллографом посмотрел = там чисто Но почему старое ПО работает тогда ?
в старых платах v.1.13 сигнал VRS на порту PB6(INT6), в новых PB0(INT0)
Мы сейчас о какой прошивке говороим вообще? Я о той, что просил GDN для старых плат, но если туда поставить 168 мегу вместо 8й. Т.е. все порты остались остались старые (для плат 1.13).
Использование модульных источников питания открытого типа широко распространено в современных устройствах. Присущие им компактность, гибкость в интеграции и высокая эффективность делают их отличным решением для систем промышленной автоматизации, телекоммуникационного оборудования, медицинской техники, устройств «умного дома» и прочих приложений. Рассмотрим подробнее характеристики и особенности трех самых популярных вариантов AC/DC-преобразователей MW открытого типа, подходящих для применения в промышленных устройствах - серий EPS, EPP и RPS представленных на Meanwell.market.
alcxa, тогда мыслей нету. Как вариант можно проверить наличие напряжения на PINB6 без датчика, там включена подтяжка, должна быть единица. А также попробовать сделать цепь датчика как в более поздних версиях: Еще можно выбрать режим реакции на датчик 2 или 3, сам датчик отключить, на порт припаять провод. Когда станция заснет тыкнуть этим проводом на землю, должна проснуться. Оставить этот провод на земле, подождать пока опять заснет и отключить от земли, опять должна проснуться.
Ставил я с кондером и на 10nF и на 100nF, оставил 100nF = осц там чистая единичка, мысля есть мегу заменить т.е. я спаял плату управления с 168 мегой и поставил вместо платы с 8мегой, на которой вибро нормально работает
alcxa у тебя датчик подключен отдельным проводом на массу,или общим в ручке.Были у меня подобные загоны когда пытался подключить ручку с четырехпроводным кабелем,поменял на пятипроводной и забыл о этой проблеме навсегда.
Вот потестил подробнее (силовая аппаратная часть 1.13, меняется только платка управления) подключил ручку без вибродатчика с тремя проводами (дабы не вытаскивать силовую плату из корпуса и не отпаивать провода), эмуляция датчика пинцетом путем замыкания на землю VRS: на 168меге (новая прошивка): при включении точка не горит, загорается когда замкнешь и горит пока замкнуто на 8меге (старая прошивка): при включении точка горит, кратковременно гаснет при замыкании и при размыкании
Раз реакция на замыкание VRS есть - значит порт меги рабочий (да и на 2х мегах проверял) = т.е. проблема программная (может инициализация порта не правильная или где-то в коде физически порт прописан, а не по условию)
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 После этого точка в правом разряде начала отмаргивать состояние вибродатчика
В последней версии станция питается от 3.7 вольт. Фьюзы даны для 3.7 и 5 вольт. Станцию можно питать 5 вольтами, без каких либо переделок, установив фьюзы для 5 вольт?
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., А где можно увидеть версию станции 1.30 с пятью вольтами? Скачал архив со всеми версиями там только версия 1.30 где питание 3.7 вольт, может я что то просмотрел, или недопонял?
Victor_P., Можно еще вопрос, можно ли в версии, например 1.13 применить драйвер по схеме версии 1.30? В версии 1.30 2 транзистора, в версиях 1.13 и выше 4 транзистора.
ввести логическую переменную и в нее считать данные с порта и потом уже с ней работать (заодно уберется двойное считывание порта), но возможно и прокатит так:
Код:
if ((V_SENS) != _VSensLS) {
нужно смотреть как это компилятор преобразует Если компилятор CVAVR то объявлять битовые переменные лучше "bit", и потом в условиях будет сравнивать биты, а не байты, да еще компилятор упакует все битовые переменные в байт
Не совсем понял эту фразу "в новой аппаратной версии порт вибродатчика нулевой и поэтому это сравнение работает, а для старой этот алгоритм уже не прокатывает". А какая разницы для этого алгоритма какой порт, 0 или 6?
VRS в версии 1.13 = B6, а в версии 1.30 = B0 т.е.: по исходнику мы читаем состояние порта вибродатчика и для старой версии имеем 0 или 32 (1 << 6) и это число сравниваем с сохраненным значением 0 или 1: и (32==1) но это не так, я думаю понятно куда клоню
т.е.: по исходнику мы читаем состояние порта вибродатчика и для старой версии имеем 0 или 32 (1 << 6) и это число сравниваем с сохраненным значением 0 или 1: и (32==1) но это не так, я думаю понятно куда клоню
Понятно, но компилятор по идее должен перед сравнением провести преобразование типов. Хотя вот этот момент нужно продумать, скорее всего собака зарыта где-то рядом. Возможно нужно сделать явное преобразование так:
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения