Bonsoir ,quelqu'un sait il comment transferer une sortie d'un arduino sur 1024 bits au lieu des seuls 256 bits ,pour pouvoir la lire sur un autre arduino en entrée analogique.??
Merci d'avance
Salut,
Déjà as-tu bien pris conscience que les sorties analogiques sont des sorties PWM ?
Sinon tu as besoin d'un DAC (digital to analog converter) pour obtenir une "vraie" tension (et il y en a dans plein de résolution)
Ce ne serait pas plus simple d'utiliser le port série ?
salut et merci pour l'interet porté a ma question
j'utilise un AT mega 328 pour recevoir une info de sonde sur entrée analogique 0 -> 5v j'effectue un traitement local de cette info avec mon programme local ,mais je désire transmettre cette info 0 -> 5v pleine échelle (soit 1024 bits) pour que la résolution soit entière ,sur un arduino AT mega 1280 qui recevra 7 infos d'autre arduinos 328 de la même facon et les afficher sur un LCD 12864 à distance.
toutes ces infos seront sur des entrées analogiques sur at 1280 bien sur !
Et oui ,j'ai bien conscience que les sorties pwm sont seulement sur 256 bits ,mais pas assez précises.
Autre info ,pas assez d'entrées série sur AT 1280 a moins que l'on puisse le faire avec la librairie Serialsoftware ,mais je ne connais pas encore assez bien la prog pour m'y aventurer directement.
Une solution.??
merci d'avance
Il faut utiliser NewSoftSerial, Serialsoftware est obsolète.
L'i2c aussi ...
L'I2C doit il obligatoirement etre cablé sur des broches spécifiques car j'ai besoin de 8 transferts d'information sur 2 wire (SCL,SDA) soit 16 wires.
??
Salut RSDIFFUSION,
Tu peux faire tes 8 transferts d'information sur 2 wires (SCL,SDA).
En premier tu fais le premier transfert et ensuite tu fais le deuxième transfert et ainsi de suite.
Pas besoin de faire chaque transferts sur des wires différent.
De toute façon l'ATMega328 fait ces transferts un après l'autre même si chaque transferts est sur un wire différent.
Voici un exemple de code pour que 2 Arduinos puissent communiquer en I2C.
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235582397
Merci pour l'info ,ca doit résoudre mon probleme ,mais encore une question alors,comment faire au niveau des adresses I2C ;
Le méga 1280 central affichera les données de facon lisible sur le lcd ,quelle adresse devra t il avoir et les 8 autres mega 328 quelle adresse aussi pour chacun.??
Bonjour RSDIFFUSION,
Pour l'ATMega1280 tu utilise le code en tant que maître alors il n'y a pas d'adresse.
Et pour les 8 autre ATMega328 tu utilise le code en tant qu'esclave et tu donne a chacun d'eux une adresse 8 bits différente que tu choisi.
Exemple: adresse de l'ATMega328 1 = 0x01
adresse de l'ATMega328 2 = 0x02
adresse de l'ATMega328 3 = 0x03
et ainsi de suite.
reste plus qu'à essayer
Merci pour le coup de main
Ne pas oublier de relier les masses également ![]()
oui bien sur !! sinon pas de corrélation.
Si sur chacun des 8 arduinos j'ai une horloge temps reel DS1307 et une EEProm 24LC64 sur le bus I2C ,comment puis je configurer les adresses de ces derniers.??
ex arduino 1 : adr bus = 0x10
RTC 1 : adr bus = 0x11
EEProm 1 : adr bus = 0x12
arduino 2 : adr bus = 0x20
etc etc .
Est - ce juste.??
Bonjour RSDIFFUSION,
Non ça marche pas comme ça.
La majorité des puces (comme l'horloge temps reel DS1307) qui communique en I2C on une seule adresse fixe.
Dans cette DataSheet à la page 13 on peut voir que l'adresse esclave I2C = 1101000 en binaire = 0x68 en Hexadécimale.
Si il y a une seule adresse possible pour les DS1307 tu peux pas en mettre 8 sur les même wires I2C.
Pour y remédier tu peux utiliser cette puce qui donne 8 canals I2C Electronic Components and Parts Search | DigiKey Electronics.
Ou tu peux isoler les wire I2C avec leurs ATMega respectif à l'aide de relais.
Et pour l'EEProm 24LC64 on peut avoir j'usqu'à 8 adresse différente.
Dans cette DataSheet à la page 5 on peut voir que l'adresse esclave I2C peut être modifié selon le voltage appliqué sur les broches A0, A1 et A2.
Voici les 8 adresse possible.
1010000 en binaire = 0x50 en Hexadécimale
1010001 en binaire = 0x51 en Hexadécimale
1010010 en binaire = 0x52 en Hexadécimale
1010011 en binaire = 0x53 en Hexadécimale
1010100 en binaire = 0x54 en Hexadécimale
1010101 en binaire = 0x55 en Hexadécimale
1010110 en binaire = 0x56 en Hexadécimale
1010111 en binaire = 0x57 en Hexadécimale
Alors dans ton projet tu as:
-1 ATMega1280
-8 ATMega328
-8 horloge temps reel DS1307
-8 EEProm 24LC64
Si chaqu'un des 8 ATMega328 est relié à une horloge temps reel DS1307 et une EEProm 24LC64 sur le bus I2C.
Tu vas devoir faire attention au collision de donné sur le bus I2C.
Alors en premier pour la communication entre l'ATMega1280 et les 8 ATMega328.
Pour l'ATMega1280 tu utilise le code en tant que maître.
Pour les 8 ATMega328 tu utilise le code en tant que qu'esclave.
Et en deuxième pour la communication de chaque ATMega328 avec son DS1307 et son 24LC64.
tu dois changer le code des 8 ATMega328 en tant que maître pour qu'il puisse communiquer avec leur 2 puces.
Voici un exemple de code pour l'horloge temps reel DS1307: DS1307 RTC tutorial
Voici un exemple de code pour l'EEProm 24LC64: http://www.arduino.cc/playground/Code/I2CEEPROM
merci pour les infos je vais essayer tout ca.
Il est bien ce forum ,au moine ici les gens répondent et prenne les choses en considération !!
A plus
Mais le plus simple serait de faire que la communication entre l'ATMega1280 et les 8 ATMega328 soit fait par le bus SPI ou le bus Uart (Serial).
Et de laisser en I2C la communication de chaque ATMega328 avec son DS1307 et son 24LC64.
Comme ça tu n'aura pas à te soucier des collisions de donné sur le bus I2C.
Et tu n'auras pas à te casser la tête pour mettre 8 horloge temps reel DS1307 sur un seul bus I2C.
Car chaque DS1307 aura sont propre bus I2C pour communiquer avec son ATMega328.
Oups ,désolé mais je n'avais pas vu ce post...
Interessant sur ce point de vue là ,et je pense aussi beaucoup plus simple.
Aurais tu une indication oû trouver des infos sur cette communication entre 2 cartes par SPI.??
a plus
Bonjour RSDIFFUSION,
Pour de l'info sur le bus SPI.
Voici une discution que j'ai fait à ce sujet: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1293096278
Et ici un exemple de code: http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1264732746
Sinon tu peux utiliser le bus Uart (Sérial) de l'Arduino pour les communications.
Voici de l'info à ce sujet: http://domotique.benchi.fr/robotique/arduino/arduino-serial-et-le-port-serie/
Bonne Chance pour ton projet!
Bonjour RSDIFFUSION,
au moins 2 questions me viennent à la lecture de ce topic:
- les arduinos seront distants de combien ? (l'I2C n'est pas vraiment fait pour de longue distance)
- si tu relies tous les arduinos en I2C, pourquoi ne pas utiliser une seule horloge DS1307 ? l'arduino maitre pourrait-alors l'interroger puis synchroniser tout le monde ?
à vrai dire, je n'arrive pas à bien identifier les contraintes et besoins de ton projet (distances, nécessité du "temps réél")
Gromain
Salut et merci pour l interet porté !!
Le but de la création est 8 thermostats programmables autonomes avec un central qui peut répercuter toutes les données en plus d'afficher la température présente dans sa piece, le tout réglable par ce dernier et réglable aussi au cas par cas.
Je m'étais trompé ,j'ai donc 7 AT Mega 328 avec RTC et EEProm et LCD 0802 et un AT Mega 1280 avec RTC et EEPROM et LCD 12864.
La distance des infos peut aller jusqu'a 15 mètres.
Voila pour le but final.
Merci