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

crazz

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

Здравствуйте! Давно хотел заняться микропроцессорами, наконец представилась возможность. Попалась статья из радио Д. Яблокова и В. Ульриха "Частотомер на PIC-контроллере" ("Радио", 2001, № 1, с. 21, 22). Для начала хотел просто повторить. Только в статье индикаторы с общим катодом, а у меня - с анодом. Не думал что даже с такой ерундой возникнут проблемы, нужно ведь просто инвертировать лог. уровни соответствующих сегментов и уровни на общий каждого индикатора, но я вообще не могу в программе найти это место, где реализуется индикация. И вторая проблема. Я установил MPLAB 7.60, а более менее нормальное описание нашёл только на 5.хх. Да и там как то сложновато. В результате я даже не могу получить HEX этой программы. Всё как-то раскидано где попало, куча настроек, не могу разобраться. Мне от неё впринципе то нужно только преобразовать текст проги в двоичный код HEX. Не могли бы вы мне помочь, расписать по действиям что за чем нажимать или ссылочку какую. Спасибо.

fmeter.txt

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

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

Там если поразбираться чуть чуть то все станет ясно. в MPLAB во первых что нужно сделать - выбрать ТИП контроллера который ты используешь.

Вывод на индикатор осуществляется в процедуре помеченной меткой refresh

вывод причем осуществляется посегментно ... т.е. 1 цифра, потом идет задержка 2 цифра и т.д.

вот кусочек кода на одну цифру - остальные аналогично, только используются другие биты порта PA.

	movf	Dig_x, W; Значение единиц для индикации.
call	segment; Преобразование DEC -> семисегментный код.
movwf   portb; Вывод цифры на индикатор.
после преобразования - на выводах порта PB находится код необходимых сегментов которые должны гореть, для вашего случая перед выводом в порт можно просто проинвертировать содержимое аккумулятора командой XORLW 0xFF
bcf	 porta, 0; Активизировать индикатор.
bcf - установка на выводе порта 0 а вам нужно установить 1 - значит нужно заменить на bsf
а при отключении - наоборот.
call	Delay; Задержка времени для сканирования.
bsf	 porta, 0; Отключить индикатор.

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

Это надо сделать в процедуре под меткой START в самом конце перед разделительной меткой, примерно так:

bsf	 porta, 0
bsf	 porta, 1
bsf	 porta, 2
bsf	 porta, 3

или короче но менее наглядно:

movlw 0x0F
movwf porta

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

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

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

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

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

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

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

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

Вроде начинает проясняться. А это что?

org 0x10

segment ; Таблица преобразования DEC -> семисегментный код.

CLRF PCLATH

ADDWF PCL, F

dt 07E, 00C, 0B6, 09E, 0CC, 0DA, 0FA, 00E, 0FE, 0DE

Я так понимаю что это и есть формирование цифр (ну там 0,1,2...9), может здесь тоже можно проинвертировать как-нибудь нижнюю строку и тогда в порт PB сразу пришла бы индикация нужной полярности? Только как разгадать этот код...

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

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

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

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

Последнюю строку ассемблер развернет в

retlw 0x7E

retlw 0x0C

retlw 0xB6

..........

retlw 0xDE

и все это табличная перекодировка.

Так как смены страниц не происходит, то сброс PCLATH не обязателен.

Первая директива ORG 0x10 фиксирует начало стоящего за ней кода с абсолютного адреса 0х10.

PS Думаю стоит чуть пояснить. При входе в addwf PCL , в аккумуляторе сидит перекодируемый байт, он прибавляется к PCL-регистру, что эквивалентно смещению счетчика команд на эту величину(прибавку). Таким образом происходит попадание на "свой" retlw. Ну и с константой из этой retlw в аккумуляторе возвращаемся на точку входа в процедуру, т.е. под команду call segment.

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

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

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

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

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

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

Спасибо за пояснения. Только я так и не понял, строка

dt 07E, 00C, 0B6, 09E, 0CC, 0DA, 0FA, 00E, 0FE, 0DE

- это цифры от 0 до 9 или нет? Если да, то кто из них кто? Если нет, то дальше можете не читать. Возьмём к примеру последнюю 0DE (наивно полагая что это 0, ну в крайнем случае 9), в двоичной системе это 11011110. Предположим что это эквивалентно сегментам H, G, F, E, D, C, B, A индикатора. Подставляем и... билибирда какая-то, не на какую цифру это не похоже.

Alexeyslav, а почему считаешь это лишней работой. Мне наоборот кажется, сформировать сразу нужные цифры проще,чем формировать их, а потом ещё инвертировать. А индикаторы я точно не заменю - других нет, если только такими же... Универсальность такая мне точно не нужна.

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

а почему ты решил что сегменты начинаются с H ? может наоборот с А... тут похоже что сегмент H соответствует младшему биту.

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

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

кстати, мысть в голову пришла - код 7E соответствует 01111110 и поидее это должна быть цифра 0 т.е. 0 или 7 биты это есть средняя черточка индикатора. берем следущую цифру - т.е. 1 её код 0С = 00001100 поскольку гореть должны два сегмента - то 2 и 3 биты это сегменты A и B ... и т.д. выявляешь зависимости и т.о. у тебя будет полная картина. а вообще лучше по схеме посмотреть какой сегмент к какому биту порта подключен :)))

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

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

Спасибо, разгадал, подставляя от 0 до 9, соответствует в порядке G, F, E, D, C, B, A, H. То есть 0DE (11011110) это 9 и т.д. В принципе этого можно было и не делать, а просто инвертировать, но зато убедился опытным путём. Осталось только с MPLAB 7.60 разобраться.

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

Просто инвертировать можно, добавив после call segment команду xorlw 0xFF. Это и будет инверсия разрядов аккумулятора.

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

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

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

Благодарю. Начинаю по-немногу разбираться с Mplab v7, нашёл хорошую ссылку: http://2aplusa.ru/ras/8.html. Сделал как там написано. В результате попытки скомпилировать даже исходную авторскую программу в окне Output куча ошибок. Вот часть из них:

Error[113] C:\PIC\MAIN.ASM 71 : Symbol not previously defined (porta)

Error[113] C:\PIC\MAIN.ASM 72 : Symbol not previously defined (portb)

Error[113] C:\PIC\MAIN.ASM 73 : Symbol not previously defined (status)

Error[113] C:\PIC\MAIN.ASM 75 : Symbol not previously defined (option_reg)

Error[113] C:\PIC\MAIN.ASM 77 : Symbol not previously defined (trisa)

Error[113] C:\PIC\MAIN.ASM 78 : Symbol not previously defined (trisb)

Понимаю это примерно так: то что в скобках программа не понимает и чтобы поняла нужно это где-то прописать. Как же автор получил hex? Или просто я где-то ошибся.

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

естественно .... тебе надо в начале файла написать (имя файла надо чтобы соответствовало контролеру)

include "p16f628.inc"

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

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

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

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

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

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

Этот файл существует. Пробовал его копировать в проект. Пробовал даже копировать программу в этот файл, а лишнее удалял - без изменений. Количество ошибок при этом не меняется, как будто я ничего и не делал. Пробовал компилировать другую программу, всё нормально. Ощущение такое, что проблема в программе (ассемблере).

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

Откуда взят исходник? попробуйте поискать в исходнике константы скопировав имя константы с inc файла, возможно в исходник внесены специальные искажения невидимые глазом, например заменены английские буквы на русские которые пишутся одинаково. Для таких ситуаций у меня есть специально настроенная подсветка синтаксиса которая выделяет русские и английские символы разным цветом.

попробуйте скомпилировать файл при помощи утилиты находящейся в папке C:\Program Files\Microchip\MPASM Suite\ и называется MPASMWIN.exe

А еще лучше выложи сам исходник ... посмотрим что с ним не так.

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

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

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

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

А еще лучше выложи сам исходник ... посмотрим что с ним не так.

Да уж давно пора, а то игра в глухие телефоны...

Заодно автору вопрос. В МПЛАБе необходимо сформировать ПРОЕКТ. Лучше визардом... Вы, я полагаю, именно так и сделали... Иначе он никаких хедер-файлов не увидит...

Вот так должен выглядеть проект:

dc356b22aa5a.jpg

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

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

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

Если Вы имеете ввиду исходную программу на ассемблере, то она в самом верху страницы под названием fmeter. Статья из Радио, "Частотомер на PIC-контроллере" ("Радио", 2001, № 1, с. 21, 22)., поэтому подвохов не ожидал, думал всё пройдёт гладко. MPLAB примерно так и выглядет, создавал через визард. Могу прилепить весь архив. Благодарю за поддержку.

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

Т.е. надо понимать, что хедер-файл был в проект ВКЛЮЧЕН? Т.е. в окне ВОРКСПЕЙСА в ветке хедер файл файл .инк включен?

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

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

Нужно включить нечувствительность к регистру у АСМа в окне Прожект-Билд опшн-Имя проекта-Дисэйбл кэйс сенсивити должна стоять галка.

Необходимо проверить, чтобы ни одной команды не начиналось с начала строки(только через ТАБ)

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

А так ВСЕ КОМПИЛИТСЯ, сам проверил...

d3320d51c7e9.jpg

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

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

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

my504, сделал всё как посоветовали, спасибо, НЕХ получен! Будем двигаться дальше...

Пробовал компилить исходник, всё выходит один в один с hex-оригиналом за исключением первой лишней строки

:020000040000FA, откуда она и что означает?

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

Я специально не ковырял формат HEX, но скажу точно, что первые строки файла не имеют прямого отношения к дампу памяти, заливаемому в память контроллера. Поэтому можете сильно не париться, это еще зависит от используемого для компиляции софта.

Напомню Вам, что представленный исходник не содержит конфига, поэтому при программировании придется его указать вручную!!!

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

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

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

Не помню где еще можно прочитать про спец ячейки, к примеру по адресам выше 2000 (где нет физической памяти контроллера) есть возможность задать серийный номер контроллера(воспринимается только программой-программатором), и например ячейка с адресом 2007 задающая бит конфигурации контроллера. Эти ячейки не пишутся в память контроллера, а заносятся программатором в специальные области памяти, доступные только программатору и некоторыми программаторами могут просто игнорироваться.

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

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

Вынужден с Вами не согласиться. Специально поиском нашел интеловский стандарт хекса... Это УНИФИЦИРОВАННЫЙ формат. Он используется не только в пиках... А конфиг пишется в КОНЦЕ дампа, а не в начале... Да и нет его у автора...

Калибровочная константа ВООБЩЕ не пишется в хексе. Она ИНДИВИДУАЛЬНО для каждого экземпляра микросхемы УЖЕ ЗАПИСАНА на производстве, а программатор при перезаписи ее читает и восстанавливает. ПИККит2 может ее восстановить при утере по определенной методике...

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

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

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

Ну правильно, формат файла никак не имеет отношения к содержимому и ему неизвестно какое адресное пространство у контроллера он просто сохраняет то что указано в программе. калибровочная константа записывается в последнюю ячейку адресного пространства контроллера, но из-за какойто особенности, указывают её как два слова в первой ячейке. Это особенность то ли 16-х пиков толи конкретно 16F84 подробностей уже не помню, когдато мельком читал на русском форуме микрочипа о чем-то связанным с этой константой. ПРограмматор может её игнорировать или спросить перед прошивкой о необходимости взять её с файла или оставить неизменной. Собственно с этим не стоит и заморачиваться т.к. если рассчет делается на внутренний генератор не стоит сильно полагаться на его стабильность.

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

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

Да все там проще пареной репы.

Последняя ячейка содержит команду retlw 0xXX, где ХХ и есть константа.

В первых шагах программы дается вызов на эту ячейку, а возвращенное значение заносится в OSCCAL. Напр.:

call 0x3FF

movwf OSCCAL

Все, внутренний RC-генератор установлен в максимально точное (+/-2%) значение.

Но к 84-му все вышесказанное не имеет никакого отношения, т.к. в нем нет внутреннего RC-генератора, следовательно, калибровать в нем нечего.

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

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

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

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

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

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

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

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

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

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

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

×
×
  • Создать...