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

crazz

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

Доброго времени суток, всемогущий All.

16F628a

RB0-RB2 входы

RB3 шим

RB4-RB7 выходы

состояние на выходах PORTB к примеру b'0100....'

необходимо изменить скажем на b'1010....'

если воспользоваться командами:

MOVLW b'1010000'

MOVWF PORTB

каким образом они могут повлиять на входы и шим ?

если влияние есть, то подскажите как одновременно изменить значения с 4 по 7 байт не затрагивая остального.

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

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

Есть команды побитных логических операций (маски).

Для изменения отдельных бит в байте пользуются логической функцией XOR (исключающее ИЛИ).

Пример.

movlw b'11110000'
xorwf  PORTA, f

В результате четыре старших разряда порта А изменят свое значение на противоположное.

Если нужно установить в 1 эти же разряды, то применяем ИЛИ:

movlw b'11110000'
iorwf  PORTA, f

Если нужно установить в 0 эти же разряды, то применяем И:

movlw b'00001111'
andwf  PORTA, f

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

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

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

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

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

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

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

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

Прошу обратить внимание на: RB0-RB2 входы, RB3 выход шим

Что с ними может произойти если отправлю:

movlw   b'1010000'
movwf   portb       

или

movlw   b'1011111'
movwf   portb       

или

movlw b'11110000'
xorwf  PORTB, f

movlw b'11110000'
iorwf  PORTB, f

movlw b'00001111'
andwf  PORTB, f

Изменят ли свое назначение на выходы с выставлением соответствующего уровня?

Или входы просто проигнорируют попытку прописать в них что-либо?

Или ...?

Да еще и шим тут.

В чем разница между тупой отправкой нового состояния и накладыванием некой маски(опять же отправкой чего-либо в порт)?

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

За время проведения опроса и определения маски может измениться состояние входов и маска тогда окажется неверной.

Как быть?

Потому и прошу разъяснения: можно ли так тупо слать новое состояние порта, учитывая что RB0-RB2 входы, RB3 выход шим?

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

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

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

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

Для определения маски ничего не нужно опрашивать. Достаточно прочитать в любом учебнике по Булевой алгебре про логические функции. Если разряд xor-ится с 1, то он изменит состояние на противоположное, если с нулем, то не изменит (останется прежнее значение). Если разряд получает маску 0 в ИЛИ, то он не изменяет своего состояния, а если 1, то устанавливается в 1. Если разряд получает маску 0 в И, то он сбрасывается в 0, а если 1, то не изменяет своего состояния.

Тупая отправка в порт всего байта изменит состояние всех бит (в общем случае).

Есть процедура RMW (чтение-модификация-запись) для контроллеров с объединеными пинами входа и выхода выходной защелки.

Это нужно учитывать. К Вашему вопросу это не относится, однако стоит узнать...

Дело в том, что даже в битных командах типа bcf-bsf на самом деле происходит чтение всего байта порта, модификация прочитанного байта (изменение разряда) и затем запись модифицированного байта обратно во все разряды порта. Это неизбежно, поскольку отдельные биты НЕ АДРЕСУЮТСЯ дешифраторами адреса внутренней шины.

Приводит это к следующему возможному эффекту. Если принудительно удерживать уровень на пине одного из разрядов порта и произвести битную команду с другим разрядом этого же порта, то принудительный уровень ПЕРЕЗАПИШЕТСЯ из входного пина при чтении в выходную защелку при записи (после модификации).

Отдельно про ШИМ.

При включении периферийного модуля выход защелки порта ОТКЛЮЧАЕТСЯ автоматически, поскольку два выхода не могут работать на один пин. Если конечно они не "оупен дрейн". Объединение открытых стоков возможно - это называется "монтажное ИЛИ".

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

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

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

Что делать если , устроиство в котором стоит PIC не работает, а измеряя генерацию на выводах с кварцем ничего не вижу на осцилографе, полагаю что должна быть размытая полоса от +5 до земли?

Не цитируите полностью предыдущее сообщение!!!

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

Небольшой вопрос для знатоков, если в слове конфигурации 0011111111110010 3FF2 для пик16ф873 седьмои бит ( внутрисхемно нисковольное питание програмирования ) стоит 1 это включено, это значить надо програмировать только низким питанием или можно и обычным?

Не цитируите полностью предыдущее сообщение!!!

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

Вот что я накопал, обратите внимание на этот исходник и схема из 721 поста, так в исходнике прошивка под другой пик!!!! PIC16F73 , а в схеме стоит 873!! сравнив оба, нашел первое что слово конфигурации у них разное хоть и не критически, всего лишь защита памяти устанавливается.

Не цитируите полностью предыдущее сообщение!!!

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

Смотря какой осцилограф, он может своим входом зашунтировать работу генератора.

стоит 1 это включено, это значить надо програмировать только низким питанием или можно и обычным?

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

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

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

Вобщем спасибо всем, на дружественном форуме мне автор подсказал ,что в журнале радио 2010 3 опечатка, контроллер должен быть не pic16f873 , a pic16f73!!

Не цитируите полностью предыдущее сообщение!!!

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

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

Всем привет! У меня вот такой вопрос: где- то прочитал, что обязательно к контроллеру нужно подключать внешний синхронизатор(кварц),тк без него не загрузятся конфигурационные биты, а уже потом контроллер может работать без него в случае, если выбрана внутренняя синхронизация. Это действительно так?

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

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

Почему при програмировании pic, с помощью пиккит2 меняются или неправильно отображается конфигурация?

ВОТ например, я в программе выставлял 3F3A

d29bb09ebca74e8fc236b8366e2aa2fe.jpg

Не цитируите полностью предыдущее сообщение!!!

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

CP 0 DEBUG WRT1 WRT0 CPD LVP BOREN 0 0 PWRTEN WDTEN FOSC1 FOSC2

2F0A = 10 1111 0000 1010

3F3A = 11 1111 0011 1010

Это еще вопрос у кого неправильно...

По умолчанию по даташиту неиспользуемые фьюзы читаются нулями.

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

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

Почему то я не знал что не используется бит зажиты кода. 3da562dc079973a0717d61d7c8507022.jpg

вроде написано что используется как раз для защиты кода.

Не цитируите полностью предыдущее сообщение!!!

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

Вы не поняли.

Верхняя строка - это побитный регистр конфигурации.

Старший бит (CODE PROTECT) используется. А вот следующий за ним - нет. Внимательнее пожалуйста.

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

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

А ну только заметил что питы защиты СР1 СР0 продублированы, получается старшие только используются.Но почему только один? У меня в даташите так

CP1 CP0 DEBUG -- WRT CPD LVP BODEN CP1 CP0 PWRTE WDTE FOSC1 FOSC0

Не цитируите полностью предыдущее сообщение!!!

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

Скачиваю оригинал, у меня на 873!!!

Скачал, ну уж деиствительно, а рассматривая другой даташит на пик16ф73, обнаружил следующую неточность, или как это можно назвать, смотрите

ebc3c58db0e276563ba35034c2b7d4bd.jpg

Не цитируите полностью предыдущее сообщение!!!

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

Это нормально, значит бит не реализован в данном случае и читается логически как лог.1(активный), но бит конфигурации активным считается когда значение у него "0".

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

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

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

Скачиваю оригинал, у меня на 873!!!

Каким образом у Вас ПИККитная оболочка задетектила 873А, если вставлен 873-ий???

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

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

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

Не, у меня даташит на pic16f873, без буквы, я и подумал что это одно и то-же, а контроллер 873А.

Не цитируите полностью предыдущее сообщение!!!

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

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

Снова привет!

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

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

читал тут: http://forum.qrz.ru/archive/index.php/t-11710.html

говорят, методами микроконтроллера невозможно реализовать.

задача: считать все импульсы, и выводить на ЖКэкран , например, результат 4байтов счёта (т.е. до 4 миллиардов).

допустим, используем pic16f648А.

работаем с 16 битным таймером. Таймер переполнился, генерируется прерывание, по котором инкрементируется пользовательский регистр.

вопрос у меня в том, что происходит в процессе перехода по прерыванию (если на счётный вход приходит в этот момент очередной импульс), в процессе чтения показаний таймера (для вывода на ЖК , скажем, раз в 0.2 секунды). Пока читается младший байт счётчика, может прийти импульс, который его переполнит и исказит показания старшего байта.

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

Если работать с 18F2550, то если одновременно считать двумя 16 битными счётчиками, в которых данные со смещением, пока один считает, работаем с другим, и наоборот, иожет ли такой подход гарантированно сосчитать все импульсы, не потеряв ни одного (естественно в пределах временных регламентов схемотехники)? Или же для решения задачи использовать внешние синхронные счётчикина дискретных элементах?

(задача довольно обычная - хочу для себя собрать сцинтилляционный дозиметр, там приходят импульсы часто и быстро, да и приятно видеть большую разрядность на ЖК. )

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

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

Для понимания процесса давайте рассмотрим схему таймера.

Обычный синхронный/асинхронный (на выбор) счетчик с выходом переполнения. Выход переполнения синхронно во втором такте машинного цикла устанавливает триггер переполнения (неинверсный выход этого триггера и есть флаг прерывания этого таймера). Сбросить этот триггер (флаг) можно только программно, через регистр флагов.

Т.е. после переполнения вам надлежит обработать флаг (или прерывание по нему) и успеть сбросить флаг ДО ПРИХОДА СЛЕДУЮЩЕГО ПЕРЕПОЛНЕНИЯ. Иначе следующее переполнение будет пропущено.

Про чтение на лету 16 разрядных таймеров в 18-х контроллерах.

Это совсем просто. Для этого имеется буфер на старший байт.

Первым надлежит читать МЛАДШИЙ байт. В момент его чтения будет совершенно синхронно переписан в буфер сташий байт счетчика. И потом совершенно спокойно Вы прочтете старший байт из буфера. Старший байт счетчика вообще программно не доступен ни на запись, ни на чтение. Только буфер.

Запись (установка) таймера происходит в обратном порядке. Сначала в буфер старший байт, затем при записи младшего синхронно будет занесен и буфер.

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

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

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

В догон.

Счет внешних импульсов с частотой выше, чем системная частота контроллера (не осциллятор, а маш.циклы) возможен только в АСИНХРОННОМ режиме счетчика/таймера...

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

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

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

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

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

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

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

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

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

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

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

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

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