Bonjour,
Je rencontre un prb avec une carte Arduino qui se bloque et m'oublige à faire un reset de la carte...
depuis un PIC 16f877a maitre, j'envoie des trames I2C à la carte. Dans un but de test, j'utilise des BP sur le maitre et des DEL sur l'arduino esclave.
Lorsque j'envoi la 1ere trame, tout ce passe bien, j'active un Bouton poussoir (BP) et la Del correspondant s'allume, idem pour le 2eme BP mais au 3eme, la carte ne relanche pas le SSPSTAT , R_W pour repasser le bus I2C à 1 et elle se bloque. Je ne comprend pas pourquoi... Pouvez vous m'aider SVP, cela fait des jours que je suis dessus...
Parti asssembleur pour le 16f877a, voila la routine
DEL3_I2C_ON
; DEL ORANGE
DEL3_ON
call I2C_start
movlw ARDUINO1_ADR
call I2C_write
movlw 0x35
call I2C_write
call I2C_stop
return
Pour l'arduino, voila la routine que j'utilise
en fichier joint car je n'arrive pas à la coller
merci de votre aide
cordialement
ARNAUD
Deja je vois quelques soucis dans le code arduino : c'est un peu le foutoir, y'a des commande qui sont dans la loop, dans le onRequest ... Et surtout avec if(1<wire.available()) il va falloir 2 bytes dans le buffer pour déclencher la routine et pas qu'un. Enfin ta routine PIC n'est pas complète
Bonjour et merci pour votre réponse,
pouvez vous m'eclairer un peu, je suis debutant et j'ai encore du mal à programmer correctement.
pour la routine I2C, j'ai été obliger de retirer les
ACK car pas réponse de la carte arduino donc programme tournait en boucle dans le ACK Slave to master. pour la routine arduino, je suis néophyte, donc un peu d'aide serait la bienvenue
merci
ARNAUD F
Personnellement, j'éviterais les Serial.print dans les fonctions receiveEvent et requestEvent ou alors je les limiterais à 2 ou 3 caractères.
Lors d'une lecture on prend coup sur coup un event puis un request. Ce serais dommage de rater le request par ce qu'on est en train d'envoyer une chaine sur le port série pour la mise au point.
Après Test, lors de l'envoi d'une 1ere trame I2C, je la voie a l'oscilloscope, mais juste après le Bus I2C reste à 0 et impossible de continuer car la carte se bloque et seul le reset de la carte Arduino permet de relancer les 2 programmes (celui du PIC 16f877A qui lui est bloqué sur bus libre ou non qui tourne en boucle et la carte Arduino est plantée). Le prb, c'est qu'elle ne libère pas le bus I2C en le faisant passer à 1.
Merci de vos retours
cordialement
Arnaud