Pages: [1]   Go Down
Author Topic: PCB ARDUINO DUEMILANOVE PLANTE  (Read 550 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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








* I2C_AFA_V2012_1_13.ino (1.86 KB - downloaded 7 times.)
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3176
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3176
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ton programme devrait plus ressembler à ça :

Code:
#include <Wire.h>

byte buffer;

void setup()
{
Serial.begin(9600);
  Wire.begin(0x52);  
pinMode(13,OUTPUT);
     pinMode(12,OUTPUT);
     pinMode(11,OUTPUT);
 Wire.onReceive(receiveEvent);  
}

void loop(){
}


void receiveEvent(int bytesReceived) {

buffer=Wire.receive();
Serial.print("Donnee recu : ");
  Serial.println(buffer);
switch (buffer) {
  
  case 0x40 :
  digitalWrite(13,HIGH);
  Serial.println("LED 1 ON");
  break;
  
  case 0x20 :
  digitalWrite(12,HIGH);
  Serial.println("LED 2 ON");
  break;
 
  case 0x35 :
  digitalWrite(13,LOW);
  Serial.println("LED 3 OFF");
  digitalWrite(12,LOW);
  Serial.println("LED 2 OFF");
  digitalWrite(11,LOW);
  Serial.println("LED 1 OFF");
  break;
  
}
}
Logged


France
Offline Offline
Faraday Member
**
Karma: 23
Posts: 3011
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Ales
Offline Offline
Faraday Member
**
Karma: 29
Posts: 3176
Do or DIY
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

La je suis parti du principe qu'il n'y avait qu'un byte à recevoir, vu qu'il n'y a que 3 LED à commander ça laisse encore 252 commandes possibles xD
Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

merci pour vos réponses, je test et je reviens vers vous
@+
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 11
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Pages: [1]   Go Up
Jump to: