Si on devait choisir une communication SPI ou I2c , laquelle s'avererait la plus rapide dans une meme application?
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”
choisissez SPI - ça peut monter à 10 MHz, beaucoup plus rapide que la pleine vitesse de l'I2C à 400 kHz.
SPISettings - Arduino Reference vous permet de régler la fréquence du SPI
Au prix de plus de fils dont d'IO utilisées
Réponse : le beurre ou l'argent du beurre
Précision :
Les deux sont des liaisons séries, les liaisons parallèles type "Centronics" ont disparu de nos jours.
Pour ceux qui en douteraient, SPI est l'acronyme de Serial Peripheral Interface.
Différence principale : l'I2C est bidirectionnelle, le SPI ne l'est pas.
Le SPI est beaucoup plus rapide que l'I2C.
L'I2C ne dépasse pas 400 kHz sur un micro avr (j'ai fais la mesure la limite est environ 550kHz).
Le SPI peut fonctionner à la moitié de la fréquence horloge, soit 8MHz pour un avr à 16 MHz.
L'I2C ne demande que deux fils (en fait 3 il ne faut pas oublier la masse ).
Le SPI demande 3 fils SCK, MOSI, MISO + un fil par esclave.
En I2C les esclaves sont sélectionnés par une adresse qu'il faut inclure dans le protocole, ce qui ralenti encore la vitesse effective de transmission.
En I2C :
Toutes les horloges sont reliées en parallèle : ce n'est pas trop gênant du point de vue intégrité du signal vu que la liaison est unidirectionnelle.
Toutes les entrées SDA sont reliées en parallèle et sont bidirectionnelles, ce qui rend très difficile le maintien de l'intégrité du signal.
C'est pour cela qu'il est difficile d'utiliser des grandes longueurs en I2C.
En SPI les liaisons étant unidirectionnelles, le respect de l'intégrité du signal est plus facile, est moins difficile.
En résumé, selon moi :
Le plus simple = I2C
Le plus performant = SPI
La solution : comme d'habitude trouver le bon compromis, et ce n'est pas toujours le plus simple.
I2C
SDH = lligne unidirectionnelle le maitre fourni une horloge aux esclaves
SDA = ligne bidirectionnelle de données
SPI
SCLK : Le maître fourni une horloge à tous les esclaves : unidirectionnel
MOSI : Master Out Slave IN : unidirectionnel
MISO : Master in Slave Out: unidirectionnel
SS (ou CS) : chip select => un gpio par esclave indépendant : unidirectionnel
Les difficultés sont principalement de l'ordre du transport du signal : c'est-à-dire de l'électronique analogique, rien à voir avec la programmation.
Comme dans un post précédents certains ont trouvé que je compliquais inutilement, j'en resterais là.
Une carte arduino nano peut-elle faire du SPI?
Si oui .. 3 ports digitaux, peut importe lesquels, suffisent alors?
La Nano fait du SPI en hardware
10 (SS) ou Chip Select - autres pins possibles
11 (MOSI),
12 (MISO),
13 (SCK).
J'en sais assez pour finaliser mon projet de traitement de signal pour lequel vous m'avez déjà beaucoup aidé.
Je voudrais miniaturiser au maximum mon montage en utilisant un très petit DAC - MCP4921-SPI
Je vais aussi utiliser une carte Seeduino XIAO qui a une sortie SPI
A quoi sert l'entrée(ou la sortie?) DAC de ce XIAO?
Le meilleur moyen pour le savoir est de faire l'effort de se renseigner :
C’est un Digital to Analog Converter, ça générera une tension variable en fonction d’un paramètre numérique
Toutes les infos sont dans la doc
Merci J-M-L .. je m'en va éplucher tout cela et reviendrai si nécessaire ... si cette sortie m'évite un DAC externe, c'est tout benef pour ma miniaturisation
La partie applicable
the SAMD21 also features true analog output in the form of a digital-to-analog converter (DAC). This module can produce an analog voltage between 0 and 3.3V. It can be used to produce audio with more natural sound, or as a kind of "digital potentiometer" to control analog devices.
The DAC is only available on the Arduino pin A0, and is controlled using analogWrite(A0, ). The DAC can be set up to 10-bit resolution (make sure to call analogWriteResolution(10) in your setup), which means values between 0 and 1023 will set the voltage to somewhere between 0 and 3.3V.
Premier essais avec la XIA0 : si je telecharge l'exemple "blink" classique : compilation ok et fontionnement ok
2eme essais : si je compile mon programme personnel avec comme carte l'arduino nano : c'est ok
3eme essais : si je compile mon programme personnel avec comme carte le Seeeduino XIA0
le compileur stoppe et m'affiche ceci (les phrases sont très longues et sont tronquées sur ma copie écran) .... une idée du pourquoi?
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...
arm-none-eabi-g++: error: octobre: No such file or directory
arm-none-eabi-g++: error: 2022.ino""": No such file or directory
/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__="""MAPPER-arduino-Vers3-4" octobre "2022.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-460B70327DAF5641E41C8BA0FE4CAE61/sketch/MAPPER-arduino-Vers3-4 octobre 2022.ino.cpp" -o /dev/null
Error while detecting libraries included by /private/var/folders/fp/jfzrnvjx6dj86vy0zj9v44xh0000gn/T/arduino-sketch-460B70327DAF5641E41C8BA0FE4CAE61/sketch/MAPPER-arduino-Vers3-4 octobre 2022.ino.cpp
Generating function prototypes...
/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__="""MAPPER-arduino-Vers3-4" octobre "2022.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-460B70327DAF5641E41C8BA0FE4CAE61/sketch/MAPPER-arduino-Vers3-4 octobre 2022.ino.cpp" -o /private/var/folders/fp/jfzrnvjx6dj86vy0zj9v44xh0000gn/T/arduino-sketch-460B70327DAF5641E41C8BA0FE4CAE61/preproc/ctags_target_for_gcc_minus_e.cpp
exit status 1
Compilation error: exit status 1
J'y découvre la ligne suivante :
Error while detecting libraries included by /private/var/folders/fp/jfzrnvjx6dj86vy0zj9v44xh0000gn/T/arduino-sketch-460B70327DAF5641E41C8BA0FE4CAE61/sketch/MAPPER-arduino-Vers3-4 octobre 2022.ino.cpp
Je pense que c'est l'espace dans le nom de fichier qui met la panique.
Peut-être cet espace apparaît-il aussi dans le nom du répertoire.
J'ai supprimé tous les espaces et c'était pareil
Mais tu m'as mis la puce à l'oreille et je me suis dit "et si le nom était trop long?"
je l'ai raccourci et la compilation s'est bien déroulée!
Merci
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.