PCB ARDUINO DUEMILANOVE I2C AVEC PIC 16F877

Bonjour,
Après des jours d'acharnement, je ne parviens pas a faire communiquer un pic 16f877 avec la carte Arduino 2009 en I2C. le PIC 16F877 est programmé en assembleur via MPLAB, j'arrive a envoyer des trames I2C etc depuis le pic 16F877... mais la carte Arduino ne réponds jamais, ni aux ACK,ni a aucune instructions que j'envoie. Je voudrais les faire communiquer ensemble. Je n'arrive meme pas a faire allumer une DEL sur la Carte Arduino...
LePIC 16F877 est en I2C Maitre et l'Arduino en Esclave... Pouvez vous me donner un petit coup de main SVP. Merci

Salut
Tiens je viens de trouver ça : sushi-number1: I2c et arduino

A+
chabot380

Merci mais c'est pour 2 arduino. j'ai besoin d'un escalve arduino programmé en C et un maitre programmé en assembleur.
@+

Bonjour,

arnaudf09:
Merci mais c'est pour 2 arduino. j'ai besoin d'un escalve arduino programmé en C et un maitre programmé en assembleur.

Déjà vérifie que ton code "maitre" fonctionne avec un module I2C bien connu, exemple DS1307 ou autre.

Pour la partie esclave voila un guide pas à pas pour faire un esclave I2C en arduino :

merci de votre réponse, mon code I2C sur le PIC fonctionne bien, il communique avec un DS1307 (horloge), le seul prb est que l'Arduino ne répond pas, je regarde au lien reçu et je vous tiens au courant.
MERCIIIIIIII
@+

suite...
L'anglais et moi, c'est pas trop top...
Par contre, j'ai bien mon oscilloscope de connecté sur le bus en SDA et SCL, j’envoie un I2C_Start depuis mon programme en assembleur, je voit bien la trame qui correspond au 0x29 sur le bus SDA. Je fais un read juste après et je ne reçoit que des un sur les 8 bits.
De plus, l'Arduino esclave ne répond pas à mes ack_slave_to_master de ma librairie I2C... et fait tourner en rond mon programme. Du coup, j'ai viré le ACK mais toujours les même prb...
Merci de votre retour
@+

bon, mes fonctions I2C Fonctionnent bien sur le PIC16f877 car j'arrive à configurer, à lire un PCF8574 et un pcf9551 (gestion de DEL et de BP en I2C) et tout marche... je ne comprend pas pourquoi la PCB Arduino 2009 ne repond pas...
SVP Aidez moi
MERCIIIIIIIIIIIIIIIII

arnaudf09:
.....j'ai besoin d'un escalve arduino programmé en C .....

voilà un Arduino esclave pour l'I2C programmé en C.

Peux-tu nous faire voir le sketch de ton arduino ?

Merci
A+

J'avais eu le soucis pour communiquer avec des picaxes (ce sont des pics de base aussi donc peut-être que le bug est le même) : je ne me souviens plus exactement du bug mais de mémoire le picaxe utilise une adresse avec un bit en moins, donc dans mon cas le picaxe était esclave et il fallait que je divise par 2 l'adresse côté picaxe (1 bit en moins quoi).

EDIT : j'ai retrouvé le post qui avait résolu mon problème http://letsmakerobots.com/node/20787 donc côté arduino, l'adresse du picaxe était 80 tandis que sur l'arduino (maitre) c'était 160. Je suppose que ça doit être la même chose si on inverse les rôles.

Bonsoir,

Oui B@tto , bonne piste, mais plutôt l'inverse. La librairie Wire nécessite l'adresse sur les 7 bits de poids fort, et Picaxe comme Cubloc et d'autres, sur une adresse de 8 bits .

A tester: côté Arduino l'esclave impose l'adresse, par exemple Wire.begin(32);
côté Chip maître, l'adresse sera 64 en Dec ( si le programme du Pic est prévu sur une adresse de 8bits !!)
concrètement, sur le bus circule l'adresse 64 (ou 65).

La tambouille interne de la librairie Wire va convertir en 8 bits avec un bit de poids faible à 1 pour un Read ou à zéro pour un write

"There are both 7- and 8-bit versions of I2C addresses. 7 bits identify the device, and the eighth bit determines if it's being written to or read from. The Wire library uses 7 bit addresses throughout. If you have a datasheet or sample code that uses 8 bit address, you'll want to drop the low bit (i.e. shift the value one bit to the right), yielding an address between 0 and 127. "

Edit:
Ce n'est pas le statut esclave ou maître, qui impose cette différence, mais la conception de la librairie Wire.

bonjour à tous, merci pour vos réponses
Je voudrais juste allumer un DEL sur la réception d'une commande, apres je pense y arriver...

Voila le code Arduino

// SLAVE RECEIVER
#include <Wire.h>

void setup()
{
Wire.begin(4); // join i2c bus with address #4
Wire.onReceive(receiveEvent); // register event
Serial.begin(9600); // start serial for output
}

void loop()
{
delay(100);
}

// function that executes whenever data is received from master
// this function is registered as an event, see setup()
void receiveEvent(int howMany)
{
while(1 < Wire.available()) // loop through all but the last
{
char c = Wire.read(); // receive byte as a character
Serial.print(c); // print the character
}
int x = Wire.read(); // receive byte as an integer
Serial.println(x); // print the integer

pinMode(13,OUTPUT);
digitalWrite(13,HIGH);

}

Encore un petit coup de main ...
comment choisir qu'elles DEL allumer suivant l'adresse envoyée par le maitre ???
Merci d'avance