Пост N: 1146
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
3
Отправлено: 27.04.09 18:53. Заголовок: Генератор задержек для ПИК
Примерно полтора года назад, здесь была просьба сделать программу, аналогичную программе "Pause" Николая Марова, но которая должна формировать задержку исходя из данных о частоте генератора контроллера и длительности задержки. Тогда это не получилось сделать и пришлось ограничится калькулятором, который высчитывал число машинных циклов исходя из данных о чатоте генератора и длительности задержки.
Буквально пару дней назад Игорь Батов подкинул мне идею как это можно сделать. После нескольких экспериментов стало понятно что направление правильное и надо "копать" именно в эту сторону. В результате, через пару часов всё получилось (кажется), по крайней мере я не смог найти ошибок в преобразовании. Но непомешает дополнительная проверка. Выкладываю заготовку программы, её надо протестировать http://www.filehoster.ru/files/cq1114 Сейчас она работает только с машинными циклами - так проще её отлаживать. Кагда станет ясно что программа работает стабильно и ошибок в преобразовании нет, тогда соединю её с калькулятором.
Пост N: 1134
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 25.06.09 22:52. Заголовок: В части касающейся..
В части касающейся ПП фиксированных задержек, ассемблерные инструкции остаются теми же, но двухсловную команду GOTO целесообразно (и нужно) заменить на однословную команду BRA. После этого, в ПП фиксированной задержки, будут применяться только однословные команды. Чтобы "перепрыгнуть" (вверх), через одну однословную команду (например, BRA, decfsz и т.п.), нужно использовать не $-1, а $-2, так как однословная команда системы команд ПИКов 18-й серии состоит из 2-х байтов и адресация происходит не к N-битному слову (как в ПИКах среднего семейства), а к байту слова (в ПИКАх 18-й серии, одно слово это 2 байта). Чтобы "перепрыгнуть" (вверх), через одну двухсловную команду (например, GOTO), нужно использовать не $-1, а $-4 (но лучше ориентироваться на однословную команду BRA). Это легко проверить в симуляторе, при пошаговом исполнении ПП фиксированной задержки (ориентация на окно Program Memory).
decfsz Reg_1 bra $-2 decfsz Reg_2 bra $-6 decfsz Reg_3 bra $-.10 decfsz Reg_4 bra $-.14 nop
ACCESS можно не прописывать, так как по умолчанию, устанавливается банк быстрого доступа. Место сохранения результата можно не прописывать, так как он, по умолчанию, сохраняется в F, и при этом (работа с ПИКами 18-й серии), "предупреждалок не выдается (при работе с ПИКами среднего семейства, если ,F отсутствует, то выдается). Регистры лучше прописывать с заглавной буквы.
Петр, спасибо. Очень удобно и функционально. Это программа с прекрасным будущим. Но в интересах дела (это просьба ко всем), ее нужно "просканировать" и высказать свои замечания (если они есть). На мой взгляд, например, вместо Reg_1, F, BANKED нужно писать Reg_1,F,BANKED. То есть, без пробелов. Абревеатура BANKED работает тогда, когда подключен INC-файл или он не подключен, но в "шапке" прописано BANKED equ 1 Если INC-файл не подключен и в "шапке" нет BANKED equ 1, то в тексте ПП задержки нужно писать Reg_1,F,1 Кстати, это универсальный вариант, который "срабатывает" в любом случае. А если это универсально, то на мой взгляд, к этому и нужно "привязываться" (в окне "Редактирование профилей" можно ничего не изменять. Изменения - в тексте ПП). Впрочем, это только пожелание. Можно оставить так, как есть.
Пост N: 1137
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 27.06.09 14:56. Заголовок: И еще одно замеча..
И еще одно замечание: нужно указывать не "PIC16", а "ПИКи среднего семейства" или "Среднее семейство", или перечислить номера всех серий, входящих в это семейство.
Пост N: 1203
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 27.06.09 16:29. Заголовок: Хорошо учту. Тогда л..
Хорошо учту. Тогда лучше F тоже заменить на 1
Можно ещё предусмотреть поддержку нескольких языков, ведь Русский не для всех является родным. Тем более что программа компилируется в формате юникода и поэтому может отображать текст на любом языке, даже если его исконно не поддерживает операционная система. Поддержку языков сделать через файлы, что позволит без проблем вводить новые языки не модифицируя программу.
Пост N: 1139
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 27.06.09 17:58. Заголовок: Вы это про название ..
Вы это про название профиля или текст в выпадающем списке "Тип" на закладке "Редактирование профилей"? Я имею ввиду замену в тех "местах", где есть возможность выбора того или иного семейства. Поддержка языков - прекрасно. Это расширит популярность программы. F на 1 можно не менять, так как современные MPLABы автоматически ставят в соответствие одно другому.
К сожалению программа не запускается на Win98 если она скомпилирована в формате юникода. Если компилировать в формате ASCII, то программа запускается и работает, но поддержки других языков небудет! Впринципе перекомпилировать в формат ASCII - минутное дело...
Пост N: 1210
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 27.06.09 21:54. Заголовок: Если верить вики, то..
Если верить вики, то в среднее семейство входят только PIC12 и PIC16
цитата:
Архитектура среднего (MID-RANGE) семейства Архитектура среднего семейства (Mid-Range) нашла применение в микроконтроллерах серий PIC12 и PIC16, и имеет ширину слова памяти программ 14 бит.
Пост N: 1143
Зарегистрирован: 06.05.07
Откуда: Россия, Липецк
Рейтинг:
4
Отправлено: 27.06.09 23:00. Заголовок: Замечание по делу...
У семейства Baseline (базовое. 12 разрядов) и Mid-Range (среднее. 14 разрядов), не смотря на различную разрядность команд, конструкция ПП задержки одинакова. То есть, лучше написать или "Базовое и среднее семейство" или PIC10/12/16, или на Ваше усмотрение. Кстати, в базовом семействе есть ПИКи и 12, и 16-й серий. Это можно выяснить в MPLAB версии 8.10 и выше (Configure - Select Device…).
Добавил поддержку языков, файлы с описанием которых, находятся в папке Language. Программа при запуске сканирует эту папку и регистрирует все файлы с расширением lng Для добавления нового языка, достаточно переименовать имеющийся файл и открыв его в "блокноте", заметить все слова после символа = на соответствующие для данного языка.
Сейчас в этой папке есть файлы поддержки русского и английского языка, но я не уверен что всё правильно перевёл на английский.
Пост N: 1212
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 29.06.09 15:48. Заголовок: Тогда нужно запретит..
Тогда нужно запретить их переименование чтобы программа смогла отличать эти профили. Хотя если будут удалены все профили, то профили по умолчанию создаются автоматичекки при запуске программы. Так что если по ошибке кто-то удалит все профили, то те, что по умолчанию восстановятся.
Пост N: 774
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 02.07.09 22:44. Заголовок: Дело в том, что я пе..
Дело в том, что я переделал подпрограмму задержки, используя команды, которые уже есть в 18 серии. Подглядел принцип у Атмелов, получилось тоже самое с выигрышем по командам. Правда небольшим, но вот используя тоже самое количество регистров задержка будет раза в полтора больше, теперь думаю как расчитать задержку. По формулам как то не очень получается. Но думаю, что формулу вывести можно однозначно. Все таки какая никакая, но математика.
Пост N: 777
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 02.07.09 23:21. Заголовок: Пётр пишет: Поэтому..
Пётр пишет:
цитата:
Поэтому выкладываю исходный текст программы на языке PureBasic
Спасибо. Глянул мельком, принцип ясен. Но мне кажется должно быть решение проще. Ведь вначале идет какое то число машинных циклов, оно постоянно и меняется только при изменении количества регистров. Допустим у нас используются два регистра, оба в цикле, значит можно подсчитать количество циклов при известном значении времЕнных регистров. Следовательно возможна и обратная задача. С одним регистром все и так понятно, достаточно умножить число в регистре на количество машинных циклов в одном цикле задержки и прибавить к нему еще время, нужное для записи этого самого регистра. С двумя будет посложнее, с тремя формула еще сложнее... Надо попробовать с двумя регистрами, а то взялся сразу за три.
Пост N: 1221
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 03.07.09 08:05. Заголовок: Алексей пишет: Допу..
Алексей пишет:
цитата:
Допустим у нас используются два регистра, оба в цикле, значит можно подсчитать количество циклов при известном значении времЕнных регистров.
Выполнить что-то наподобие симуляции работы этого цикла? Это будет знимать слишком много времени при больших длительностях задержки - годами ждать придётся!
Хотя попробовать можно. Может и получится "изобрести велисипед" совершенно другой конструкции.
Пост N: 782
Зарегистрирован: 26.12.06
Откуда: Россия, Архангельск
Рейтинг:
1
Фото:
Отправлено: 05.07.09 00:51. Заголовок: Пётр пишет: Это буд..
Пётр пишет:
цитата:
Это будет знимать слишком много времени при больших длительностях задержки - годами ждать придётся!
Ничего подобного. С двумя регистрами все довольно просто, уже вывел формулу, но есть недостатки, необходимо дорабатывать. Никакой подобии симуляции нет, просто математическая формула, вычисляться это все будет практически мгновенно. Но еще раз повторяюсь задержку модернизировал под команды 18 пиков так:
Есть выигрышь по командам, да и получается при одних и тех же значениях регистров бОльшая задержка, т.е. в некоторых случаях получится выигрышь в регистрах, вместо трех нужно всего два, или четырех, только три...
Пост N: 1225
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг:
4
Отправлено: 05.07.09 10:43. Заголовок: Алексей пишет: есть..
Алексей пишет:
цитата:
есть недостатки, необходимо дорабатывать
Примерно тоже было и у меня. Грубую форулу вывел примерно за час, а на вывод точной форумы потребовалось гораздо больше времени. При разработке такой программы главная проблема в том, что используется несколько взаимо зависимых формул, и иногда тестируешь программу с разными значениями задержки и вроде всё ОК, а потом выясняется что при определённом числе машинных циклов вычисления происходят неправильно и опять всё сначала!
Подкидываю мысль: а что если спросить у Николая Марова
У Алексея немного другая структура программы задержки, поэтому формула будет немного другая.
PS. Начал адаптировать программу PIC_Delay под Linux. Пока получается, правда пришлось отказатся от некоторых непринципиальных вещей. Среди нас есть кто-то использующий операционную ситему Linux?
Все даты в формате GMT
3 час. Хитов сегодня: 14
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет