Assignation pin I2C

Bonjour

C’est en effectuant quelques lectures un peu plus poussées sur les liaisons I2C que je viens de me rendre compte que j’ai fait une erreur de réservation.
Lorsque j’ai développé mon système, j’avais réservé les sorties 4 et 5 pour y raccorder un afficheur par cette liaison :sleeping:. Maintenant, je me rends compte qu’il ne s’agit pas des pin 4 et 5 du port D (sorties numériques), mais que la liaison s’effectue sur les ports 4 et 5 du port C (entrées analogiques). Et que bien entendu, j’exploite déjà les 6 entrées Ana de ma Duemilanove. =(

Donc mes questions :

  • Peut-on assigner différemment la liaison I2C ? >> idéalement sur les pin 4&5 des sorties que j’avais réservé.
  • Dois-je transférer les entrées 4 et 5 actuellement câblées, vers le port D, et déclarer ces pin comme Input. (Pas terrible comme logique que de retrouver des entrées au milieu des sorties). Afin de libérer les entrées 4 et 5 pour y câbler l’I2C.

Je me demande si je ne vais pas être obligé de passer à la Mega…
Ça me libèrera de la place pour les E/S futures, et de la place programme qui m’oblige déjà à acquérir une seconde carte pour gérer la dalle tactile.

Franck

Tes réponses sont dans les questions...

Deux possibilités :

1 - inverser ton câblage, les µP actuels permettent d'utiliser indifféremment les pins d'un même port en E ou S, d'autant plus qu'arduino ne s'oriente pas sur l'utilisation de ports entiers (la UNO n'en propose qu'un, et encore, si on utilise la liaison série, on perd le port D 8 bits) mais du pinMode(), digitalRead() et digitalWrite().

2 - créer ton propre I2C, comme on le faisait à l'école il y a 15 ans avec le 68HC11, qui ne proposait pas l'I2C. il suffit de prendre une pin en data I/O et une autre en Clock, puis de balancer le protocole. Ca ne marche qu'en mode Master, sinon, il faut passer par les INT (PD2 et PD3). Maintenant, c'est dommage quand on a un port déjà tout fait sous la main car générer un protocole I2C est assez consommateur...

Bonjour,

Super_Cinci:
2 - créer ton propre I2C, comme on le faisait à l'école il y a 15 ans avec le 68HC11, qui ne proposait pas l'I2C. il suffit de prendre une pin en data I/O et une autre en Clock, puis de balancer le protocole. Ca ne marche qu'en mode Master, sinon, il faut passer par les INT (PD2 et PD3). Maintenant, c'est dommage quand on a un port déjà tout fait sous la main car générer un protocole I2C est assez consommateur...

Pas besoin de le faire soit même ça déjà était fait :wink:
http://blinkm-projects.googlecode.com/svn/trunk/blinkm_examples/arduino/BlinkMSoftI2CDemo/
(ne fonctionne quand tant que "maitre")

Bonjour

Merci beaucoup pour tes commentaires SuperCinci. Oui, j’avais déjà un peu réfléchi avant de poster. Mais avec mon peu d’expérience, j’espérais une solution plus efficace venue d’un pro.

En outre, j’avais espéré qu’une modification de la librairie « wire » soit une solution. Car n’ayant jamais édité (et encore moins créé) une librairie, je ne savais pas si il était possible de modifier l’assignation des pin I2C, ou si le positionnement du bus I2C était liée à l’ATMEGA.

La proposition 1 ne m’emballe pas, bien que cela soit la seule qui me semble facilement réalisable, je devrais recabler mon circuit, et coller 2 entrées au milieu des sorties. Bof :~

Ta 2ème proposition me fait peur. Je vais déjà devoir ingurgiter tout le nécessaire à la gestion de la dalle tactile, avec tous les pièges de débutant que je vais devoir traverser. Si je dois y rajouter ceux de la réalisation de la liaison I2C, j’ai toutes les chances de ne me décourager.

A défaut d’autre proposition, je sens que je vais plutôt m’orienter vers la Mega. A condition qu’elle s’intègre dans le coffret en place…

Edit:

Merci Skywood
Je viens de lire ta réponse après avoir posté.

Comme je l'avais indiqué dans le topique de la Dalle tactile en I2C + Duemilanove. Je devrais faire dialoguer les 2 cartes. Celle de la partie opérative et celle de la gestion de la dalle.

Lecture et affichage de données internes de la partie opérative actuellement en place, et modification de certaines de ses valeurs par le biais de la dalle.
J'imaginais 2 tableaux (un dans chaque carte) qui viendraient se lire l'un-l'autre.
Donc pas de maitre / esclave. Sauf si la maitre envoyait ses données, et demandait à l'esclave d'envoyer les siennes dans la foulée.

Cela vient peut-être au crédit d'une seule Mega qui devrait avoir les capacitées de tout gérer (sauf la redondance).

Mes idées sont celles d'un débutant (que je suis) :wink:

Franck

Oui, l'arduino (enfin le chip atmel) intègre un bus I2C en hard (une partie de l'électronique interne), on peut donc communiquer via I2C directement en écrivant dans les registres (3 écritures pour envoyer un octet, 2 écritures par octet supplémentaire dans la trame). Cela impose d'utiliser les pins A4 et A5, pas le choix, c'est câblé ainsi dans le µP.

Pour la méga, elle fait la même taille que la uno, elle est juste un peu plus longue de 32mm.

Merci beaucoup pour vos réponses claires. Maintenant, il ne me reste plus qu’à décider.
Soit mélanger des entrées avec les sorties pour récupérer les Pin 4 et 5 de L‘I2C.
Soit passer à la méga. Mais comme il ne me reste que 15mm entre le bord du coffret et la face arrière la Duemilanove, je suis bon pour tout modifier. Et vu le montage…


Egalement, j’ai vu qu’il existe 2 versions (2560 et 2560 ADK). J’ai encore de la lecture…

Cdt
Fanck

il n'y a aucune honte à "mélanger" les entrées et sorties, on le fait tous! Surtout sur ton montage, le câblage ne sera pas compliqué à modifier!

Bubule:
Soit passer à la méga. Mais comme il ne me reste que 15mm entre le bord du coffret et la face arrière la Duemilanove, je suis bon pour tout modifier. Et vu le montage…

En regardant ton câblage je vois qu'il te reste 2 broches digital de libre, est ce que une liaison avec NewSoftSerial (port série "virtuel") ne serait pas une option intéressante pour toi ?
Sinon il te reste la solution de l'I2C "inversé", ta carte "esclave" demande à un intervalle de temps donnée (en maitre I2C donc) des info à la vrai carte maitre qui au passage qui lui envoi en réponse les "vrai" info, ce qui te permetterai de garder l'I2C "software".

Bubule:
Egalement, j’ai vu qu’il existe 2 versions (2560 et 2560 ADK). J’ai encore de la lecture…

La version ADK est une version "amélioré" de la mega2560 classique avec en plus la gestion de l'usb "host" (pour connecter un téléphone android à l'origine d'où son nom).