-
combien de I2Cs peut-on mettre en parallèle? .... comment determiner l'adresse de chacun d'eux s'il s'agit de composants classique comme des DACs ou des EEPROMs en I2c?
-
J'ai lu que la bibliotheque EEPROM.h serait incluse dans l'IDE arduino .... personnellement je ne l'y trouve pas .... où puis-je la télécharger?
On peut avoir au max 128 devices sur un bus i2C les adresses étant sur 7 bits
Les adresses sont soit câblées en dur dans le composant, soit paramètrables en mettant des pins à high ou low. Vous ne devez pas avoir 2 éléments avec la même adresse. (Il existe des composants pour multiplexer l’accès)
Pour détecter l’adresse voir Arduino Playground - I2cScanner
Merci JML
N'importe quelle paire d'entree/sortie peut faire l'affaire alors?
Si oui, y-a-t-il quelque chose de particulier à faire pour les transformer en SDA SCL?
Si oui, pourquoi certaines d'entr'elles sont-elles spécialisées en SDA et SCL?
SCL et SDA sont partagées effectivement pour faire un bus et l’adresse du composant a qui l’on parle passe sur ce bus donc le destinataire écoute et répond et les autres se taisent pour laisser le champ libre,
Ça dépend des chips.pour les pins. Comme c’est un protocole commun, il est implémenté en hardware pour libérer du temps du processeur (comme l’UART dés ports série ou comme le SPI). Certaines puces comme le 328P du UNO ou Nano ou sur la mega impose les pins qui sont reliées à la partie hardware qui fait de l’IDC (comme les pins séries sont aussi fixes) et sur d’autres chips comme la SAMD21 vous aurez une sorte de tableau qui configure dynamiquement quelle pin et reliée à quelle fonction matérielle (lisez des trucs sur SERCOM)
Comme pour SoftwareSerial et le port série, on peut aussi trouver des implémentations logicielles en bit-banging des protocoles, mais ça met une grosse pression sur le processeur
Merci, je vais télécharger et voir
Bonjour @jo_6466
EEPROM interne ou externe ? La librairie n'est pas la même,
Dans le gestionnaire de librairies on peut trouve diverses librairies pour gérer une EEPROM externe, elle ne s'appellent pas EEPROM. Certaines sont spécifiques et ne gèrent qu'une référence particulière de composant (24LC01 par exemple), lire la description de chacune d'elles.
Voci une des librairies pour EEPROM Externes sur bus I2C :
https://www.arduino.cc/reference/en/libraries/sparkfun-external-eeprom-arduino-library/
REMARQUE : les réponses seraient moins imprécises si tu indiquais clairemenr dans ta question le microcontrolleur et l'EEPROM que tu souhaires associer , on n'a pas forément à l'esprit les autres fils de discussion que tu as ouvert .......
Bonjour jo_6466
La bibliothèque EEPROM.h ne se trouve pas à l'endroit habituel mais dans le répertoire \arduino\hardware\arduino\avr\libraries où se trouvent les librairies "livrées" à l'installation de l'IDE.

S'il s'agit d'étendre de la mémoire permanente, il y a mieux que de l'EEPROM, toujours en i2C, la FRAM qui a des avantages par rapport à l'EEPROM comme les cycles maximum d'écriture qui est plus de 1 trillion pour la FRAM, environ 100'000 pour l'EEPROM .
Cordialement
jpbbricole
J'ai retrouvé ton chemin menant à la librairie EEprom dans ma vieille version IDE 1.8.9 mais dans ma la version IDE 2.0.0 on ne la trouve pas
Je n'ai trouvé de la Fram qu'en boitiers SMD .... je n'ai ni les yeux ni le matériel pour souder des trucs aussi petits
Par contre j'ai trouvé un produit qui resolverait mon problème de niveau de sortie DAC qui est un peu trop faible sur le XAIO pour mon application .. j'aurai besoin de grimper jusqu'à 3,55v pour être parfait
Ce produit MCP4725 contient en plus une EEprom interne ... bref il aurait tout pour lui si ce n'est qu'avec sa bibliothèque fournie, la seule valeur que l'on peut y inscrire est la tension de sortie de la DAC
Sans passer par la librairie, serait-il possible de l'utiliser pour y stocker et y lire un simple chiffre de 1 à 5 ?
compilez cela en mettant les préférences pour avoir le maximum d'infos en choisissant UNO comme cible sur l'IDE 2.0
#include <EEPROM.h>
float f = 1.234;
uint16_t adresse = 0;
void setup() {
Serial.begin(115200);
EEPROM.put(adresse, f);
f = 0;
EEPROM.get(adresse, f);
Serial.println(f, 3);
}
void loop() {}
regardez dans ce qui défile en dessous, vous devriez voir défiler tout en haut
Alternatives for EEPROM.h: [EEPROM@2.0]
ResolveLibrary(EEPROM.h)
-> candidates: [EEPROM@2.0]
et ensuite regardez
Compiling library "EEPROM"
...
Using library EEPROM at version 2.0 in folder: ~/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libraries/EEPROM
➜ regardez le chemin utilisé, pour moi c'est le même que pour la version 1.8
si vous compilez pour XIAO avec un SAMD comme il n'y a pas d'EEPROM embarquée, (si ça fonctionne) ce n'est bien sûr pas ce fichier qui est pris mais une bibliothèque spécifique
Je suis toujours sur le même projet dont je recherche la miniaturisation extrême
La solution qui fonctionne aujourd'hui est le XIAO dans lequel j'utilise la sortie DAC et la Flash pour y stocker et y relire un chiffre de 1 à 5
Mais je voudrais la faire évoluer car elle ne me permet pas de répondre à ceci :
- niveau de sortie de 0 à 3,55v
- memorisation non volatile
J'ai posté ma question sur L'I2c parce que je pensais à une DAC MCP4921 et à une EEprom 24LC01 externes mais j'ai trouvé un produit qui les remplacerait avantageusement : le MCP4725 sous forme d'une plaquette miniaturisée
Il permet une sortie jusqu'à 4,9v et a une EEprom interne
Le seul hic est que la bibliotheque du MCP4725 ne permet d'ecrire dans L'EEprom que la tension de sortie!
J'aimerais donc savoir s'il ne serait pas possible de lire et d"écrire dans cette EEprom sans passer par cette librairie limitative ou comment la modifier?
compilez cela en mettant les préférences pour avoir le maximum d'infos en choisissant UNO comme cible sur l'IDE 2.0
Après compilation voici les messages qui me sont apparus :
"Utilisation de la bibliothèque EEPROM version 2.0 dans le dossier: /Users/joseph/Library/Arduino15/packages/arduino/hardware/avr/1.8.5/libraries/EEPROM"
Bien je vois où la librairie est disponible mais comment la faire apparaitre dans mon IDE 2.0.0 ?
Suffit-il que je la recopie dans la librairie du IDE 2.0.0?
Question bête (pour vous) mais je n'ai toujours pas compris où on peut retrouver les instructions spécifiques utilisables grâce à une librairie ?
Parfois je retrouve dans Github une liste .TXT de celles-ci , parfois pas
pourquoi voulez vous la dupliquer ? il la trouve sans souci
je regarde sur le GitHub s'il y a un lien vers la documentation sinon le .h de la bibliothèque ... le code source est la doc ultime comme disent les programmeurs ![]()
En lancant votre sketch je tombe sur cette erreur de compilation ...
Using board 'seeed_XIAO_m0' from platform in folder: /Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3
Using core 'arduino' from platform in folder: /Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3
Detecting libraries used...
/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-g++ -mcpu=cortex-m0plus -mthumb -c -g -Os -w -std=gnu++14 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions "-D__SKETCH_NAME__=\"\"\"sketch_oct30b.ino\"\"\"" -w -x c++ -E -CC -DF_CPU=48000000L -DARDUINO=10607 -DARDUINO_SEEED_XIAO_M0 -DARDUINO_ARCH_SAMD -DARDUINO_SAMD_ZERO -D__SAMD21__ -D__SAMD21G18A__ -DARM_MATH_CM0PLUS -DSEEED_XIAO_M0 -DUSB_VID=0x2886 -DUSB_PID=0x802F -DUSBCON -DUSB_CONFIG_POWER=100 "-DUSB_MANUFACTURER=\"Seeed\"" "-DUSB_PRODUCT=\"Seeed XIAO M0\"" -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore/tinyusb/src -DARDUINO_SAMD_ZERO -D__SAMD21__ -D__SAMD21G18A__ -DARM_MATH_CM0PLUS -DSEEED_XIAO_M0 -DUSB_VID=0x2886 -DUSB_PID=0x802F -DUSBCON -DUSB_CONFIG_POWER=100 "-DUSB_MANUFACTURER=\"Seeed\"" "-DUSB_PRODUCT=\"Seeed XIAO M0\"" -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore/tinyusb/src -I/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/CMSIS/5.7.0/CMSIS/Core/Include/ -I/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/CMSIS/5.7.0/CMSIS/DSP/Include/ -I/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/CMSIS-Atmel/1.2.1/CMSIS-Atmel/CMSIS/Device/ATMEL/ -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/variants/XIAO_m0 /private/var/folders/fp/jfzrnvjx6dj86vy0zj9v44xh0000gn/T/arduino-sketch-EDB01911279F43E254B889ED6A6E41B9/sketch/sketch_oct30b.ino.cpp -o /dev/null
Alternative pour EEPROM.h: [EEPROM@2.0 EEPROM@2.0]
ResolveLibrary(EEPROM.h)
-> candidates: [EEPROM@2.0 EEPROM@2.0]
/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/arm-none-eabi-gcc/7-2017q4/bin/arm-none-eabi-g++ -mcpu=cortex-m0plus -mthumb -c -g -Os -w -std=gnu++14 -ffunction-sections -fdata-sections -fno-threadsafe-statics -nostdlib --param max-inline-insns-single=500 -fno-rtti -fno-exceptions "-D__SKETCH_NAME__=\"\"\"sketch_oct30b.ino\"\"\"" -w -x c++ -E -CC -DF_CPU=48000000L -DARDUINO=10607 -DARDUINO_SEEED_XIAO_M0 -DARDUINO_ARCH_SAMD -DARDUINO_SAMD_ZERO -D__SAMD21__ -D__SAMD21G18A__ -DARM_MATH_CM0PLUS -DSEEED_XIAO_M0 -DUSB_VID=0x2886 -DUSB_PID=0x802F -DUSBCON -DUSB_CONFIG_POWER=100 "-DUSB_MANUFACTURER=\"Seeed\"" "-DUSB_PRODUCT=\"Seeed XIAO M0\"" -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore/tinyusb/src -DARDUINO_SAMD_ZERO -D__SAMD21__ -D__SAMD21G18A__ -DARM_MATH_CM0PLUS -DSEEED_XIAO_M0 -DUSB_VID=0x2886 -DUSB_PID=0x802F -DUSBCON -DUSB_CONFIG_POWER=100 "-DUSB_MANUFACTURER=\"Seeed\"" "-DUSB_PRODUCT=\"Seeed XIAO M0\"" -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino/TinyUSB/Adafruit_TinyUSB_ArduinoCore/tinyusb/src -I/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/CMSIS/5.7.0/CMSIS/Core/Include/ -I/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/CMSIS/5.7.0/CMSIS/DSP/Include/ -I/Users/joseph/Library/Arduino15/packages/Seeeduino/tools/CMSIS-Atmel/1.2.1/CMSIS-Atmel/CMSIS/Device/ATMEL/ -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/cores/arduino -I/Users/joseph/Library/Arduino15/packages/Seeeduino/hardware/samd/1.8.3/variants/XIAO_m0 -I/Users/joseph/Documents/Arduino/libraries/EEPROM-master /private/var/folders/fp/jfzrnvjx6dj86vy0zj9v44xh0000gn/T/arduino-sketch-EDB01911279F43E254B889ED6A6E41B9/sketch/sketch_oct30b.ino.cpp -o /dev/null
Alternative pour avr/eeprom.h: []
ResolveLibrary(avr/eeprom.h)
-> candidates: []
In file included from /private/var/folders/fp/jfzrnvjx6dj86vy0zj9v44xh0000gn/T/.arduinoIDE-unsaved2022930-58379-1d6y73l.kh7l/sketch_oct30b/sketch_oct30b.ino:1:0:
/Users/joseph/Documents/Arduino/libraries/EEPROM-master/EEPROM.h:26:10: fatal error: avr/eeprom.h: No such file or directory
#include <avr/eeprom.h>
^~~~~~~~~~~~~~
compilation terminated.
Plusieurs bibliothèque trouvées pour "EEPROM.h"
Utilisé: /Users/joseph/Documents/Arduino/libraries/EEPROM-master
Non utilisé: /Users/joseph/Documents/Arduino/libraries/EEPROM
Utilisation de la bibliothèque EEPROM version 2.0 dans le dossier: /Users/joseph/Documents/Arduino/libraries/EEPROM-master
exit status 1
Compilation error: exit status 1
comme mentionné précédemment le XIOA n'a pas d'EEPROM... donc vous ne pouvez pas utiliser cette bibliothèque standard. il vous faut une des bibliothèques d'émulation d'EEPROM qui écrit dans la mémoire flash, il me semble qu'on en a déjà discuté dans je ne sais plus lequel de vos fils de discussion (il y en a trop, ça serait mieux d'en avoir qu'un pour votre projet) et que vous en aviez retenu une.
ahahahah .... soyez gentil, ne me rappelez pas le douloureux souvenir de mes bêtises
Bon pour en revenir à cette histoire d'EEprom, je me demande ce qu'il m'a prit de me braquer sur celle contenue dans le MCP4725 (celui de votre photo) alors que la solution de la Flash fonctionne parfaitement pour les quelques fois que l'on aura besoin de sauvegarder et de relire le paramètre concerné ... ni l'EEprom ni la Fram ne seront nécessaires finallement
Je vais pouvoir finaliser mon projet avec cette microcarte carte DAC-I2C MFC4725 de 13x11mm
Merci à tous, j'aurai appris énormement de choses aujourd'hui ... à bientôt (sûrement)
si vous prenez une EEPROM externe alors soit vous écrivez vous même le code pour la contrôler, soit vous prenez une bibliothèque adéquate que vous installez dans le chemin normal (même répertoire que l'IDE précédent)
la FRAM mentionnée par @jpbbricole au post 8 est une bonne solution pour ne pas avoir à se poser de questions sur la durée de vie
on peut savoir pourquoi (mis à part le fait que vous avez grillé 2 XIAO) ?
Bonjour jo_6466
On en est un peu tous au même point ![]()
Il y a ce type de modules:

Cordialement
jpbbricole
Oui et cette librairie ne s'appelle pas EEPROM donc tu n'utilises pas la bonne librairie.
Il faut étudier les exemples installés avec les librairies.
