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

Общие вопросы по PIC-микроконтроллерам


NebsteR

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

olkir, для расчёта задержек в ассемблере для PIC применяю, остальные языки программирования и контроллеры по аналогии

Формирование 1 мсек задержки:

При частоте генератора контроллера 4 МГц, машинный цикл (м.ц.) будет 1мксек.

В "кепке" программы определяем

N EQU d'249'

И переход на подпрограмму задержки определяется командой

CALL Del_1ms

в теле программы

Del_1ms

MOVLW N ;Записываем число N (d'249')в аккумулятор

P_

ADDLW -1 ;Вычитаем 1 из N и оставляем в аккумуляторе

BTFSS STATUS,Z ;Бит проверка. N равен нулю?

GOTO P_ ;Нет, возвращаемся к вычитанию и опять проверяем

RETURN ;Да. задержка завершена, возвращаемся в программу

Подсчёт задержки:

Команда CALL Del_1ms будет 2м.ц., MOVLW - 1м.ц.,ADDLW -1 - Nм.ц.,

BTFSS STATUS,Z - Nм.ц. и плюс 1м.ц. по завершении N+1м.ц.,GOTO - N-1м.ц.

плюс 2м.ц., получаем (N-1)x2м.ц., RETURN - 2м.ц.

Получение числа N:

2+1+n+(N+1)+2x(N-1)+2 = 1000 (мксек)

4+(4xN) = 1000

4xN = 996

N = 249

Если в подпрограмму задержки после команды ADDLW -1 добавлять NOP, то

можно увеличить задержку. Если установить 4 NOP, то получим задержку

1996 циклов или около 2мсек. При формировании задержки можно значение

N можно ставить ориентировочно, а подгонять в MPLAB проверкой длительности

кусочка программы.

Если пригодится.

Спасибо IMXO, прошу прощения за замечание, но там стоит суммирование не с 1, а с -1 что равнозначно вычитанию.

Для лучшего восприятия наверное надо было написать через SUBLW

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

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

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

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

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

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

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

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

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

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

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

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

И приз, за самый дельный комментарий:

...
RETURN ;Да. задержка завершена, возвращаемся в программу

...

Руки стоило-бы на х. оторвать подобному кодописателю...Корабельниковская школа, мля.

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

shindbad, могу огорчить, даже не читал оную школу и только для дискуссии,

временная задержка это подпрограмма из большой программы для контроллера и если написали RETURN мы продолжаем

выполнять программу далее (Вы грубы в своих амбициях). "....Я так думаю....".

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

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

но там стоит суммирование не с 1, а с -1 что равнозначно вычитанию.

сути это не меняет... в МК нет отрицательных чисел и -1 равнозначно 255....

но дело в том что N у вас не меняется и программа никогда не выйдет из цикла...

и для циклов по уменьшению есть специальная команда... decfsz reg, f

delay movlw 255
 movwf counter
 decfsz counter , f
	 goto S-1
 return

а вообще использование подобных задержек на 1000 м.ц. есть супер глупость...

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

IMXO, если сказать честно в своих программах использую в основном через DECFSZ, но при написании подвернулся

такой вариант, и хотел переписать, но просто подписал синеньким.

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

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

Есть в МК отрицательные числа.

есть признак переноса/займа, отрицательных чисел нет...

если бы это было так , то для целого знакового однобайтного числа -1 соответствует 0xEF

и команда movlw -1 должна была бы записать оное в аккумулятор...

однако записывается 0xFF , что соответствует целому беззнаковову однобайтному 255

признак переноса/займа при этом не задействывается... фирштейн?

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

  • 2 недели спустя...

сколько циклов записи/чтения выдержит EEPROM PIC16F628А?

максимальная скорость записи 1 раз в минуту

либо подскажите другой, более изящный способ сохранения текущего состояния для восстановления после потери питания.

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

сколько циклов записи/чтения выдержит EEPROM PIC16F628А?

Написано в даташите, в самом начале.

максимальная скорость записи 1 раз в минуту

Устройство будет раз в минуту выключаться/включаться ? Зачем так насиловать еепром ?
Ссылка на комментарий
Поделиться на другие сайты

должна быть запись текущего состояния (например номер алгоритма и номер шага)

если вдруг пропадёт питание не на долго и контроллер перезагрузится, то как программа узнает, что она работает и нужно выполнить алгоритм А с шага Б?

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

А если вдруг пропадёт питание не надолго в процессе записи данных в ЕЕПРОМ?

Лучше задействуйте аварийный источник питания (банальную батарейку, как в часах) и уже в случае пропадания основного питания, МК пусть это дело отслеживает и пишет данные в ЕЕПРОМ

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

Опыт - это то, что получаешь, не получив того, что хотел

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

А если лишней ноги нет следить за питанием?

Запись проиходит за микросекунды и емкости конденсатора по питанию должно хватить. Туда можно и 10000мкф воткнуть, так то...

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

  • 3 недели спустя...

Этсновая :)

Вопроса два:

1. На одну ногу МК можно повесить светодиод и симисторную оптопару? Или не хватит мощи и лучше воспользоваться транзистором?

2. Есть в программе счетчик минут, и есть три таймера (уставки). Как только номер минуты совпадает со значением уставки таймера (любого) должен пищать динамик ~5 секунд. Вот с этим у меня затык.

Делать функцию которая будет пять секунд пищать нельзя, т.к. цикл бесконечный и происходит обработка и других событий.

Пищалка самостоятельная, дергать ногой не надо. Просто вкл и выкл.

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

strifonoff, прочитал и вспомнился анекдот про Василия Ивановича с ёжиками: -и там иголки и там иголки ....

Информации никакой, и не понятно, про что речь (ни схемы ни программы) и не понятно что советовать.

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

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

Делать функцию которая будет пять секунд пищать нельзя
А зачем 5 секунд что-то делать (пищать), если :
Пищалка самостоятельная, дергать ногой не надо.
?

На самом деле, действительно, не понятно в чём у Вас "затык". Объяснения какие-то образные и понятные только Вам одному.

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

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

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

Ха-ха-ха...

Вешать два флага на один таймер(уставку) - особого ума не надо. Я искал более элегантное решение.

Функцией delay я пользуюсть только для 1-wire и для устранения дребезга контактов кнопок.

Таймер у меня один, т.к. МК (pic16f648) работает от внутреннего генератора.

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

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

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

Бритва Оккама...

Это слишком избыточно.

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

ЗЫ сам же просил "элегантное решение" и плакал что исходников нет :)

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

Это всеравно черезчур для моей задачи.

За ссылку спасибо, очень интересно и познавательно. В будущем, надеюсь, пригодится.

Мне проще потратить байт на флаги, пару байт на счетчик и десяток слов на обработку. Пока...

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

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

  • 4 недели спустя...

Здравствуйте. Возникла проблема mplab генерирует кривой код ,пример:

LIST P=PIC16F84A
	__CONFIG 0x3FF1

STATUS EQU 0x03
PORTB	EQU 0x06
TRISB	EQU 0x06

Reg_1 EQU 0x0C
Reg_2 EQU 0x0D
Reg_3 EQU H'0E'

			org 0
			bsf STATUS,5
			clrf TRISB
			bcf STATUS,5
 r1		bsf PORTB,1
			Call Pause
			bcf PORTB,1
			goto r1
;delay = 500000 machine cycles
Pause movlw .85
			movwf Reg_1
			movlw .138
			movwf Reg_2
			movlw .3
			movwf Reg_3
k1			 decfsz Reg_1, F
			goto k1
			decfsz Reg_2, F
			goto k1
			decfsz Reg_3, F
			goto k1
end

устанавливаеться высокий уровень на RB0 RB1 RB2 RB7 иии... всё, проверял в протеусе и железе, одна беда, может кто сталкивался с подобной проблемой. Ставил разные версии не помогло.

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

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

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

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

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

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

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

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

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

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

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

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