Перейти к содержанию

Еще Раз Про Термометр


my504

Рекомендуемые сообщения

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

  • Ответов 199
  • Создана
  • Последний ответ

Топ авторов темы

Топ авторов темы

Изображения в теме

Интересно..., а что Вы называете меткой? И как метку ассемблер вставляет в код? Разве в бинарном формате команд есть ASCII символы?

Вызов call 0x3FF означает вызов ПО ПРОГРАММНОМУ АДРЕСУ 0x3FF. А по этому адресу записана единственная команда retlw <константа калибровки осциллятора>, бинарный код этой команды 0х34ХХ, где ХХ- константа калибровки. Эта команда выполняет возврат из подпрограммы с константой в аккумуляторе.

Далее происходит пересылка аккумулятора в регистр подстройки осциллятора.

Таким образом производят калибровку встроенного осциллятора.

Сама константа (точнее команда возврата с константой) пишется в программный флеш еще на этапе производства.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Выбираем схему BMS для корректной работы литий-железофосфатных (LiFePO4) аккумуляторов

 Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ, также как и для других, очень важен контроль процесса заряда и разряда, а специализированных микросхем для этого вида аккумуляторов не так много. Инженеры КОМПЭЛ подготовили список имеющихся микросхем и возможных решений от разных производителей. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Димас... Вам бы кофейку попить..., а то мне прямо рыдать хочется...

call 0x3FF - означает вызов подпрограммы по АБСОЛЮТНОМУ адресу 0x3FF во флешпамяти программ. При этом адрес следующий за командой call заносится в стек и в счетчик адреса помещается число 0x3FF. Программа естественно на этот адрес и переходит.

А по этому адресу (это последняя ячейка программной памяти и записана ЗАРАНЕЕ НА МИКРОЧИПЕ ПРИ ПРОИЗВОДСТВЕ единственная команда retlw с константой калибровки. Поэтому в результате ее выполнения из стека снова в счетчик команд возвращается вектор возврата на прежнее место, однако при этом эта самая константа оказывается в аккумуляторе. Далее аккумулятор пересылается в регистр калибровки генератора.

Поймите , наконец, что формат команды CALL содержит АДРЕС подпрограммы, а метка которую обычно пишут, это удобный способ ОТНОСИТЕЛЬНОЙ адресации. Т.е. в момент написания кода неизвестно какой абсолютный адрес будет у команды с меткой, поэтому пишут некий текст. Компилятор при трансляции ЗАМЕНИТ этот текст на адрес по которому окажется в результате эта команда с меткой. А адрес - это ЧИСЛО. Двоичное число. Вот 3FF и есть это самое число.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Поэтому в результате ее выполнения из стека снова в счетчик команд возвращается вектор возврата на прежнее место, однако при этом эта самая константа оказывается в аккумуляторе

Так это же получается просто копирование: movlw 0x3FF

Посмотрел в листе ROM строку с номером 0x3FF - она пустая, так как всего в програамме 346 строк...

Ссылка на комментарий
Поделиться на другие сайты

Dimas, может Вам бросить это безнадежное дело? Изучать нормально с азов Вы не желаете, вопросы задаете на которые не способны воспринять ответ...

Неужели Вы не понимаете, что язык темы для Вас словно суахили для поморского старовера?

Как может быть написана команда movlw 0x3FF, если контроллер восьмиразрядный, а константа у Вас десятиразрядная?

В листе ROM Вы увидите ровно то, что сами туда написали. Писать в строку 3FF будет МИКРОЧИП, в ЖИВОЙ КРИСТАЛЛ. А симулятор будет поддерживать данные команды, только если Вы сами напишете в эту последнюю строку команду retlw с константой. Да и что калибровать в симуляторе?

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Я еще давным давно понял, что самое сложное это разбирать чужой код, но если на компах можно сделать "вырезание" всего лишнего и оставить только лишь нужный алгоритм, то в МК коде так неполучится :( Поэтому мне кажется что лучше и совершенее всего будет выглядеть код, написанный самим, по своему алгоритму.

Скачал книгу Зайца "Радиолюбительские конструкции на PIC контроллерах", том 2. Там очень понятный код работы с датчиком. Так же прочитал немного теории про 1-Wire шину на сайте радиокота. Вроде прояснение насчет работы с датчиком пришло :) Сейчас уже пишу свой код.

А вот про call 0x3FF я так и не допер... :ph34r: Возможно было бы понятнее, если бы Вы привели аналог этому коду с использованием простых команд...

Изменено пользователем dimas5552
Ссылка на комментарий
Поделиться на другие сайты

Все команды 10...16-х ПИКов имеют длину в ОДНО СЛОВО программной памяти. Т.е. 12 или 14 разрядов (зависит от семейства, у базового -12, у среднего-14).

Поэтому все без исключения команды простые.

Но разберем код команды call

Из даташита нам Микрочип вещает следующее:

10 0ххх хххх хххх - это бинарный формат этой команды. Три старших разряда - это код операции (команды call), а остальные 11 младших разрядов обозначенных буквой х - это АДРЕС в программной памяти, куда перейдет программа, исполняя эту команду. Значит если там будет написано 10 0011 1111 1111 - это и есть двоичный код команды call 0x3FF .

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

Т.е. например в памяти будет написано следующее(цифры перед командами - это АДРЕС в программной памяти):

0x006 .............

0x007 bsf STATUS, RP0

0x008 call 0x3FF

0x009 movwf OSCCAL

0x00A bсf STATUS, RP0

0x00B .............

..........................

..........................

0x3FF retlw 0x80

Исполнение пойдет следующим образом:

...бла, бла, бла... до ячейки программной памяти 0х006

Далее:

0х007 - пишем единицу в разряд регистра статуса, который управляет выбором банков памяти (памяти данных и спецрегистров, а не программной!!!)

0х008 - в стек записывается 0х009, а программа прыгает на последнюю строку 0х3FF

0х3FF - программа пишет в аккумулятор константу 0х80 и делает возврат по верху стека, т.е. прыгает на 0х009

0х009 - пересылаем содержимое аккумулятора в регистр калибровки осциллятора, т.е. OSCCAL=0х80 (этот регистр имеет адрес в ОЗУ 0х90 и находится в первом банке памяти)

0х00A - сбрасываем бит статуса, который управляет банками и продолжаем исполнение кода далее

ЗЫ. Не путайте команды movlw и retlw

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Это то понятно, я собственно это знал, но вся спроблема в том, что я не могу понять как по адресу 0x3FF появилась команда retlw да ещё и с возврашаемым значением 0x80 ?

Ссылка на комментарий
Поделиться на другие сайты

Она пишется в процессе производства микросхем. Это сервис Микрочипа. Каждая микросхема тестируется при определенных условиях и при этом определяется константа настройки регистра осциллятора, при которой отклонение от 4 МГц не превысит 1 процент.

Вот эту константу и записывают в эту ячейку в виде команды возврата.

Если константу нечаянно стереть, то забота о калибровке ляжет на плечи программиста...

Вообще этот способ калибровки применяется только на некоторых типах контроллеров. Если списывать заготовку кода с папки Template, то в тех контроллерах, где все это применяется соответствующий фрагмент кода уже вписан в образец кода.

В новых камнях калибровка на производстве аппаратная и никаких программных действий не требует. Однако некоторую регулировку частоты через спецрегистр делать все равно можно. Нуль в этом регистре соответствует калиброванному занчению. Расстройка соответственно в дополнительном коде.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

  • 1 месяц спустя...

Мужики, есть несколько вопросов.

Я собрал схему (развел все в Altium Designer) все спаял, но не пашет. На дисплее ничего не отображается. Потом выложу все изображения моего чуда.

Лично мне показалось странным то что в датчике DS18b20 на представленной схеме VCC и земля закорочены. Это правильно?

Изменено пользователем Xedi
Ссылка на комментарий
Поделиться на другие сайты

Это называется паразитным питанием. Можете прочитать даташит на термометр.

Показывайте разводку печатной платы.

Чем прошивали контроллер?

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Проверь сигнал на выводе RA2, а темболее на выводах RA0, RA1, RA4. Если там нет импульсов - надо разбираться с контроллером, с прошивкой и его конфигурацией. Если они есть - надо проверить дешифратор, есть ли что на входе и на выходе, потом транзисторы и наконец индикаторы. Может не те индикаторы поставил? Нужны с общим "-".

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Значит так. Индикатор работает. Когда во включенной схеме перемыкаю контакты VCC и 2,5,6,7,8 (т.е. контакт отвеч. за сегменты A,B,C.....) то сегменты светятся. И теперь не пойму. не выдается сигнал на катоды сегментов или не работают транзисторы? Хотя сегменты засветились же, значит работают. Может ли повлеять датчик на работу схемы?

Ссылка на комментарий
Поделиться на другие сайты

Номинал резистора R2 = 10...15 кОм. (на Вашей схеме 120 ом)

Вы по прежнему не сказали чем программировали контроллер.

Если датчик живой, то на шине должны быть импульсы обмена. Без обмена индикации не будет.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

И что что он работает? контроллер надо сначала проверить, выдает ли он какие-либо сигналы. Все надо проверять с начала а не с конца.

И потом, надо начинать с описания прошивки, предусмотрено ли там отсутствие датчика, или предполагается наличие датчика как аксиома? Может он просто зациклился и не может проинициализирвоать сам датчик - поэтому не приступает даже к сканированию разрядов индикатора. Причин может быть милион! И если просто тыкать можно искать эту причину 100 лет.

Изменено пользователем Alexeyslav

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Alexeyslav, так как это мое устройство, то его реакция на некоторые внешние баги мне известна. Прежде всего должен быть обмен с датчиком. Нет обмена - нет и остальной диаграммы. Что толку от индикации, если датчик неисправен или отсутствует.

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

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Я понял. Значит куплю новый датчик и попробую. Прошивал я с помощью

Этого программатора

Программа WinPic.

Залил прошивку, та что в начале статти.

Можно както нетяжело проверить работоспособность этого цифрового датчика?

Можно ли изменить код так чтобы отсутствовал обмен с датчиком или попросту выдавал какое нить число? Ктото шарит в Си?

Ссылка на комментарий
Поделиться на другие сайты

Насколько я знаю, WinPic требует вводить конфиг ручками. Откуда Вы взяли конфиг?

И причем тут Си? Рабочий код скомпилирован из АСМа. Листинг доступен. Можете заблокировать ожидание датчика сами. Если не получится, чиркните сюда, я сделаю это сам.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Что толку от индикации, если датчик неисправен или отсутствует.

Именно это схема и должна сообщить при помощи индикатора - хотябы вывести "-" или засветить все точки, или символ E c цифрой по которой можно определить причину - либо датчик не установлен, либо КЗ на линии датчика. И иметь возможность хотябы при включении засветить на 1-2 сек все сегменты индикатора, чтобы было понятно что схема работает.

Учение - изучение правил. Опыт - изучение исключений.

Ссылка на комментарий
Поделиться на другие сайты

Конфиг я не вводил. Брал по умолчанию. А какой нужно?

И можно ли помочь с кодом чтоб заблокировать ожидание датчика.

Изменено пользователем Xedi
Ссылка на комментарий
Поделиться на другие сайты

Сначала про конфиг.

__CONFIG _CP_OFF & _CPD_OFF & _BODEN_OFF & _MCLRE_ON & _WDT_OFF & _PWRTE_ON & _INTRC_OSC_NOCLKOUT

Проверьте, что в оболочке перед прошивкой установлен именно такой. Если он там представлен в гекса формате, то придется открыть даташит и руками переписать по вышеобозначенной фразе в бинарный, а затем в гекса форматы.

Про коррекцию кода. Это элементарно:

 
;--- основной цикл -----------------------------------
superloop          call        loop_wire
                            call        calc
                            goto      superloop

Заменяете call loop_wire на nop и снова компилируете. Но сначала организуете проект.

Если это Вам не под силу, то скажите. Вечером перекомпилирую и перешлю в форум.

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Буду очень благодарен если поможете. Я только начинающий в программировании МК. До сех пор не могу даже разобраться какой программой компилировать и т.д.

Ссылка на комментарий
Поделиться на другие сайты

Именно это схема и должна сообщить при помощи индикатора - хотябы вывести "-" или засветить все точки, или символ E c цифрой по которой можно определить причину - либо датчик не установлен, либо КЗ на линии датчика. И иметь возможность хотябы при включении засветить на 1-2 сек все сегменты индикатора, чтобы было понятно что схема работает.

Зачем весь этот гемморой?

Схема утилитарна до крайности. Если человек решил ее просто повторить, то ему от всей этой индикации проку чуть, а если вдумчиво, то спокойно заблокирует обмен в исходнике и проверит что неисправно.

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

Буду очень благодарен если поможете. Я только начинающий в программировании МК. До сех пор не могу даже разобраться какой программой компилировать и т.д.

Принято. Сделаю.

Кстати, Вы где обитаете? Профиль пуст.

Изменено пользователем my504

戦う前に相手のベルトの色に注目

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу

  • Сообщения

    • Зачем же пугать человека? Он же правильно мыслит. Вопрос чтобы правильно все сделал. Гальванику...
    • Вероятно, в разделе "Работа" вам помогут. При условии предоставления чёткого и недвусмысленного технического задания.
    • Привет кто это еще читает. Знакомый купил в Москве по адекватной цене пару  B615D, дал на диагностику перед уверенной эксплуатацией. Одна сразу в защите, большой динамик спален, усилители на высокоомную нагрузку поют, буду позже разбираться. А вот вроде бы вполне работоспособная не сдюжила и 10 минут на хорошей мощности на плотном прогрессиве. Вылетели ключи в БП и драйвера на MMBTA56. Видно что был в ремонте, возможно ключи оказались палёнкой. Есть мысль впаять вместо FQPF13N50  чуток помощней по току 18N50-e. По параметру Qg аналогичные, а по  Сg будут потяжелей, 2350пф против 1800 у 13н50-х. 
    • Ну так теперь фигня вопрос. Проверить, что кнопки невозможно замкнуть одновременно, да определить, на какой ток транзисторы нужны. По характеристикам мотора или по максимально-допустимому току диодов D1-D4. Навскидку, моторчик низковольтный, диоды тоже. Транзисторы тогда на PBSS4350 можно заменить. Они на Али почти задаром продаются.
    • Сами же понимаете, что так не может быть. Или нет "сквозняка", или схема неправильно собрана, элементы не те, битые и пр., и схема защиты не работает. Проверьте сначала работу защёлки защиты при питании от 15 В, отпаяв R19 и подавая туда медленно увеличивающееся напряжение до 1,5 - 2 В (можно с потенциометра ом на 100-500). Добейтесь, чтобы работала. Порог срабатывания измерьте. Пересчитайте в ток через резистор 0,1 Ом. Соответствует ли "правильному"? Проверьте, что у этого резистора сопротивление действительно 0,1 Ом. Запаяйте 0,1 Ом обратно. Напишите, какая лампочка. А то мало ли какая, может она не от "сквозняка", а от броска тока заряда С18 С16 мигает. Транзисторы ключей проверьте. Впаяйте вместо первичной трансформатора резистор ом 150 - 300, чтобы ток с ключей в этот "эквивалент трансформатора" не больше 50-100 мА был. Посмотрите форму напряжения на выходе ключей, в точке соединения С16 и С18, на питании после лампочки. Ищите, где ляп. Умозрительно подсказать можно только по каким-то измеренным данным. Кроме вас никто их не добудет. В общем, как в анекдоте: - Молодой человек, ну делайте же уже хоть что-нибудь!
    • Ну так можно увеличить глубину ООС, тем самым понизив чувствительность и повысив линейность
    • Судя по этой картинке   в трухе передней панели под выступающие болты и шишки паек ЗК динамиков выковыряныфрезерованы выемки, иначе бы динамики так плотно не прилегали бы к ДВП.    А оно тебе надо? "Работает - не мешай"(с)/это уже аксиома, не требующая доказательств/ , пытаясь сделать лучше, чем сделано на заводе. Сanton-ят, т.е. поют, и лучше, чем есть, тебе не сделать. Ну перенесёшь ты динамики наружу, а что тебе это даст? Кроме того, что при попытке их продать(а продавать их когда-нибудь придётся, т.к. эта акустика бюджетного сегмента без потуг на высший класс Hi-Fi) , тебе придётся объяснять потенциальному покупателю причину, по которой какой-то умник заколхозил такую переделку с акустикой, ты ничего хорошего не получишь. Задуманная тобой переделка - это по сути возня ради возни. 
×
×
  • Создать...