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

Вопросы от начинающих по МК


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

Нашёл такой вот интересный момент в даташите:

Цитата

When switching between tri-state ({DDxn, PORTxn} = 0b00) and output high ({DDxn, PORTxn}= 0b11), an intermediate state with either pull-up enabled {DDxn, PORTxn} = 0b01) or output low ({DDxn, PORTxn} = 0b10) must occur. Normally, the pull-up enabled state is fully acceptable, as a high-impedant environment will not notice the difference between a strong high driver and a pull-up. If this is not the case, the PUD bit in the MCUCR Register can be set to disable all pull-ups in all ports.
Switching between input with pull-up and output low generates the same problem. The user must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state ({DDxn, PORTxn} = 0b10) as an intermediate step.

Речь о том, что сразу поменять и направление, и состояние порта нельзя (с 00 в 11 или с 01 в 10), требуется промежуточное состояние (00 - 01 - 11, 10-11-01, как-то так). Только направление и состояние портов задаются разными регистрами, и поменять их одновременно, за один такт вроде бы нельзя. Одной командой меняем направление, второй состояние. И промежуточное состояние как бы само собой организуется. Тогда к чему это предупреждение? Может быть имеется в виду, что надо дать пару тактов этому промежуточному состоянию?

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

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

  • Ответов
  • Создана
  • Последний ответ

Топ авторов темы

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

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

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

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

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

Я с ассемблером и работаю. Что там такого особенного?

ldi r16,0b00011110
out DDRB,r16;задали направление пинов
ldi r17,0b00111011
out PORTB,r17;задали состояние выводов и подтяжку вводов

После ресета порты в состоянии tri-stated, то есть ввод без подтяжки, то есть 00. Предположим, хочу перевести пин в вывод высокого уровня. Сначала меняю значение в регистре направления - получаю 10, вывод с низким уровнем, потом меняю уровень, получаю 11 - вывод высокого уровня. Вот оно, промежуточное состояние, которое an intermediate state must occur, естественным образом получается.

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

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

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

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

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

@Огонёк если состояние вывода нуля вам нежелательно, меняете последовательность обращения к регистрам. О том и речь.

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

1 час назад, Огонёк сказал:

суть не меняется - два регистра, за один такт оба параметра не изменишь.

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

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

Мудрость приходит вместе с импотенцией...

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

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

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

Меня в очередной раз озадачил атмеловский подход к написанию даташита.

Цитата

Switching between input with pull-up and output low generates the same problem. The user must use either the tri-state ({DDxn, PORTxn} = 0b00) or the output high state ({DDxn, PORTxn} = 0b10) as an intermediate step.

Написано так, словно промежуточное состояние не формируется само собой в процессе переключения порта, а пользователь обязан целенаправленно его создавать (The user must use...), и если не позаботится об этом, то что-то пойдёт не так.

Да ещё и опечатка вкралась: the output high state ({DDxn, PORTxn} = 0b10) должно быть 0b11.

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

22 минуты назад, Starichok сказал:

конечный результат будет одинаковый.

Зато промежуточный результат будет разный. Правда, не на долго.

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

@Огонёк , вот перевод твоей цитаты из даташита:

Переключение между входом с подтяжкой и низким выходом порождает ту же проблему. Пользователь должен использовать либо трехфазное состояние ({DDxn, PORTxn} = 0b00), либо выходное высокое состояние ({DDxn, PORTxn} = 0b10) в качестве промежуточного шага.

понимать это следует так:

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

отключение подтяжки и есть тот промежуточный шаг. 

или выход с высоким уровнем - тоже промежуточный шаг. 

Мудрость приходит вместе с импотенцией...

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

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

@Starichok Между "пользователь должен использовать одно из двух состояний" и "порт обязательно пройдёт через одно из двух состояний" есть разница, и я бы использовал в даташите вторую формулировку. "Пользователь должен использовать" - обязательство к действию, "порт пройдёт" - просто предупреждение об особенностях процесса. Впрочем, может в английском языке смысловая разница не столь велика.

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

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

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

Мудрость приходит вместе с импотенцией...

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

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

  • 3 месяца спустя...

Подскажите, собрал esr Miron63, lcd синий, хоть слепни. Контраст менял, все, что вытянул на фото, это еще свет направил. Это особенность синих lcd1602? 

Спойлер

IMG_20221113_191531.thumb.jpg.9a98fbbe4aaec3af212cd2268844a05b.jpg

 

Что не делается, то к лучшему !!!

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

Я полагаю автор специально не использовал Подсветку, что бы батарейку меньше кушало, пересмотрел и схему и мануалы, A K не затронуты ни где.  Schematic_V3.pdf  

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

Что не делается, то к лучшему !!!

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

27 минут назад, Гость_Григорий_Т. сказал:

Автор не знал, 

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

Что не делается, то к лучшему !!!

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

В 14.11.2022 в 10:23, войтов сказал:

Пора переходить с кроны на АКБ.

Как раз вчера, заказал на Алике.

 

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

Что не делается, то к лучшему !!!

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

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

Добрый день. Если не зациклить программу на ассемблере в микроконтроллере, то что произойдет, когда все команды выполнятся? И программа дойдет до строчки end ? МК перестанет выполнять свою работу?

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

35 минут назад, Delfin сказал:

МК перестанет выполнять свою работу?

Ага, на пенсию уйдёт :D

МК не может просто взять и остановиться, он всегда будет выполнять команды. Если только не загнать его в слип.

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

Ну команды же в ассемблере выполняются по порядку. И если сделать команду GOTO и поставить метку, то программа будет выполнять по кругу. Но если команды GOTO нет? МК выполнил все команды в асме, прошелся от "org 0" до "end", а потом что? 

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

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

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

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

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

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

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

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

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

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

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

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