Cours:TPS 2103 tp positionnementMoteur : Différence entre versions
Ligne 7 : | Ligne 7 : | ||
=Esclave (target) i2c= | =Esclave (target) i2c= | ||
− | On donne les exemples suivant pour qu'un µcontroleur atmegaxxx se comporte comme un esclave i2c | + | ==sans registres== |
+ | On donne les exemples suivant pour qu'un µcontroleur atmegaxxx se comporte comme un esclave i2c (pas de notion de registres) | ||
{| | {| | ||
|- | |- | ||
| | | | ||
<source lang=cpp> | <source lang=cpp> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
// Include the required Wire library for I2C | // Include the required Wire library for I2C | ||
#include <Wire.h> | #include <Wire.h> | ||
const int8_t i2cAddress = 0x1A; | const int8_t i2cAddress = 0x1A; | ||
− | + | // !!! variable utilisée dans une interruption => volatile | |
volatile uint16_t valPotar; | volatile uint16_t valPotar; | ||
void setup() { | void setup() { | ||
− | // Start the I2C Bus as Slave on address | + | // Start the I2C Bus as Slave on address i2cAddress |
Wire.begin(i2cAddress); | Wire.begin(i2cAddress); | ||
+ | // fonction a exécuter lorsqu'on doit envoyer des données au master | ||
Wire.onRequest(requestEvent); | Wire.onRequest(requestEvent); | ||
} | } | ||
− | |||
void requestEvent() | void requestEvent() | ||
Ligne 39 : | Ligne 31 : | ||
Wire.write(valPotar>>2); | Wire.write(valPotar>>2); | ||
} | } | ||
− | |||
void loop() { | void loop() { | ||
valPotar=analogRead(A0); | valPotar=analogRead(A0); | ||
− | |||
} | } | ||
</source> | </source> | ||
|| | || | ||
<source lang=cpp> | <source lang=cpp> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
// Include the required Wire library for I2C | // Include the required Wire library for I2C | ||
#include <Wire.h> | #include <Wire.h> | ||
const int8_t i2cAddress = 9; | const int8_t i2cAddress = 9; | ||
− | |||
void setup() { | void setup() { | ||
DDRD=0xFF; | DDRD=0xFF; | ||
− | // Start the I2C Bus as Slave on address | + | // Start the I2C Bus as Slave on address i2cAddress |
Wire.begin(i2cAddress); | Wire.begin(i2cAddress); | ||
+ | // fonction à exécuter lorsque le master nous envoie des données | ||
Wire.onReceive(receiveEvent); | Wire.onReceive(receiveEvent); | ||
} | } | ||
Ligne 76 : | Ligne 57 : | ||
− | void loop() { | + | void loop() |
− | + | { | |
} | } | ||
</source> | </source> | ||
|} | |} | ||
+ | |||
+ | ==avec registres== | ||
=Interface écran/bouton= | =Interface écran/bouton= |
Version du 13 avril 2023 à 20:39
Pensez à mettre sur la 1ère ligne de votre code : // Compiler: Avrgcc device: nomDuMicrocontroleur
Sommaire
Asservissement en position du moteur CC
Esclave (target) i2c
sans registres
On donne les exemples suivant pour qu'un µcontroleur atmegaxxx se comporte comme un esclave i2c (pas de notion de registres)
// Include the required Wire library for I2C
#include <Wire.h>
const int8_t i2cAddress = 0x1A;
// !!! variable utilisée dans une interruption => volatile
volatile uint16_t valPotar;
void setup() {
// Start the I2C Bus as Slave on address i2cAddress
Wire.begin(i2cAddress);
// fonction a exécuter lorsqu'on doit envoyer des données au master
Wire.onRequest(requestEvent);
}
void requestEvent()
{
Wire.write(valPotar>>2);
}
void loop() {
valPotar=analogRead(A0);
}
|
// Include the required Wire library for I2C
#include <Wire.h>
const int8_t i2cAddress = 9;
void setup() {
DDRD=0xFF;
// Start the I2C Bus as Slave on address i2cAddress
Wire.begin(i2cAddress);
// fonction à exécuter lorsque le master nous envoie des données
Wire.onReceive(receiveEvent);
}
void receiveEvent(int nbBytes)
{
PORTD=Wire.read();
}
void loop()
{
}
|