MicroPython:Библиотеки/pyb/Класс Pin: различия между версиями
Myagkij (обсуждение | вклад) (Новая страница: «{{MicroPython/Панель перехода}} {{Перевод от Сubewriter}} {{Myagkij-редактор}} =<ref>[]</ref>= <syntaxhighlight lang="python"...») |
Нет описания правки |
||
(не показано 13 промежуточных версий 1 участника) | |||
Строка 3: | Строка 3: | ||
{{Myagkij-редактор}} | {{Myagkij-редактор}} | ||
=<ref>[]</ref>= | =Класс Pin – управление I/O-контактами<ref>[http://docs.micropython.org/en/latest/library/pyb.Pin.html docs.micropython.org - class Pin – control I/O pins]</ref>= | ||
'''Класс Pin''' – это базовый класс для управления I/O-контактами. В нем есть методы, чтобы задать режим работы контакта (входной, выходной и т.д.), а также методы, позволяющие задать и прочесть цифровой логический уровень контакта. Об управлении аналоговыми контактами читайте в статье о [[MicroPython:Библиотеки/pyb/Класс ADC|классе ADC]]. | |||
== Модель использования == | |||
<syntaxhighlight lang="python" | Все контакты платы предварительно определены в pyb.Pin.board.Name: | ||
<syntaxhighlight lang="python"> | |||
x1_pin = pyb.Pin.board.X1 | |||
g = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.IN) | |||
</syntaxhighlight> | |||
Контакты [[CPU]], соответствующие контактам платы, заданы в ''pyb.Pin.cpu.Name''. Название CPU-контакта состоит из буквы порта, после которой идет номер контакта. На ''PYBv1.0 pyb.Pin.board.X1'' и ''pyb.Pin.cpu.A0'' – это один и тот же контакт. | |||
Также можно использовать строки: | |||
<syntaxhighlight lang="python"> | |||
g = pyb.Pin('X1', pyb.Pin.OUT_PP) | |||
</syntaxhighlight> | |||
Кроме того, пользователи могут задавать собственные названия контактов... | |||
<syntaxhighlight lang="python"> | |||
MyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 } | |||
pyb.Pin.dict(MyMapperDict) | |||
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD) | |||
</syntaxhighlight> | |||
...и запрашивать привязочные данные: | |||
<syntaxhighlight lang="python"> | |||
pin = pyb.Pin("LeftMotorDir") | |||
</syntaxhighlight> | |||
Также пользователь может создать собственную привязочную функцию: | |||
<syntaxhighlight lang="python"> | |||
def MyMapper(pin_name): | |||
if pin_name == "LeftMotorDir": | |||
return pyb.Pin.cpu.A0 | |||
pyb.Pin.mapper(MyMapper) | |||
</syntaxhighlight> | |||
Таким образом, если вызвать ''pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP)'', то контакт ''"LeftMotorDir"'' будет напрямую передан привязочной функции. | |||
Итак, привязка номера обычного контакта к какому-то интересному названию осуществляется в следующем порядке: | |||
# Напрямую указываем объект ''Pin''. | |||
# Создаем пользовательскую привязочную функцию. | |||
# Выполняем пользовательскую привязку (нужно, чтобы объект можно было использовать в качестве ключа словаря). | |||
# Задаем строку, соответствующую номеру платы. | |||
# Задаем строку, соответствующую контакту/порту CPU. | |||
Некоторую отладочную информацию о том, как объект привязан к контакту, можно узнать с помощью метода pyb.Pin.debug(True). | |||
Если у контакта включен режим [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.PULL_UP|Pin.PULL_UP]] или [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.PULL_DOWN|Pin.PULL_DOWN]], его [[резистор]] на [[40 кОм]] будет притянут, соответственно, либо к ''3.3 вольтам'', либо к ''«земле»'' (за исключением контакта ''Y5'', который оснащен [[резистор]]ами на [[11 кОм]]). | |||
Теперь, когда на GPIO-контакте будет замечен задний фронт, это будет запускать функцию обратного вызова. Внимание: механические кнопки страдают так называемым ''«дребезгом»'' – их нажатие или отпускание может привести к нескольким ложным срабатываниям. Более подробно о дребезге, а также о том, как с ним справиться, читайте [http://www.eng.utah.edu/~cs5780/debouncing.pdf тут]. | |||
Все объекты ''Pin'' привязываются к GPIO-контактам через привязывающую функцию. | |||
== Конструкторы == | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/pyb.Pin()|pyb.Pin(id, ...)]] | |||
== Методы класса == | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.debug()|Pin.debug([state])]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.dict()|Pin.dict([dict])]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.mapper()|Pin.mapper([fun])]] | |||
== Методы == | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.init()|Pin.init(mode, pull=Pin.PULL_NONE, af=- 1)]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.value()|Pin.value([value])]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.__str__()|Pin.__str__()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.af()|Pin.af()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.af_list()|Pin.af_list()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.gpio()|Pin.gpio()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.mode()|Pin.mode()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.name()|Pin.name()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.names()|Pin.names()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.pin()|Pin.pin()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.port()|Pin.port()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.pull()|Pin.pull()]] | |||
== Константы == | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.AF_OD|Pin.AF_OD]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.AF_PP|Pin.AF_PP]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.ANALOG|Pin.ANALOG]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.IN|Pin.IN]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.OUT_OD|Pin.OUT_OD]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.OUT_PP|Pin.OUT_PP]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.PULL_DOWN|Pin.PULL_DOWN]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.PULL_NONE|Pin.PULL_NONE]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Pin.PULL_UP|Pin.PULL_UP]] | |||
== Класс PinAF – альтернативные функции контакта == | |||
В классе ''Pin'' реализована программная презентация физического контакта [[микропроцессор]]а. Один контакт может выполнять несколько функций ([[GPIO]], [[I2C]] [[SDA]] и т.д.) – их презентация реализуется с помощью класса PinAF. | |||
Пример использования: | |||
<syntaxhighlight lang="python"> | |||
x3 = pyb.Pin.board.X3 | |||
x3_af = x3.af_list() | |||
</syntaxhighlight> | |||
В ''x3_af'' теперь будет содержаться массив объектов ''PinAF'', доступных на контакте X3. | |||
На [[PyBoard]] в ''x3_af'' будет содержаться: | |||
<syntaxhighlight lang="python"> | |||
[Pin.AF1_TIM2, Pin.AF2_TIM5, Pin.AF3_TIM9, Pin.AF7_USART2] | |||
</syntaxhighlight> | |||
Обычно каждый контакт самостоятельно настраивает свои альтернативные функции, но иногда одна и та же функция доступна на разных контактах, что вынуждает прибегнуть к использованию дополнительного кода. | |||
Чтобы настроить ''X3'' на использование ''TIM2_CH3'', можно выполнить следующее: | |||
<syntaxhighlight lang="python"> | |||
pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=pyb.Pin.AF1_TIM2) | |||
</syntaxhighlight> | |||
...или... | |||
<syntaxhighlight lang="python"> | |||
pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=1) | |||
</syntaxhighlight> | |||
===Методы=== | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF/pinaf.__str__()|pinaf.__str__()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF/pinaf.index()|pinaf.index()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF/pinaf.name()|pinaf.name()]] | |||
* [[MicroPython:Библиотеки/pyb/Класс Pin/Класс PinAF/pinaf.reg()|pinaf.reg()]] | |||
=См.также= | =См.также= |
Текущая версия от 18:16, 14 мая 2023
Класс Pin – управление I/O-контактами[1]
Класс Pin – это базовый класс для управления I/O-контактами. В нем есть методы, чтобы задать режим работы контакта (входной, выходной и т.д.), а также методы, позволяющие задать и прочесть цифровой логический уровень контакта. Об управлении аналоговыми контактами читайте в статье о классе ADC.
Модель использования
Все контакты платы предварительно определены в pyb.Pin.board.Name:
x1_pin = pyb.Pin.board.X1
g = pyb.Pin(pyb.Pin.board.X1, pyb.Pin.IN)
Контакты CPU, соответствующие контактам платы, заданы в pyb.Pin.cpu.Name. Название CPU-контакта состоит из буквы порта, после которой идет номер контакта. На PYBv1.0 pyb.Pin.board.X1 и pyb.Pin.cpu.A0 – это один и тот же контакт.
Также можно использовать строки:
g = pyb.Pin('X1', pyb.Pin.OUT_PP)
Кроме того, пользователи могут задавать собственные названия контактов...
MyMapperDict = { 'LeftMotorDir' : pyb.Pin.cpu.C12 }
pyb.Pin.dict(MyMapperDict)
g = pyb.Pin("LeftMotorDir", pyb.Pin.OUT_OD)
...и запрашивать привязочные данные:
pin = pyb.Pin("LeftMotorDir")
Также пользователь может создать собственную привязочную функцию:
def MyMapper(pin_name):
if pin_name == "LeftMotorDir":
return pyb.Pin.cpu.A0
pyb.Pin.mapper(MyMapper)
Таким образом, если вызвать pyb.Pin("LeftMotorDir", pyb.Pin.OUT_PP), то контакт "LeftMotorDir" будет напрямую передан привязочной функции.
Итак, привязка номера обычного контакта к какому-то интересному названию осуществляется в следующем порядке:
- Напрямую указываем объект Pin.
- Создаем пользовательскую привязочную функцию.
- Выполняем пользовательскую привязку (нужно, чтобы объект можно было использовать в качестве ключа словаря).
- Задаем строку, соответствующую номеру платы.
- Задаем строку, соответствующую контакту/порту CPU.
Некоторую отладочную информацию о том, как объект привязан к контакту, можно узнать с помощью метода pyb.Pin.debug(True).
Если у контакта включен режим Pin.PULL_UP или Pin.PULL_DOWN, его резистор на 40 кОм будет притянут, соответственно, либо к 3.3 вольтам, либо к «земле» (за исключением контакта Y5, который оснащен резисторами на 11 кОм).
Теперь, когда на GPIO-контакте будет замечен задний фронт, это будет запускать функцию обратного вызова. Внимание: механические кнопки страдают так называемым «дребезгом» – их нажатие или отпускание может привести к нескольким ложным срабатываниям. Более подробно о дребезге, а также о том, как с ним справиться, читайте тут.
Все объекты Pin привязываются к GPIO-контактам через привязывающую функцию.
Конструкторы
Методы класса
Методы
- Pin.init(mode, pull=Pin.PULL_NONE, af=- 1)
- Pin.value([value])
- Pin.__str__()
- Pin.af()
- Pin.af_list()
- Pin.gpio()
- Pin.mode()
- Pin.name()
- Pin.names()
- Pin.pin()
- Pin.port()
- Pin.pull()
Константы
Класс PinAF – альтернативные функции контакта
В классе Pin реализована программная презентация физического контакта микропроцессора. Один контакт может выполнять несколько функций (GPIO, I2C SDA и т.д.) – их презентация реализуется с помощью класса PinAF.
Пример использования:
x3 = pyb.Pin.board.X3
x3_af = x3.af_list()
В x3_af теперь будет содержаться массив объектов PinAF, доступных на контакте X3.
На PyBoard в x3_af будет содержаться:
[Pin.AF1_TIM2, Pin.AF2_TIM5, Pin.AF3_TIM9, Pin.AF7_USART2]
Обычно каждый контакт самостоятельно настраивает свои альтернативные функции, но иногда одна и та же функция доступна на разных контактах, что вынуждает прибегнуть к использованию дополнительного кода.
Чтобы настроить X3 на использование TIM2_CH3, можно выполнить следующее:
pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=pyb.Pin.AF1_TIM2)
...или...
pin = pyb.Pin(pyb.Pin.board.X3, mode=pyb.Pin.AF_PP, af=1)