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; ??
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
Comment on sort un octet d'un ESP32 (en parallèle ... pas en série) ? et pas forcement pour l'envoyer à un afficheur LCD ...
ç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.
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
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.