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

Фуоз-676 (Продолжение)


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

Чтобы это понять,надо изучить мнемонику команд МК(Буква F означает регистр с которым производится операция,W-это рабочий регистр,при выполнении команды результат сохраняется либо в регистре F скоторым производится действие,либо в рабочем регистре)

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

Здравствуйте все!

На сей момент заканчиваю снабжение дизассемблированного текста коментариями с одновременным внутренним пониманием работы программы. Узнал для себя много нового и полезного. Уже есть мысли по модернизации, но пока полностью не разберусь с работой программы, их озвучивать не буду. Как только текст будет приведён в "читаемый" вид - озвучу его, дело одного-двух дней.

Мне бы как раз сам алгоритм понять....

Изучение Ассемлера это вхождение в образ процессора..... матрица... дается только избранным :-)

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

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

Сборник ФУОЗ_1.rar

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

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

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

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. 

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

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

именно про этот я и говорил,но там ещё есть "довески" с программами и описаниями регистров спец.назначения и описаниями мнемоники команд...

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

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

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

вот теперь вроде всё как надо-изучайте!!! Сам начинал именно с данной стаьи,сначало полный бред,потом понемногу приходит понимание...Вдовесок полный перевод даташита 675го на русском языке(перевода 676 нет,но это его"младший брат"

_download_datasheet_pic12f629.rar

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

Три дня "кипящего мозка" и вот результат. Насколько позволили способности, снабдил раннее приведённый дизассм своими коментариями. Убрал "многоискровку" и чуть подправил переход от пусковых оборотов к рабочим, чтоб не было пропусков искры в районе 7Гц входящей частоты. В остальном функционал программы остался как в оригинале, схема как в №1 или с ТК на транзисторе и ЛМ431, но с одним транзистором на выходе в коммутатор.

Приношу извинения В. Шкильменскому за вторжение в его продукт. Желание оказалось сильнее.

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

Такой себе "реферат". :lol2:

POKET.ZIP

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


 

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

про кипящий мозг это хорошо сказано....Один скептический вопрос,для чего стоило менять инициализацию и сдвигать 1ютаблицу если так и осталось доп.вычетание 50,ведь изначально речь шла о применении проги График?или прога график будет подгоняться под данную прошивку?Или есть что то третье?

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

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

Поупражняться, "размять мышцы". Насколько Вы помните, в №94 я уже выкладывал архив с началом работы в направлении снабжения текста коментариями. Там уже было "смещение". Как будет в конечном продукте - посмотрим. Текст только закончил "коментировать". Буду разбираться с процедурами более тщательно.


 

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

Три дня "кипящего мозка" и вот результат. Насколько позволили способности, снабдил раннее приведённый дизассм своими коментариями. Убрал "многоискровку" и чуть подправил переход от пусковых оборотов к рабочим, чтоб не было пропусков искры в районе 7Гц входящей частоты. В остальном функционал программы остался как в оригинале, схема как в №1 или с ТК на транзисторе и ЛМ431, но с одним транзистором на выходе в коммутатор.

Приношу извинения В. Шкильменскому за вторжение в его продукт. Желание оказалось сильнее.

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

Такой себе "реферат". :lol2:

Здравствуйте.

Уважаемый IGO61, крепко жму руку, вы "избранный" - Нео :clapping:

Начинаем познавать...

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

Не могу объяснить себе следующее:

TBL_F ;изымаем данне из таблиц по обор, вакууму

MOVF N_ST,W ;строку - в аккум //ЗАПИСАЛИ N_ST В АККУМ

CALL CON_R ;читать в табл опер по оборотам //ПРИ ПЕРЕХОДЕ К МЕТКЕ CON_R (табллицы оборотов) В АККУМЕ ЗНАЧЕНИЕ: N_ST

;============================

CON_R ;таблица по оборотам

ADDWF PCL,F //К PCL(счетчику) МЫ ДОБАВЛЯЕМ АККУМ С ЗНАЧЕНИЕМ N_ST. А что находится в F?

GOTO START //ЗДЕСЬ ПОНЯТНО

RETLW 0x08 ; b'00001000' d'008' //ПО АДРЕСУ 0x08 ПЕРЕМЕННУЮ В АККУМ ГДЕ ХРАНИТСЯ СУММА PCL и N_ST так?

;============================ //ВОЗВРАЩАЕМСЯ ОПЯТЬ К TBL_F

MOVWF RET_OB;считанное сохранить в переменной //ЗАПИСЫВАЕМ АККУМ в RET_OB и в RET_XX

MOVWF RET_XX

MOVF N_ST,W ;строку - в аккум //ЗНАЧЕНИЕ N_ST в АККУМ

INCF PCLATH,F;адрес таблицы по вакууму //УВЕЛИЧИТЬ PCLATH на 1 если F(что хранится в F RET_OB ?)

CALL CON_W ;считать поправку по вакууму //Пропустим....

CLRF PCLATH ;вернуть счётчик команд к проге //Вернутся к началу программы ?

Пожалуйста помогите потушить мозг.... вот где то рядом истина...

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

CON_R ;таблица по оборотам

ADDWF PCL,F //К PCL(счетчику) МЫ ДОБАВЛЯЕМ АККУМ С ЗНАЧЕНИЕМ N_ST. А что находится в F?

GOTO START //ЗДЕСЬ ПОНЯТНО

RETLW 0x08 ; b'00001000' d'008' //ПО АДРЕСУ 0x08 ПЕРЕМЕННУЮ В АККУМ ГДЕ ХРАНИТСЯ СУММА PCL и N_ST так?

ADDWF PCL,F - к счетчику команд прибавляем смещение в таблице для этих оборотов, соответственно МК перепрыгнул по адресу который получился в счетчике.

GOTO START - это не используемые строки таблицы зашиты этой командой на случай сбоя

RETLW 0x08 - взяли из таблицы данные и вышли из продпрограммы.

Примерно так, как я понимаю.

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

CON_R ;таблица по оборотам

ADDWF PCL,F //К PCL(счетчику) МЫ ДОБАВЛЯЕМ АККУМ С ЗНАЧЕНИЕМ N_ST. А что находится в F?

GOTO START //ЗДЕСЬ ПОНЯТНО

RETLW 0x08 ; b'00001000' d'008' //ПО АДРЕСУ 0x08 ПЕРЕМЕННУЮ В АККУМ ГДЕ ХРАНИТСЯ СУММА PCL и N_ST так?

ADDWF PCL,F - к счетчику команд прибавляем смещение в таблице для этих оборотов, соответственно МК перепрыгнул по адресу который получился в счетчике.

GOTO START - это не используемые строки таблицы зашиты этой командой на случай сбоя

RETLW 0x08 - взяли из таблицы данные и вышли из продпрограммы.

Примерно так, как я понимаю.

т.е. ADDWF PCL,F -- а что содержится в F, если мы к PCL прибавляем W само значение ?

"Содержимое регистра W добавляется к содержимому регистра f. Если d = 0, результат сохраняется в регистре W. Если d = 1, результат сохраняется в том же регистре f."

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

Здравствуйте все!

Ну насчёт Нео - это Вы погорячились. :thank_you2:

Теперь по делу. Вступление: PCL - младший байт счётчика команд, PCLATH - грубо говоря, старший байт счётчика команд. Как известно, диапазон адресов в 676-м МК занимает область 3FF.

Так вот, в PCL мы вписываем смещение в таблицах в диапазоне 0...255, а в PCLATH вписываем смещение от 0 и выше, до FF. Так как таблица по оборотам находится в адресе до 100h, то в PCLATH у нас должен быть ноль. А таблица по вакууму начинается с адреса 100h. Поэтому для корректного перехода ко второй таблице в старший байт PCLATH адреса таблицы по вакууму нам нужно вставить 1. Еслибы вторая таблица начиналась с адреса 200h или 300h, то в PCLATH пришлось бы вбивать соответственно 2 или 3.

В целом, физика процесса такая. Имеем в аккуме номер строки (приращение). Входим в таблицу. По команде ADDWF PCL,F к текущему состоянию PC прибавляем акум (номер строки). Результат сложения остаётся в PC (буква F после запятой) и безоговорочно прыгаем на соответствующий номер строки. Там по команде RETLW 0x08 возвращаемся к исполнению основной проги с 0x08 в аккумуляторе.

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


 

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

Видать я не могу понять сам принцип измерения:

Между сигналами ДХ происходит измерение времени в соответствии с которым подбираем значение из таблицы для УОЗ в таблице для выдачи сигнала ?

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

Здравствуйте все!

Ну насчёт Нео - это Вы погорячились. :thank_you2:

Теперь по делу. Вступление: PCL - младший байт счётчика команд, PCLATH - грубо говоря, старший байт счётчика команд. Как известно, диапазон адресов в 676-м МК занимает область 3FF.

Так вот, в PCL мы вписываем смещение в таблицах в диапазоне 0...255, а в PCLATH вписываем смещение от 0 и выше, до FF. Так как таблица по оборотам находится в адресе до 100h, то в PCLATH у нас должен быть ноль. А таблица по вакууму начинается с адреса 100h. Поэтому для корректного перехода ко второй таблице в старший байт PCLATH адреса таблицы по вакууму нам нужно вставить 1. Еслибы вторая таблица начиналась с адреса 200h или 300h, то в PCLATH пришлось бы вбивать соответственно 2 или 3.

В целом, физика процесса такая. Имеем в аккуме номер строки (приращение). Входим в таблицу. По команде ADDWF PCL,F к текущему состоянию PC прибавляем акум (номер строки). Результат сложения остаётся в PC (буква F после запятой) и безоговорочно прыгаем на соответствующий номер строки. Там по команде RETLW 0x08 возвращаемся к исполнению основной проги с 0x08 в аккумуляторе.

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

Мы имеем вычисляемый переход условный с применением стека,в который заносятся все 13 битов програмного счётчика адреса команды следующуй за командой перехода.после выполнения этого перехода(получили мы поправку из 1ой таблицы и сохранили ее в регистре хранения. ЗАЧЕМ теперь нам тогда когда мы делаем 2ой вычисляемыц переход в таблицу 2 надо сначало прибавлять(а затем очищать ст.разряд РС)--там мы прыгали из 3ей страницы в 1ю и ничего не делали,а здесь прыгаем из 3уй во 2ю и делаем?????

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

Не могу объяснить себе следующее:

TBL_F ;изымаем данне из таблиц по обор, вакууму

MOVF N_ST,W ;строку - в аккум //ЗАПИСАЛИ N_ST В АККУМ

CALL CON_R ;читать в табл опер по оборотам //ПРИ ПЕРЕХОДЕ К МЕТКЕ CON_R (табллицы оборотов) В АККУМЕ ЗНАЧЕНИЕ: N_ST

;============================

CON_R ;таблица по оборотам

ADDWF PCL,F //К PCL(счетчику) МЫ ДОБАВЛЯЕМ АККУМ С ЗНАЧЕНИЕМ N_ST. А что находится в F?

GOTO START //ЗДЕСЬ ПОНЯТНО

RETLW 0x08 ; b'00001000' d'008' //ПО АДРЕСУ 0x08 ПЕРЕМЕННУЮ В АККУМ ГДЕ ХРАНИТСЯ СУММА PCL и N_ST так?

;============================ //ВОЗВРАЩАЕМСЯ ОПЯТЬ К TBL_F

MOVWF RET_OB;считанное сохранить в переменной //ЗАПИСЫВАЕМ АККУМ в RET_OB и в RET_XX

MOVWF RET_XX

MOVF N_ST,W ;строку - в аккум //ЗНАЧЕНИЕ N_ST в АККУМ

INCF PCLATH,F;адрес таблицы по вакууму //УВЕЛИЧИТЬ PCLATH на 1 если F(что хранится в F RET_OB ?)

CALL CON_W ;считать поправку по вакууму //Пропустим....

CLRF PCLATH ;вернуть счётчик команд к проге //Вернутся к началу программы ?

Пожалуйста помогите потушить мозг.... вот где то рядом истина...

описать одно и тоже действие можно по разному:

МOVF 0x28 ,W ;

CALL CONV_OB ;

МОVWF 0x29 ;

это можно описать не действиями отдельных команд,а связку команд(что она в итоге делает).В данном случае это можно описать например так :"По вычесленному значению N_STRОKI изымаем из таблицы 1поправку по оборотам находящуюся там в строке с номером соответствующим значению записанному в регистр N_STROKI .Полученную поправку сохраняем в регистре хранения.......Как то так(только сколько это надо писать сами видите)

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

Совершенно верно, важную роль играет последовательность, связка команд.

СамА таблица должна располагаться в пределах адресов памяти 0х0000...0х00FF, или 0x0100...0x01FF, или 0x0200...0x02FF, или 0x0300...0x03FF. Ни в коем разе таблица не должна перекрывать границы этих областей (если таблица "ляжет", например, с адреса 0х0098 и закончится в адресе 0х01А5, то в нашем случае она прочитается некорректно и нужно принимать дополнительные програмные меры для выравнивания этой нестыковки).

В нашем случае первая таблица начинается с адреса 0х0018h и имеет 227строк, не заходя в область адресов 0х0100. Вторая таблица начинается с адреса 0х0100 и тоже имеет 227строк.

Теперь - принцип чтения таблиц:

Таблица у нас находится в адресе 0х0018h ( CON_R ). Крутимся в проге, определились с номером строки таблицы (например 10h). Перед командой чтения таблицы (CON_R) в аккумулятор (W) вносим номер строки (10h), выполняем команду CALL CON_R. И прога переходит на адрес таблицы ( PCL =0х0018h), при этом имеет в аккуме номер строки (10h). Там встречает команду ADDWF PCL,F. К PCL (0х18) прибавляет аккумулятор (W=10h) и сохраняет сумму в PCL (буква F после запятой в команде). Врезультате сложения в PCL имеем адрес строки таблицы (0х18h+0х10h=0x28). Естественно, прыгаем в этот адрес, там встречаем команду RETLW 0x08 (выход из П/П со значением 0х08 в аккумуляторе W) и выходим из подпрограммы в то место проги, откуда сюда вошли.

Если таблица имеет начальный адрес бОльший чем 0х00FF (например 0х0100), то в старший байт счётчика команд PCLATH (непосредственно перед выполением команды CALL) нужно вбить 1. Тогда прога перейдёт на более старший адрес таблицы. И далее по раннее описанной схеме.

Вот как-то так.

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

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


 

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

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

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

и всётаки это всё не проясняет ситуации,в самом начале проги,при калибровки генератора мы прыгаем из 1ой стр. в последнюю и ничего с PCLATH не делаем и таких прыжков в программе много(на п.п.+/-,ацп ит.д.)Это что то нето...(или путай-путай или....-сам не знаю).Попробуйте убрать их и заменитЬ NOPами-эффект должен быть такой же(команды CALL и GOTO и так имеют разделение в кодах постранично:1стр-будет20,1стр-21 и т.д,и соответственно для GOTO:-28,29 и т.д.)

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

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

Нужно всего лишь открыть даташит и прочесть в каких случаях нужно работать с PCLATH напрямую, а в каких это уже заложено в командах, формат команд посмотреть нужно (в двоичном виде).

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

в даташите нет такого, говорится только чтобы не было перекрытия таблицей границ диапазона блока памяти или страницы(как удобно)т.к. при вычисляемом переходи ст .р. РС не инкрементируется!!!,а разделение кодовое я описал 1-20,2-21,3-22,4-22. Игорь ,в своих прогах из соседней ветки вы тоже используете аналогичный прём,но насколько я помню у вас первая таблица расположена не на 1ой странице и вы не прменяете к этой таблице аналогичный приём.... Извините за дотошность,но этот вопрос у меня в голове вертится уже очень давно...

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

Э-э, нет. В своёй программе/проекте при чтении таблиц, которые у меня расположены в 1-м, 2-м и 3-м (как Вы выразились "блоках", кстати вполне понятная аналогия, я с ней согласен), я старшему байту програмного счётчика (PCLATH) тоже присваиваю соответствующие значения 1, 2 или 3. В "нулевом блоке" расположен основной объём проги. Посмотрите мои тексты из проекта.

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

Я пытаюсь объяснить работу этого набора команд (чтение таблиц). Видно не совсем понятно выражаюсь. Сам понимаю как оно работает, применяю это, а самУ работу доходчиво разъяснить не могу.


 

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

Всем добрый вечер!!!

Я из рядов изучающих програмирование, предлагаю ещё рассматривать процесс получения и обработки данных для формирования УОЗ.

Думаю начинающим это поможет. Тоесть, при наборе п/п и складывании их в кучу, можно ничего не получить, поэтому при разборе обьяснять, почему при получении данных из таблиц

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

Я не говорю панацеи - я предлагаю варианты

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

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

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

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

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

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

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

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

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

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

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

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