Aller au contenu principal

Module d'extension

OLEM possède 4 emplacements d'extension, dont 2 sont équipés d'un connecteur qui permet d'ajouter à OLEM de nouvelles fonctionnalités nécessitant des composants électroniques. Les connecteurs ont 4 broches :

  • P1 et P2 transportent des signaux logiques
  • P3 est la masse (GND)
  • P4 est en 3V3 et peut fournir jusqu'à 300 mA

Les broches de tous les emplacements sont reliées : P1 d'un emplacement d'extension est relié à P1 de l'autre emplacement (et de même pour toutes les Px).

Les modules d'extension peuvent être utilisés en mode GPIO, PWM ou I2C, choisi avec extmod_mode_set() et les constantes EXTMOD_GPIO, EXTMOD_PWM et EXTMOD_I2C.

Mode GPIO​

En mode GPIO, P1 et P2 peuvent être contrôlées comme de simples GPIO en sortie. Dans ce cas, P1 est GPIO1 et P2 est GPIO2. Utilisez extmod_gpio_set() avec les constantes EXTMOD_GPIO1, EXTMOD_GPIO2, LOW et HIGH.

Exemple​

Les deux broches passent de LOW à HIGH toutes les 3 secondes.

import olem

print("Starting extension module gpio periodic test")

olem.extmod_mode_set(olem.EXTMOD_GPIO)

for i in range(0, 10):
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.LOW)
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.LOW)
olem.delay_ms(3000)
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.HIGH)
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.HIGH)
olem.delay_ms(3000)

olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.LOW)
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.LOW)

print("End of extension module gpio periodic test")

Mode PWM​

En mode PWM, P1 et P2 peuvent générer des signaux dont le rapport cyclique et la période varient. Utilisez extmod_pwm_set() avec les constantes EXTMOD_GPIO1 et EXTMOD_GPIO2.

Signal PWM, avec sa période et sa valeur de comparaison

Exemple​

Le rapport cyclique de P1 augmente pendant que celui de P2 diminue.

import olem

period = 20

print("Start pwm")
olem.extmod_mode_set(olem.EXTMOD_PWM)

for i in range(0, period):
print("compare value " + str(i))
olem.extmod_pwm_set(olem.EXTMOD_GPIO1, period, i)
olem.extmod_pwm_set(olem.EXTMOD_GPIO2, period, period - i)
olem.delay_ms(2000)

olem.extmod_mode_set(olem.EXTMOD_GPIO)
olem.extmod_gpio_set(olem.EXTMOD_GPIO1, olem.LOW)
olem.extmod_gpio_set(olem.EXTMOD_GPIO2, olem.LOW)

print("End pwm")

Mode I2C​

En mode I2C, P1 est SCL et P2 est SDA. Utilisez extmod_i2c_read() et extmod_i2c_write().

Exemple​

Toutes les secondes, 2 octets sont écrits sur le périphérique d'adresse 0x43, puis 4 octets y sont lus.

import olem

print("Starting extension module gpio i2c test")

addr = 0x43
olem.extmod_mode_set(olem.EXTMOD_I2C)
timestamp_start = olem.get_time_ms()

while ((olem.get_time_ms() - timestamp_start) < 20000):
olem.extmod_i2c_write(addr, [0x86, 0x87])
olem.delay_ms(1000)
print(olem.extmod_i2c_read(addr, 4))
olem.delay_ms(1000)

print("End of extension module gpio i2c test")

Constantes et fonctions​

Constants​

ConstantValueDescription
LOW0Low level of a GPIO output.
HIGH1High level of a GPIO output.
EXTMOD_GPIO11Pin P1 of the extension slots.
EXTMOD_GPIO22Pin P2 of the extension slots.
EXTMOD_GPIO0GPIO mode: P1 and P2 are digital outputs.
EXTMOD_I2C1I2C mode: P1 is SCL and P2 is SDA.
EXTMOD_PWM2PWM mode: P1 and P2 output PWM signals.

extmod_mode_set(mode)​

Initialize the extension slots in the given mode. Only one mode can be used at a time.

ParameterDescription
modeEXTMOD_GPIO, EXTMOD_I2C or EXTMOD_PWM

extmod_gpio_set(gpio, value)​

Set the output level of a pin. Requires the EXTMOD_GPIO mode, see extmod_mode_set().

ParameterDescription
gpioEXTMOD_GPIO1 or EXTMOD_GPIO2
valueLOW or HIGH

extmod_pwm_set(gpio, period, compare_value)​

Set the PWM signal of a pin. Requires the EXTMOD_PWM mode, see extmod_mode_set().

ParameterDescription
gpioEXTMOD_GPIO1 or EXTMOD_GPIO2
periodperiod of the signal in ms, as an integer. With 0 the output stays LOW.
compare_valuetime the signal stays HIGH in each period in ms, as an integer

extmod_i2c_read(addr, length)​

Read bytes from a device on the I2C bus. Requires the EXTMOD_I2C mode, see extmod_mode_set().

ParameterDescription
addraddress of the device
lengthnumber of bytes to read

Returns: list of the bytes read, as integers, or an empty list if the read failed

extmod_i2c_write(addr, data)​

Write bytes to a device on the I2C bus. Requires the EXTMOD_I2C mode, see extmod_mode_set().

ParameterDescription
addraddress of the device
datalist of the bytes to write, as integers from 0 to 255

Returns: 0 on success, an error code otherwise