|
forum.rasskazovo.ru Форум Городского Портала
|
|
Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Ср 13 Янв 2010 21:29 Заголовок сообщения: |
|
|
Значит написал "скромную" статью по программированию. Размещаю целиком для красоты, без файлообменика.
Схема программатора.
Программатор подключается к СОМ порту ПК. И работает под управлением программы IC-prog
Программатор проще не бывает. Если серьезно заниматься, то таким не очень удобно. (У меня два USB программатора/отладчика и три самодельных для СОМ.) Для первого раза, попробовать можно.
Теперь подробней
Для программирования микроконтроллера нужно воспользоваться разъёмом ISCP. На время программирования все перемычки удаляется
Для программирования рекомендуется использовать некоммерческую программу IC-Prog , последнюю версию которой можно бесплатно загрузить с www.ic-prog.com (около 600 кбайт).
Установка и настройка программы IC-PROG:
Распакуйте программу в отдельный каталог. В образовавшемся каталоге должны находиться файл:
icprog.exe - файл оболочки программатора.
Запустите файл icprog.exe. Выберите "Settings" >> "Options" >> вкладку "Language" >> установите язык "Russian" и нажмите "Ok".
Согласитесь с утверждением "You need to restart IC-Prog now" (нажмите "Ok"). Оболочка программатора перезапустится.
В окне «настройки программатора»
Проверьте установки, выберите используемый вами COM-порт, нажмите "Ok".
Далее, "Настройки" >> "Опции" >> выберите вкладку "Общие" >> установите "галочку" на пункте "Вкл. NT/2000/XP драйвер" >> Нажмите "Ok" >> если драйвер до этого не был установлен на вашей системе, в появившемся окне "Confirm" нажмите "Ok" . Драйвер установится, и оболочка программатора перезапустится.
Программа готова к работе.
Программирование
Существует особенность при программировании PIC12F629. Дело в том, что для экономии выводов микроконтроллера используется внутренний тактовый генератор. На заводе, при выпуске контроллера, он калибруется. В память чистого контроллера записывается калибровочная константа тактового генератора (например 3448), она расположена в самой последней ячейки памяти программ. (адрес 3FFh).
Поэтому, подключив программатор и настроив IC-Prog, необходимо выбрать в окне тип контроллера (PIC12F629) и считать его память. Найти калибровочную константу и на всякий случай именно для этого контроллера записать её на бумажке или еще где-то.
После этого открыть файл, в IC-Prog, с кодом который надо записать в память, расширение hex. Биты конфигурации будут установлены автоматически. Надо проверить калибровочную константу записана ли она. Если нет, то забить вручную щелкнув по последней ячейки памяти программ.
Нажать кнопку "программировать".
Програма может спросить
здесь надо сказать "да"
а здесь "НЕТ"
Если будет подтверждение успешного программирования, то значит все прошло успешно. но считать микросхему и посмотреть калибровочную константу, на всякий случай, нужно. Вернуть перемычки на место, отключить разъем ICSP. И с замиранием сердца, можно включать.
Общие рекомендации по ICSP внутрисхемному программированию
PIC-контроллеров
При использовании ICSP на плате устройства следует предусмотреть возможность подключения программатора. При программировании с использованием ICSP к программатору должны быть подключены 5 сигнальных линий:
Линия Назначение
GND (VSS) Общий провод.
VDD (VCC) + напряжение питания.
MCLR' (VPP) Вход сброса микроконтроллера / вход напряжения программирования.
DATA Двунаправленная шина данных в режиме программирования.
CLOCK Вход синхронизации в режиме программирования.
Остальные выводы микроконтроллера не используются в режиме внутрисхемного программирования.
Схемное решение:
• Линия MCLR' развязывается от схемы устройства перемычкой, которая в режиме внутрисхемного программирования (ICSP) размыкается, передавая вывод MCLR в монопольное управление программатору.
• Линия VDD в режиме программирования ICSP отключается от схемы устройства перемычкой. Это необходимо для исключения потребления тока от линии VDD схемой устройства.
• Шина данных в режиме программирования изолируется по току от схемы устройства перемычкой.
• Шина синхронизации PIC в режиме программирования так же изолируется по току от схемы устройства перемычкой.
ВНИМАНИЕ!!!
Рекомендуемая длина соединительного кабеля ICSP не более 50 см.
Вопросы будут? Если нет, пишу программы.
Последний раз редактировалось: MAZ (Чт 09 Авг 2012 13:36), всего редактировалось 5 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Чт 14 Янв 2010 09:50 Заголовок сообщения: |
|
|
Программа для передатчика готова.
Набросал алгоритм программы передатчика, чисто для интересующихся.
Пояснения.
Как видно, программа всегда должна быть циклична. Если программа остановилась, значит, она зависла (глюк, в народе).
Зачем задержка 20мс при опросе кнопок? Для устранения так называемого «дребезга контактов». Если у нас появился низкий уровень на входе, где подключена кнопка, то подождем 20мс, и еще раз опросим. Если опять низкий уровень, значит, кнопка точно нажата.
Что за число записываем в регистр кода? Это просто ключ кнопки. Нам не нужно строить супер защищенную систему, обходимся одним байтом.
Для интереса, если применили число из 8 байт, то на подбор всех вариантов, самому мощному компьютеру понадобилась около 60 000 лет.
В 8 байтах содержится, если я нигде не ошибся: 18446744073709551616 вариантов кода.
Программу кодека описывать не буду, авторское право.
Прошу извинить, если оформление алгоритма отличается от стандарного. Когда я учился, даже ПК не было. А во всем остальном самоучка и как мне, надеюсь и вам, удобно, так и делаем. Сертификация нам не грозит. .
Не люблю, когда, что-то обещал, и висит.
Постараюсь по быстрей сделать приемник, но там немножко посложней.
Не вижу вопросов?
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:54), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
nech Старожил
Зарегистрирован: 15.07.2007 Сообщения: 165 Откуда: Рассказово
|
Добавлено: Чт 14 Янв 2010 17:02 Заголовок сообщения: |
|
|
ух, информации много - переваривать не успеваю...
нам бы определиться чего и где из деталек искать!
может типа списка:
"название детали" - "количество" _________________ Если человека укусил вампир - то он тоже станет вампиром.
Но иногда складывается впечатление, что многих покусали бараны. |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Чт 14 Янв 2010 17:38 Заголовок сообщения: |
|
|
Есть новый магазинчик в Тамбове, на Интернациональной, где был "Орфей" с заднего двора. Выбор есть, но "Митино".
Т.е. по полной не найдешь.
Их можно заказать, могу дать приличную базу.
В принципе, могу все дать по себестоимости, все новое. Тут уже дело такое. В начале, всегда так. Узнаем друг друга. Чтобы не чувствовать себя, как сейчас модно, полным лохом.
Могу программатор дать по пользоваться, чтобы не паять.
Хорошо, список сделаю, и даже с ценой, для ориентира. Но после того как закончу программы и протестирую.
Конечно въехать сразу тяжело. Это быстро происходит на конкретном "железе". Главное пока, иметь общее представление.
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:54), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Пт 15 Янв 2010 14:56 Заголовок сообщения: |
|
|
Я вот тут подумал, если у нас везде практически "стационар".
Зачем тогда корпус SOIC для контроллеров? Обычный DIP и можно забыть о внутрисхемном программирование. Панелька, запрограммировал, вставил. Ни разъемов, ни перемычек, кабелей и т.п.
Как?
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:55), всего редактировалось 3 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Пт 15 Янв 2010 15:04 Заголовок сообщения: |
|
|
Закончил программу приемника.
Вот очень общий алгоритм.
Пояснение.
Эта программа посложней чем у передатчика.
Для общего понимания, я ввел "прерывание" от компаратора при приходе какого нибудь импульса, помеха , начало кодовой посылки без разницы. Определяется сигнал, если полезный декодируется и нужная нагрузка управляется. Когда нагрузка включается запускается встроенный таймер (счетчик) TMR1. Настроил его чтобы он считал каждый 0,5 сек и прерывал основную программу. Фиксируется, что прошло 0,5 сек и программа пошла дальше. Очень удобно, счет времени работы нагрузок идет как бы "автоматически". В это время мигает светодиод. Загорается на 0,5 сек через 3 сек.
Т.е. надеюсь, стало понятно, что такое прерывание. Стоит тупо мужик с рычагом, мимо проносятся поезда (программа), загорелся красный свет (условие прерывания), нажал рычаг. Поезда стоят. И что ему ни говори, он свою работу знает четко. Красный, дернуть рычаг.
Ну и на всякий случай, что -такое компаратор.
Это замечательное устройство. Как только маленький сигнал на его входе превысит порог на другом входе. Я настроил порог 0,2В. То на выходе будет высокий уровень ( у нас около 5 в), меньше порога, 0.
Так и формируются импульсы, которые "понимает " контроллер.
Прикрепляю прошивки для приемника и передатчика (hex файл) или еще их называют машинный код. Открывать только блокнотом.
http://depositfiles.com/files/2cur6nqtr
Они проверены только в симуляторе. Хотел прогнать еще в отладчике.
Но поиграть с ними в ISprog уже можно. Код защиты не ставил. Поэтому можно воспользоватся функцией декомпилирования в ISprog.
Кнопки ASM/HEX. Можно увидеть "убогий" исходный текст. Именно так и взламываются чужие программы, если терпения хватит разобраться.
Уже тянет на высокое звание "ХАКЕРА"
Андрей, поясни, как ты собираешься использовать передатчик в машине?
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:56), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Пт 15 Янв 2010 21:48 Заголовок сообщения: |
|
|
Что-то, устал.
Вот какие у меня есть новые детали. Ориентировочно 500р. (по блату)
Все остальное,по мелочевке, за счет фирмы "mazr", но б.у. Есть еще коллекция корпусов- пультов (новые), надо уточнить насчет передатчика.
А вот от чего устал.
вот с ним конкретно и мучаюсь.
Как говорится; "Довожу до ума", это для себя делаю.
Просили еще написать две программы, неожиданно быстро сделал, теперь можно отдохнуть. Ну никто не хочет общаться сегодня со мной.
Даже сказать , какая погода на улице.
Ладно, 100 граммов и пойдем общаться на своем форуме. Нет, пойду с псом погуляю, для здоровья полезней и псу радость.
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:57), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Сб 16 Янв 2010 17:38 Заголовок сообщения: |
|
|
В процессе тестирования программы приемника выяснилось.
1. Задержку (горит светодиод) надо сделать поменьше, 1сек. Долго ждать, если 2 сек..
2. Время работы передатчика увеличил до 50мс.
3. Здесь, пока подумаю. Если нажать и не отпускать кнопку, то передатчик будет каждую секунду посылать посылку с кодом этой кнопки. Включать и выключать нагрузку через секунду по кругу.
Надо определится, удобно это или нет. Если есть идеи, высказывайтесь.
Включаю приемник на тест.
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:57), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
nech Старожил
Зарегистрирован: 15.07.2007 Сообщения: 165 Откуда: Рассказово
|
Добавлено: Сб 16 Янв 2010 22:08 Заголовок сообщения: |
|
|
MAZ писал(а): | В процессе тестирования программы приемника выяснилось. |
А с помощью чего тестируется программа?
MAZ писал(а): |
Андрей, поясни, как ты собираешься использовать передатчик в машине? |
Передатчик можно установить в авто стационарно.
Подъезжаешь к гаражу - включил себе свет, отъезжаешь - выключил.
Я так понимаю что в первую очередь надо собрать программатор,
затем с его помощью заправить прошивку в микросхему.
а затем собирать приемник/передатчик.
Верно? _________________ Если человека укусил вампир - то он тоже станет вампиром.
Но иногда складывается впечатление, что многих покусали бараны. |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Вс 17 Янв 2010 01:12 Заголовок сообщения: |
|
|
Тут большой разности нет. Главное, чтобы проблем по меньше.
Тестирование, очень удобно в среде разработки MPLAB IDE, я пользуюсь отладчиком ICD2 с USB портом. Собираю на макетке "эскиз" устройства, подключаю отладчик и могу быстро посмотреть по шагово в реальном времени все процессы программы.
К сожалению, у 629 нет поддержки отладчика.
Поэтому тестирую, собрав на макетке и пользуясь симуляторм MPLAB IDE.
Если хочешь, можешь посмотреть, как все работает. Но пока все режимы не "устаканил". Только 100 мГб. Если нужно завтра дам ссылку.
Насчет программатора. Я спрашивал про корпус контроллера. Если DIP, то можно обойтись без программатора и внутрисхемного программирования. Дам программатор, вставишь в панельку и будет тебе счастье.
Насчет стационара в машине, поподробней. На лобовом стекле или как по другому, как подключать к питанию.?
Последний раз редактировалось: MAZ (Вс 17 Янв 2010 10:28), всего редактировалось 1 раз |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Вс 17 Янв 2010 10:27 Заголовок сообщения: |
|
|
http://depositfiles.com/files/t7ocsn8ql
Вот ссылка. Снял, что получается во время отладки и тестирования.
Сжимать было лень.
Но еще есть проблемы. Ищу. Без отладчика тяжко.
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:58), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Вс 17 Янв 2010 21:40 Заголовок сообщения: |
|
|
http://depositfiles.com/files/77r9usjrm
Совесть замучила, сжал в 5 раз. Извиняюсь за качество.
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 17:59), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Пн 18 Янв 2010 11:53 Заголовок сообщения: |
|
|
Закончил тестирования.
http://depositfiles.com/files/m9axidhgq
prm-yy.hex приемник
prd-yy.hex передатчик
Ни каких защит, ни каких счетчиков включений и паролей. Пользуйтесь на здоровье.
В программе приемника есть изменения.
1. При подаче напряжения питания на приемник, сетодиод статуса загорается на 2 сек., потом гаснет на 2 сек, и опять загорается.
Если светодиод горит, значит приемник включен, в рабочем состоянии и находится в режиме "сон". Правда из-за светодиода увеличился ток потребления в этом режиме, около 25мА. Думаю, для стационара это не страшно. Зато всегда видим, работает.
2. Светодиод статуса мигает: 0,5 сек горит 1 сек не горит.
Мигание, как и планировалось, является признаком работы хотя бы одной нагрузки.
Были конечно ошибки дебильные в программе. Были ложные срабатывания компаратора. Но как-будто все "задушил" программно.
Одну из "дебильных" своих ошибок я опишу. И можно будет понять, как просто пишутся программы для пиков и не нужно никакой физики.
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 18:00), всего редактировалось 3 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Пн 18 Янв 2010 16:54 Заголовок сообщения: |
|
|
Написал, маленький урок. Надежда умирает последней.
Хочу рассказать о маленьком кусочке программы приемника, где я допустил ошибку.
Ошибка, больше по невнимательности, чем по смыслу.
Вот вопрос, с чего начать. Начнем с нуля.
Бит – ячейка памяти программ, может принимать значение 1 (5вольт) или 0 (ноль вольт)
Третьего не дано. Поэтому и называется «двоичная система счисления».
Байт - условились, что 8 бит это один байт.
Регистр – физическая ячейка памяти, куда можно записать 1 байт информации.
В одном регистре = байте, можно записать 256 десятичных чисел. От 0до 255, перебором нулей и единиц.
Для начала, достаточно.
Теперь о кусочке программы, в котором была ошибка.
Надо было отсчитать время работы нагрузки №1, один час.
У нас есть внутри контроллера включенный таймер, который отсчитывает каждые 0,5 сек.
Значит надо зафиксировать 120 таких отсчетов, это будет 1 минута и умножить на 60, 1 час.
Как это сделать программно? У пик контроллеров среднего семейства есть всего 35 команд. В основном пользуются не более 15. Запомнить очень просто.
Вот кусочек программы, которая считает час.
shret_N1
incf regcek_N1
movlw .120
subwf regcek_N1,w
btfss STATUS,Z
return
clrf regcek_N1
incf regmin_N1
movlw .60
subwf regmin_N1,w
btfss STATUS,Z
return
goto vikl_N1 ; время истекло выключить
Для многих, это наскальные рисунки племени чунга – юнга. Но заметны цифры 120 и 60. Мы о них уже говорили.
Потихоньку, чтобы не пугались, разберем. Здесь всего 7 команд пика. Все остальное придумал я на английском языке.
regcek_N1 – регистр, где хранятся значение числа секунд, для нагрузки N1 (120 заходов в программу через 0,5 сек).
regmin_N1- регистр, где хранятся значение числа минут, для нагрузки N1 (60 заходов в программу через 1 минуту).
vikl_N1 – метка, подпрограмма выключить нагрузку N1
Так же меткой является shret_N1, я здесь хозяин - барин , так назвал подпрограмму «считаем время работы нагрузки N1)
Это уже придумали разработчики контроллера. Спасибо им.
STATUS,Z - есть такой регистр (8 бит) в контроллере, который следит за порядком.
Называется: «регистр статуса» работы. Каждый бит в нем называется флагом. Появилась 1 в регистре «STATUS» , как бы флажком контроллер нам помахал. Что-то случилось.
Нам интересен здесь, флаг Z.
Флаг Z – поднимается, если в результате какой-нибудь операции в программе результат будет 0. Например: 10 – 10=0, Z=1;
Ну и сами команды.
Incf - прибавить 1
Movlw – записать число в W - регистр-аккумулятор, особенность пиков, как бы промежуточный регистр. Для того чтобы записать в какой-нибудь регистр памяти программ число, надо сначала записать в регистр W, а уже из него в нужный.
Subwf – вычесть из регистра( который записан после команды ) регистр W
Return - выйти по стеку, не буду мучить, просто выйти из подпрограммы
Clrf – стереть регистр, записать в него все нули.
Goto – безусловный переход на указанную метку.
Btfss – если проверяемый бит регистра равен 1, то сделать «что-то»
если проверяемый бит регистра равен 0, то сделать «то-то»
по простому, объяснил команду ветвления
Теперь всё зная, расшифруем эту программу, после точки запятой комментарии.
; прошло 0.5 сек, заходим в подпрограмму.
shret_N1 ; подпрограмма счета времени работы нагрузки 1
incf regcek_N1 ; +1 в регистр regcek_N1
movlw .120 ; записать число 120 в W
subwf regcek_N1,w ; вычесть W из числа в regcek_N1 с cохранением результата в W
btfss STATUS,Z ; проверить флаг Z
return ; Z =0, число в regcek_N1 не равно 120, выходим из подпрограммы, ждем следующие 0,5 сек.
clrf regcek_N1 ; Z =1, значит число в regcek_N1 равно 120, прошла 1минута. Очистим регистр секунд для следующего счета одной минуты
incf regmin_N1 ; +1 в регистр regmin_N1, пошел счет минут
movlw .60 ; записать число 60 в W
subwf regmin_N1,w ; вычесть W из числа в regmin_N1, с охранением результата в W
btfss STATUS,Z ; проверить флаг Z
return ; Z =0, число в regmin_N1 не равно 60 , выходим из подпрограммы, ждем следующие 0,5 сек.
goto vikl_N1 ; Z =1, значит число в regmin_N1 равно 60, прошла 60 минут или 1час, выходим окончательно из подпрограммы shret_N1, переходя на подпрограмму выключения нагрузки N1, vikl_N1
Моя ошибка, забыл везде поставить subwf, и время отсчета было вечно.
Чтобы еще по наглядней, вот алгоритм подпрограммы shret_N1
Последний раз редактировалось: MAZ (Вт 26 Янв 2010 18:02), всего редактировалось 2 раз(а) |
|
Вернуться к началу |
|
|
MAZ Старожил
Зарегистрирован: 03.03.2009 Сообщения: 129 Откуда: мегаполис Рассказово
|
Добавлено: Пн 18 Янв 2010 17:04 Заголовок сообщения: |
|
|
Готовлю список деталей. |
|
Вернуться к началу |
|
|
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах You can attach files in this forum You can download files in this forum
|
|