Работа с портами ввода и вывода Ардуино через регистры.

Создаем свой блок. Вопросы, помощь знатоков.
aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Работа с портами ввода и вывода Ардуино.

#21

Сообщение aidar_i » 23.10.2021{, 15:50}

Ingwar писал(а):
23.10.2021{, 13:10}
Но у Айдара чуть экономнее в используемой памяти
Все эти библиотеки созданы тоже в прямом обращении портам, но там библиотека, поэтому они больше памяти занимают. Быстрее и легче только ассемблер.
Эти блоки я создал для души, знал что такое есть и давно хотел сделать, новый редактор позволил. Что то грандиозное творить нет желания и возможность. Я так потихоньку, помаленьку :)
А вообще эти блоки можно применять в своих проектах вместо штатных без проблем.
И применяйте!

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Работа с портами ввода и вывода Ардуино.

#22

Сообщение Dryundel » 23.10.2021{, 16:23}

aidar_i писал(а):
23.10.2021{, 15:50}
Эти блоки я создал для души, знал что такое есть и давно хотел сделать, новый редактор позволил. Что то грандиозное творить нет желания и возможность. Я так потихоньку, помаленьку
Любой грамотно созданный ПБ является в первую очередь примером и учебным пособием для других.

Камрады! Если у вас есть чем поделиться, потратьте немного времени. Сделайте мир лучше!

edyapd
Капитан
Сообщения: 768
Зарегистрирован: 20.09.2019{, 11:38}
Репутация: 65
Имя: Эдуард

Работа с портами ввода и вывода Ардуино через регистры.

#23

Сообщение edyapd » 23.10.2021{, 20:18}

aidar_i писал(а):
20.10.2021{, 13:17}
Пример, где контроллер,если не ATmega328, в блоке пропишется рекомендация сменить контроллер на ATmega328
А почему бы блок не дополнить кодом и для других МК? Мне кажется, что должно получиться.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#24

Сообщение aidar_i » 23.10.2021{, 20:27}

edyapd писал(а):
23.10.2021{, 20:18}
aidar_i писал(а):
20.10.2021{, 13:17}
Пример, где контроллер,если не ATmega328, в блоке пропишется рекомендация сменить контроллер на ATmega328
А почему бы блок не дополнить кодом и для других МК? Мне кажется, что должно получиться.
Если кто то возьмётся было бы хорошо!
Но отдельными блоками.
Для ЕСП особо нет смысла.

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Работа с портами ввода и вывода Ардуино через регистры.

#25

Сообщение ecoins » 23.10.2021{, 21:16}

edyapd писал(а):
23.10.2021{, 20:18}
А почему бы блок не дополнить кодом и для других МК? Мне кажется, что должно получиться.
-------------------------
ecoins писал(а):
20.10.2021{, 19:46}
Есть еще нюансы при реализации комплексного решения - в блоках ecoins это реализовано.
Так же реализован быстрый дискретный ввод в т.ч. и с защитой от дребезга (работает без "тормозов").
Все блоки реализованы с определением номера пина на входе блока - это позволяет реализовать простой переход от между контроллерами разных типов без переделки проекта.
Уже писал - реализовано для всех контроллеров, поддерживаемых библиотекой ecoins RT_HW_BASE.h.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Работа с портами ввода и вывода Ардуино через регистры.

#26

Сообщение Di123 » 24.10.2021{, 18:43}

aidar_i, 12 как выход работает нормально
11 и 10 выдают на выходе 0,7в :nono:
поставил родные пины всё нормально стало

пол дня убил пока нашол проблему думал неправильно спаял перелопатил всё :rtfm:

Отправлено спустя 13 минут 33 секунды:
PHOTO_20211024_225514.jpg
Точнее 1.8в

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#27

Сообщение aidar_i » 24.10.2021{, 20:00}

Удалил
Последний раз редактировалось aidar_i 25.10.2021{, 22:12}, всего редактировалось 2 раза.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Работа с портами ввода и вывода Ардуино через регистры.

#28

Сообщение Di123 » 24.10.2021{, 20:45}

я мерил на пине
попробовал повыдёргивать платы с проекта в поисках ошибки и на этой стадии наоборот 10 и 11 норм а 12 выдаёт теперь 2,58в на выходе
попробуйте загрузить а на 12 порт повесить светодиод и померить напругу хотя там по свечению видно что ему плохо
тест.rar
(179.69 КБ) 34 скачивания

ecoins
Полковник
Сообщения: 2921
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 452
Откуда: Шатура
Имя: Энвер

Работа с портами ввода и вывода Ардуино через регистры.

#29

Сообщение ecoins » 24.10.2021{, 22:06}

Di123 писал(а):
24.10.2021{, 20:45}
я мерил на пине
попробовал повыдёргивать платы с проекта в поисках ошибки и на этой стадии наоборот 10 и 11 норм а 12 выдаёт теперь 2,58в на выходе
попробуйте загрузить а на 12 порт повесить светодиод и померить напругу хотя там по свечению видно что ему плохо
Так обычно бывает, когда pinMode() не сработал... (или аналог прямого доступа к регистрам не сработал)...

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#30

Сообщение Sancho » 25.10.2021{, 08:06}

ecoins писал(а):
24.10.2021{, 22:06}
Di123 писал(а):
24.10.2021{, 20:45}
я мерил на пине
попробовал повыдёргивать платы с проекта в поисках ошибки и на этой стадии наоборот 10 и 11 норм а 12 выдаёт теперь 2,58в на выходе
попробуйте загрузить а на 12 порт повесить светодиод и померить напругу хотя там по свечению видно что ему плохо
Так обычно бывает, когда pinMode() не сработал... (или аналог прямого доступа к регистрам не сработал)...
Так обычно бывает, когда на выходе импульсы, а не фикс. уровень.

Отправлено спустя 17 секунд:
Гляньте осликом.
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#31

Сообщение Dryundel » 25.10.2021{, 14:28}

aidar_i, подтверждаю, есть такая ерунда.
Без нагрузки вроде все норм.
Если есть нагрузка, то:
При использовании одноименных портов B2 и B3 напряжение падает.
Если использовать разные порты к примеру B3 и D4 то снова все норм.
Ослика сейчас нет, поэтому только по тестеру.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Работа с портами ввода и вывода Ардуино через регистры.

#32

Сообщение Di123 » 25.10.2021{, 16:55}

нормальная там осцилограма
остальные порты не тестил кроме этих трёх
возможно они все с болячками такими

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#33

Сообщение Dryundel » 25.10.2021{, 17:25}

aidar_i, кажись понял в чем причина неправильной работы.
Назначение выхода у тебя делается сдвигом.
DDRB = 1<<PB5;
А надо записью бита, так же как сделано присваивание состояния.
В противном случае при объявлении второго и последующих пинов уже установленные биты регистра сдвигаются.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#34

Сообщение aidar_i » 25.10.2021{, 17:36}

Удалил
Последний раз редактировалось aidar_i 25.10.2021{, 22:13}, всего редактировалось 1 раз.

Аватара пользователя
Sancho
Полковник
Сообщения: 4066
Зарегистрирован: 25.12.2015{, 17:32}
Репутация: 590
Откуда: Ярославль.
Имя: Александр
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#35

Сообщение Sancho » 25.10.2021{, 17:41}

aidar_i, это правильное замечание:
Dryundel писал(а):
25.10.2021{, 17:25}
Назначение выхода у тебя делается сдвигом.
DDRB = 1<<PB5;
А надо записью бита, так же как сделано присваивание состояния.
т.е. по или
DDRB |= 1<<PB5;
мой ник в нете и почте omelchuk890, если что. запомните на всякий. многие знают номер тлф.

Аватара пользователя
Di123
Капитан
Сообщения: 828
Зарегистрирован: 03.11.2018{, 19:38}
Репутация: 29
Имя: Дмитрий

Работа с портами ввода и вывода Ардуино через регистры.

#36

Сообщение Di123 » 25.10.2021{, 17:45}

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

Аватара пользователя
Dryundel
Полковник
Сообщения: 2401
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 783
Откуда: Ярославль
Имя: Андрей
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#37

Сообщение Dryundel » 25.10.2021{, 17:51}

Sancho писал(а):
25.10.2021{, 17:41}
т.е. по или
DDRB |= 1<<PB5;
Возможно и так. Я в этом немного плаваю.
Можно попробовать так:
DDRD |= 1<<5;

Отправлено спустя 5 минут 9 секунд:
aidar_i писал(а):
25.10.2021{, 17:36}
Прогнал Ваш тест на Ардуино Уно с резисторами 220 ом и светодиодами. Сперва глючило, оказалось контакты ненадежные были, нормально сделал, все работает как надо.
Не надо гонять тест. Попробуй задействовать сразу два пина с одного порта в проекте и подключи к ним светодиоды обязательно.
Без нагрузки напряжение норм показывает. А с нагрузкой сразу падает.
Если же с одного порта задействован только один пин, то все нормально, напряжение не падает.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#38

Сообщение aidar_i » 25.10.2021{, 19:08}

Dryundel писал(а):
25.10.2021{, 17:56}
Можно попробовать так:
DDRD |= 1<<5;
Это одно и то же.
Sancho писал(а):
25.10.2021{, 17:41}
aidar_i, это правильное замечание:
Dryundel писал(а):
25.10.2021{, 17:25}
Назначение выхода у тебя делается сдвигом.
DDRB = 1<<PB5;
А надо записью бита, так же как сделано присваивание состояния.
т.е. по или
DDRB |= 1<<PB5;
Да, дело в этом. Как я упустил?
А нужно то всего поставить черточки перед знаком равно, как Sancho писал.
Если применяется знаки |= происходит суммирование , а не затрагиваются состояние соседних пинов.
Последний раз редактировалось aidar_i 25.10.2021{, 22:18}, всего редактировалось 2 раза.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#39

Сообщение aidar_i » 25.10.2021{, 20:25}

Исправил БЛОК ВЫХОДА и добавил блок выхода с установкой состояния при старте.

aidar_i
Полковник
Сообщения: 3120
Зарегистрирован: 24.12.2016{, 16:55}
Репутация: 674
Откуда: Уфа
Имя: Айдар
Контактная информация:

Работа с портами ввода и вывода Ардуино через регистры.

#40

Сообщение aidar_i » 27.10.2021{, 02:50}

Блок выхода ШИМ 14,15,16 бит для теста.
Тесты Шим.flp
(305.37 КБ) 38 скачиваний
Последний раз редактировалось aidar_i 30.11.2021{, 19:47}, всего редактировалось 2 раза.

Ответить

Вернуться в «Разработка пользовательских блоков»