Ce programme simule un capteur I2C. Il utilise le module TWS présent sur les MCU AtTiny20/40/441/841/1634.
Le maître peut faire un accès en lecture simple, ou en lecture-écriture de façon à accèder à un registre particulier. Chaque valeur mesurée est stockée dans un registre 16 bits, octet de poids faible en premier. Le programme procède à une incrémentation d'une des valeurs toutes les 2 secondes.
#include <util/atomic.h>
#include <avrio/led.h>
#include <avrio/delay.h>
#include <avrio/tws.h>
#define OWN_ADDRESS (0x10)
#define NOF_REGISTERS 5
static volatile uint8_t buffer[NOF_REGISTERS * 2];
static volatile uint8_t index;
int
main (void) {
uint8_t i;
for (i = 0; i < NOF_REGISTERS; i++) {
buffer [i * 2 + 1] = i + 1;
}
vTwsInit (OWN_ADDRESS << 1);
sei();
for (;;) {
if (i >= NOF_REGISTERS) {
i = 0;
}
ATOMIC_BLOCK (ATOMIC_RESTORESTATE) {
buffer[i * 2]++;
}
i++;
}
return 0;
}
uint8_t
if (index >= sizeof (buffer)) {
index = 0;
}
if ((index & 1) == 0) {
}
return buffer[index++];
}
void
index = data;
}