Cours:InfoS2 tdI2cSlave : Différence entre versions

De troyesGEII
Aller à : navigation, rechercher
Ligne 15 : Ligne 15 :
  
  
=Target qui récupère des valeurs=
+
=Programmons les cibles i2c=
  
 +
==Recevoir des données sur une cible==
  
 +
Dans ce cas, le {{Rouge|master i2c}} enverra des données à l'{{Rouge|esclave i2c}}.
 +
 +
Ici la valeur envoyée sera un nombre entre {{Rouge|0 et 31}} qui indique le {{Rouge|numéro de la led}} à allumer;
 +
 +
Le principe est le suivant :
 +
 +
<source lang=cpp>
 +
#include <Wire.h>
 +
 +
const int8_t i2cAddress = 0x??;
 +
volatile uint8_t i2cData=0;
 +
volatile bool newValue=true;
 +
 +
void receiveEvent(int nbBytes)
 +
{
 +
while (Wire.available())
 +
{
 +
i2cData = Wire.read();
 +
newValue=true;
 +
}
 +
}
 +
 +
int main()
 +
{
 +
Wire.begin(i2cAddress);
 +
Wire.onReceive(receiveEvent);
 +
sei();
 +
while(1)
 +
{
 +
if (newValue)
 +
{
 +
....
 +
newValue=false;
 +
}
 +
}
 +
}
 +
</source>
 +
 +
 +
{{Question|Ecrire un programme qui modifie la led allumée en fonction de la valeur reçue}}
  
 
{{Todo|Pensez à utiliser un programme pour lister les adresses des targets i2c, cf td précédent !}}
 
{{Todo|Pensez à utiliser un programme pour lister les adresses des targets i2c, cf td précédent !}}
  
 
=Registres=
 
=Registres=

Version du 26 mars 2024 à 17:36

Fiche résumé

Retour à la liste des Tds/Tps

Éléments de correction

simuler avec simulIDE

Pensez à mettre sur la 1ère ligne de votre code :
// Compiler: Avrgcc device: nomDuMicrocontroleur


Fichiers pour simulide : SchemaI2cSlave.sim1
**************************************************
***  Attention, programme dans un fichier .ino ***
**************************************************


Vous disposez de 3 µcontrôleurs sur le schéma :

  • l'atmega2560 sera un esclave i2c et permettra d'allumer 1 seule led parmi les 32
  • l'atmega328p sur lequel sont connectés les boutons poussoirs sera également un esclave i2c
  • le dernier {{Rouge|atmega328p sera le master i2c


Programmons les cibles i2c

Recevoir des données sur une cible

Dans ce cas, le master i2c enverra des données à l'esclave i2c.

Ici la valeur envoyée sera un nombre entre 0 et 31 qui indique le numéro de la led à allumer;

Le principe est le suivant :

#include <Wire.h>

const int8_t i2cAddress = 0x??;
volatile uint8_t i2cData=0;
volatile bool newValue=true;

void receiveEvent(int nbBytes)
{ 
	while (Wire.available())
	{
		i2cData = Wire.read();
		newValue=true;
	}
}

int main()
{
	Wire.begin(i2cAddress);
	Wire.onReceive(receiveEvent);
	sei();
	while(1)
	{
		if (newValue)
		{
			....
			newValue=false;
		}
	}
}


Question.jpg Ecrire un programme qui modifie la led allumée en fonction de la valeur reçue

Todo.jpg Pensez à utiliser un programme pour lister les adresses des targets i2c, cf td précédent !

Registres