Go Down

Topic: Connections I2C Afficheur + clavier (Read 15431 times) previous topic - next topic

B@tto

#30
Jan 12, 2011, 01:54 pm Last Edit: Jan 12, 2011, 02:00 pm by B@tto Reason: 1
Pas de Wire.endTransmission(); après un request, c'est surement ça qui fait buguer. Très souvent quand un print "débug" un programme, c'est souvent un problème de timing. En fait le endTransmission doit tout faire foirer, du coup avec les print ça le retardait un peu et la réception avait le temps de se faire correctement.

Sinon pourquoi :

Code: [Select]
Wire.requestFrom(Addr >> 1, 1+2);

Fâché avec les additions ??  ;D


Et tu peux simplifier un peu ton code :

Code: [Select]
boolean I2C_Read(unsigned char Addr, int BytesDemandes)
{
byte Recep[BytesDemandes];
Wire.requestFrom(Addr >> 1, BytesDemandes);
for (int i=0;i<BytesDemandes;i++){
Recep[i] = Wire.receive();
Serial.print("Byte ");
Serial.print(i);
Serial.print(" = ");
Serial.println(Recep(i));
}
 
}


Ca aura l'avantage en plus de pouvoir facilement se faire pour n'importe quel nombre de bytes nécessaires.
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Christophe37

#31
Jan 12, 2011, 02:59 pm Last Edit: Jan 12, 2011, 03:00 pm by Christophe37 Reason: 1
Merci pour l'info, dans la partie I2C_Read

En ce qui concerne la simplification, merci mais il n'y a pas de souci je suis vraiment en plein débogage donc c'est brut de décoffrage.

Par contre en ce qui concerne l'addition :) j'ai rien invente à ce niveau j'ai repris le code utilisé au boulot. C'est clair que c'est bizarre.

Donc pour la lecture je vais tester sa.

Par contre dans la partie écriture I2C_Write je n'est pas de requestfrom et cela plantait tout pareil si j'avais pas de serial.print. Je vais tester avec des (delay). Mais vu que je vais gérer 2 servomoteurs la vitesse va être gérer avec Millis (de mémoire), il va falloir que j'intègre aussi cette fonction pour géré l'intervalle de temps entre 2 envois.

En tout cas un gros merci d'avoir répondu car je commençais à me sentir un peut seul  ;D

B@tto

Si le write bug aussi, il faut peut-être cherché ailleurs : certains disposif ou CI sont en i2c "lent", la librairie wire par défaut fonctionne sur ce mode. Peut-être qu'en la passant en rapide ... Plus d'infos : http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1241668644
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Christophe37

Merci, il faut pas que cela me bloque aussi mon DS1307. Mais je vais regarder le lien, merci

Christophe37

#34
Jan 13, 2011, 08:10 am Last Edit: Jan 13, 2011, 08:13 am by Christophe37 Reason: 1
Bon ba un grand merci car tout marche impeccable, j'ai ajouté avant chaque envoie sur l'I2C un "delay(100)" pour le moment, il faudra que je le modifie par la fonction "millis" dans le "loop" mais cela marche nickel, je vais essayer de réduire le "delay" aussi mais bon c'est pas non plus bloquant les 100ms une fois que cela sera gérer avec "millis", ainsi que le "I2C_Read", j'ai enlevé le "endTransmission()" et c'est bon + le "delay" ajouté aussi.

Je vais quand même demander pour la fréquence du bus, mais vu que la DS1307 marche bien j'ai peur qu'elle se mette a déconner, vous en pensé quoi?

B@tto

Le truc c'est que la librairie wire d'origine est en mode lent (100 khz) et donc devrait marcher avec tous les composants i2c.
Ne t'inquiete pas pour le DS1307, à moins qu'il ait un timeout intégré, il pourrait même fonctionner à 1hz ^^ par contre en i2c rapide il faut voir ...
Mais c'est quand même étrange cette histoire ...
Blog électronique : battomicro.wordpress.com
Photographie : www.interactive-celebration.fr
Fablab de Montpellier : www.labsud.org

Christophe37

Bonjour,

Apparemment le micro-contrôleur est bien aussi prévu de fonctionner à 100Khz. Par contre la personne qui s'est occupée de cet afficheur me confirme qu'il faut bien un temps de pose entre chaque envoie car la gestion de l'I2C sur le micro est entièrement logiciel. Il y a donc un temps de traitement plus long que la DS1307 qui elle a une gestion hardware. Donc tout est normale à ce niveau. Donc j'ai plus qu'a bien gérer mes envoies I2C.

Merci de votre aide

Go Up