Ecriture d'un octet sur un ESP32

Bonjour

Je débute un peu avec l'Arduino et surtout l'ESP32.

J'ai une question toute bête ... mais question quand même.

J'ai l'habitude de travailler avec des PIC de chez microchip.
Par exemple pour piloter un afficheur LCD (non I2C) en mode 8 bits, je câble les 8 broches de data sur un "port", PORTB par exemple et les broches RS et E sur 2 autres broches du PORTC par exemple.

Quand je veux envoyer un caractère à afficher, je mets RS à 1, j'écris PORTB = 0x65; et une impulsion sur E pour valider.

Bref, piloter une broche comme RS ou E je sais faire avec un ESP32 mais comment fait-on pour sortir un octet sur 8 broches de l'ESP32 simultanément ???

En gros, quel est l'équivalent de portb = 0x65; ??

Voilà ma question ....

:warning:
Post mis dans la mauvaise section, on parle anglais dans les forums généraux. déplacé vers le forum francophone.

Merci de prendre en compte les recommandations listées dans Les bonnes pratiques du Forum Francophone

Bonjour

la répons en'est pas du tout évident, du moins pour moi
le PIC , les AVR sont des µC 8 bits avec des E/S organisées en Ports 8 bits

l'ESP32 est un µC (ou pluôt un soc) 32 bits, pas de ports de largeur 8 bits

Au niveau assembleur probablement une possibilité de traiter par masques un ou plusieurs registres de 32 bits afin de faire l'équivalent d'un portb = 0x65;

içi une soution qui sous-traite la chose à la bibliothèque LCDCrystal

Oui j'avais trouvé un site qui disait la même chose.

Avec la biblio LCDCrystal, la transmission d'un octet se fait en 2 x 4 bits ce qui prend un peu plus de temps. Mais ça fonctionne.

Mais ça ne répond pas à ma question LOL ... qui est :slight_smile:
Comment on sort un octet d'un ESP32 (en parallèle ... pas en série) ? et pas forcement pour l'envoyer à un afficheur LCD ... :slight_smile:

On peut en 8 bits aussi ....

Syntax

LiquidCrystal(rs, enable, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d4, d5, d6, d7)
LiquidCrystal(rs, enable, d0, d1, d2, d3, d4, d5, d6, d7)
LiquidCrystal(rs, rw, enable, d0, d1, d2, d3, d4, d5, d6, d7)

Je suis sauvé ! :slight_smile:

:+1:

ça a l'avantage d'être simple ,mais un puriste dirait que de cette manière le positionnement des 8 bits n'est pas rigoureusement simultané comme le ferait une écriture directe d'octet sur un port de bits. :wink:

la fonction write8bits de la bibliothèque positionne rapidement les 8 bits un à un

Sinon il faut ouvrir la datasheet de l'ESP32 et regarder les registres qui gèrent les GPIOs.
il y a les registres GPIO_OUT, des registres GPIO_OUT_W1TS et GPIO_OUT_W1TC (pour positionner des bits, set ou clear ). En créant un pointeur sur les adresses des registres on doit pouvoir faire ce que l'on veut.
A noter quand même que sur les cartes ESP32 on n'a pas accès à 8 GPIOs consécutifs (en tout cas pas sur les cartes en ma possession) donc il y aura quand même une petite gymnastique à faire.

Il y a aussi des registres pour positionner les GPIOs en entrées ou en sorties mais si on ne le fait que dans le setup() ce n'est sans doute pas la peine de se compliquer la tâche.

Autre problème de cette optimisation le code n'est souvent plus portable.

Si tu prend la surcouche ajouté par le gestionnaire de librairie, il y a un fichier DigitalPin.h qui utilise un tableau de structure( GpioPinMap), la structure a une priorité(port) qui semble renvoyer son adresse.
c'est cette adresse qui est utilisé avec un mask par DigitalWrite

Peut être aura tu quelque chose de ce coté là

Voir les fonctions d'ESP-IDF.

La version "pour IDE arduino" réalisée par Espressif est souvent une surcouche des fonctions ESP-IDF.

La version "pour IDE arduino" réalisée par Espressif est souvent plus restrictive que la version officielle Espressif ESP-IDF, comme souvent puisque les fonctions "style" Arduino doivent rester simples et abordables aux débutants.

Les fonctions Espressif ESP-IDF sont incluses dans la version "pour IDE arduino" réalisée par Espressif et peuvent être appelées à partir de l'IDE Arduino.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.