Доброго времени суток, возникластранная ситуация. По порядку: atmega8a к выводам РС0 и РС1 подключены по 1 датчику ds18b20, программа сначала считывает данные с датчика на РС0, потом с датчика на РС1, по все время при считывании 1-го датчика все проходило нормально, а - 2-го датчика происходило зависание, я так понял, что из-за того, что после сигнала сброса не проходила команда 0xCC, при чем если поменять местами датчики, то было то же самое, не работал датчик именно на РС1, при этом подпрограмма обработки - одна и та же, подумал, что проблема в МК, поробовал другой - но получил то же самое, как итог я понял, что так работает только на РС1 даже на разных контроллерах, проблема была решена добавлением задержки после команды сброса на 1мс.
В итоге проблема не из-за датчика, т.к. на РС0 - они оба работали с исходной версией программы, а проблема возникала только на РС1 - можно было бы грешить на него, но опять же непонятка: на другогм МК было все один в один... Хоть проблема и решена, но от этого она все одно - не стала понятна... Кто нибудь сталкивался с таким? в чем м.б. проблема?
точно... подал на AREF, вместо питания, всегда подаю на аналоговую часть, т.к. слышал, что где-то там слабый провод для питания... а сейчас - не заметил, что не туда подключился... спасибо за идею , сейчас попробую!
Добавлено after 6 minutes 15 seconds: не помого... значит в чем-то еще...
кондеры по питанию тоже ставил, и электролит, и керамику... не помогло...
Обычно используют несколько устройств на одном выводе с адресным вызовом необходимого. А на каждое устройство по одному выводу... Это по меньшей мере не одновременно... Второе нужна копия уже имеющейся программы - так что скорее всего программу "с пристрастием" смотреть надо.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Обычно используют несколько устройств на одном выводе с адресным вызовом необходимого. А на каждое устройство по одному выводу... Это по меньшей мере не одновременно... Второе нужна копия уже имеющейся программы - так что скорее всего программу "с пристрастием" смотреть надо.
у меня там есть регистр ,который определяет, какой выход использовать: РС0 или РС1, а код импользую один и тот же, вот пример:
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Под ассемблером не пытайтесь упрощенными решениями пользоваться. Или полностью раздельные подпрограммы у каждой из которых свой вывод указан. Единственно общий буфер блокнота.
Работа с uLAN это режим реального времени - жесткое соблюдение интервалов, соизмеримых со временем исполнения команд (по пакостности его только WS2812 на 800МГц превосходит). Посему не условные переходы по флажкам, а два независимых модуля дрыголапа должны быть. Каждый вызывается в зависимости от требуемого выходного порта. Была бы возможность косвенной адресации по содержимому регистра и/или памяти - тогда еще можно (например с масками можно эксперимент сделать) и то при тактировании заметно выше чем 1МГц (стандартное для АВР, ежли не трогать предделитель).
переделал на отдельные подпрограммы - вообще не стало работать без задержки, при более внимательном чтении даташита увидел, что окончание сигнала присутствия от датчика не говорит о его готовности, там нужна еще задержка, как раз ее я добавлял, чтобы заработало, но тогда непонятно, почему работает именно на РС0, он тогда тоже не должен был работать...
обычно если в протеусе работает - значит и в железе будет (у меня так было). Только в протеусе идеал, а реально DS18B20 нормальных сейчас похоже не найти https://www.drive2.ru/b/513061538530066675 а может маленькая доп. задержка влияет, если так попробовать:
и в протеусе есть мощный виртуальный осциллограф - там времена замерять можно... а в реале есть очень дешевый китайский Logic Analyzer (клон Saleae) - он 1-Wire знает... https://www.drive2.ru/c/487568261928452488/
oleg110592, идея понятна, спасибо, вечером попоробую, но только у меня тактавая 4МГц, и врятли одна команда так влияет, т.к. когда я ставил задержку порядка 10мкС - это не помогло, а это уже 40 тактов, не вычислял, с какой минимальной заработает, но 250мкС - работает, при чем если менять местами датчики - то все тоже самое... а датчики покупал в чипидип, не китайские вроде, хотя точно не скажу... плохо, что пока что-то с осцилографом протеуса то ли не разобрался ,то ли он глючный -в пошаговом режиме на экране не отображается текущее действие, такое впечатление, что осцилограф отстает..
В принципе... схема "паразитки" по даташиту должна подключать полное питание в перерывах между обменом. На то специальный блочек ставится http://img.radiokot.ru/files/20529/1us0r4a0ua.GIF (и схемка с его использованием http://img.radiokot.ru/files/20529/kc1ezblxl.JPG) - минус три лапки МК использовать надо. Ну и завал фронтов - зависит от типа кабеля. Ну и производитель ессно свое может добавить:
otest, поробую, только сначала найду где в протеусе логический анализатор )
Добавлено after 33 seconds: oleg110592, спасибо!
Добавлено after 8 minutes 45 seconds: BOB51, у меня , если ставить задержку -все работает, просто хочу понять, почему без задержки с РС0- любой датчик работает и без задержки, а на РС1 - любой только с задержкой.
при этом я не использую паразитное питание, так что завалов на импульсах быть не должно. я попробую программно поменять их местами - если поменяются рабочие выводы - то все же проблема в программе , а если и тут будет то же самое - тогда вообще непонятка...
Значит ошибка в полном тексте программы. У атмеги 8/8А из альтернативного РС только с АЦП работает (и то одинаково для РС0 и/или РС1). Для АВР достаточно выполнять "разворот шины" с постоянно присутствующим в регистре порта 0 (вариант работы с шиной "ОК"). Ну и не забываем, что данные на выводах устанавливаются минимум через NOP после выполнения команды, изменяющей статус вывода.
DS18B20 с Китая куплены? Там 99% их фейка. Многие юзать можно (хотя некоторые врут сильно), но есть нюансы. Например версия от GXCAS/UMW больше 600мс на преобразование могут тратить. Монументальный труд по сравнению и отличиям копий собран тут: https://github.com/cpetrich/counterfeit_DS18B20/
BOB51, дело в том, что у меня на оба датчика (выхода РС0 и РС1) - одна порограмма, я только в регистре ззадаю какой из них, все операции одни и теже ,что для РС0, что для РС1 - выборка РС0 или РС1 идет только именно перед самим действием с РС0 и РС1. выше я приводил пример как сделано, повторю: tst bit_b brne no_03 cbi PORTC,PC0 sbi DDRC,0 rjmp no_13 no_03: cbi PORTC,PC1 sbi DDRC,1 no_13: ldi temp, 72
Добавлено after 35 seconds: NStorm, покупал в чипи дип.
Сейчас этот форум просматривают: maxlab и гости: 30
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения