Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Transaction I2C entre deux pics 18f4550 (maître-esclave)



  1. #1
    lynal1

    Transaction I2C entre deux pics 18f4550 (maître-esclave)

    Bonjour à tous !

    J'ai un projet à mettre en place où je dois faire communiquer deux pics 18F4550 à l'aide de l'I2C. L'un est esclave et l'autre maître.

    J'utilise C18 et MPLAB v5.10..

    Mon soucis c'est que je sais commander le Maître pour envoyer une donnée à l'esclave, mais pas quand le Maître demande à l'esclave de lui envoyer une donnée.

    Avec tous les codes que j'ai trouvé sur Internet, aucun ne me permettait de créer correctement ce programme.

    Code:
    Code basique de l'esclave pour recevoir un octet : 
    
    unsigned char I2Cs_ReceiveByte8(unsigned char data)
    {
       if(I2Cs_DataRdy() == 0)
       {
          return (-0); 
       }
       else
       {		
          data = I2Cs_ReadByte();
          return (0);			
       }	
    }
    
    Et maintenant faut que je fasse le même code pour recevoir une chaine de caractère, envoyer un octet et envoyer une chaîne de caractère...

    S'il vous plait help !!

    -----

    Dernière modification par Jack ; 12/04/2011 à 15h03. Motif: Ajout balises code

  2. Publicité
  3. #2
    RISC

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    lynal1,

    Tu utilises une version antédiluvienne de MPLAB...

    Je te conseille de télécharger gratuitement la dernière version (7.52) ici : Télécharger MPLAB.

    Désinstalle ta version actuelle et installe la nouvelle qui a plein de nouvelles fonctionalités. Il faudra également alors réinstaller le C18 que tu peut télécharger ici : Télécharger le C18 gratuitement (student edition)

    Utilises-tu une carte faite maison ?
    Quel débogueur / programmateur ?
    Quelle version du C18 ?

    a+

  4. #3
    lynal1

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    Woops, my mistake ! Oui j'utilise en effet la version 7.50 .

    Les pics sont montés sur une carte PICDEM FS USB 2.

    Avec la librairie C18 j'ai les fonctions de base comme StartI2C() ou StopI2C().

    Niveau Maître j'ai déjà fini toute la partie transaction, à savoir :

    - Envoi d'un octet,
    - Envoi d'un octet + l'adresse de la case mémoire où le slave va devoir enregistrer cette donnée,
    - Envoi d'une string,
    - Envoi d'une string + la case mémoire

    - Réception d'un octet,
    - Réception d'un octet, en envoyant d'abord la case mémoire du Slave à laquelle le Master veut lire,
    - Idem pour une string.


    Au cas où vous auriez le temps, j'ai posté le code maître pour ces transactions là.
    Fichiers attachés Fichiers attachés

  5. #4
    RISC

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    lynal,

    Il est important d'être sur de la façon dont tu as connecté les 2 PCIS.

    Peux-tu me dire précisemment comment ils sont connectés :
    1/ 2 cartes PICDEM FS-USB
    2/ une carte PICDEM FS USB connecté à un autre micro (comment et quel micro) ?
    3/ peux-tu me dire combien de résistances de rappels à Vdd ainsi que leur valeur sont sur les broches SDA et SCL ?
    4/ connection par des fils ? si oui quelle distance ?

    (si tu as un schéma de ta connection c'est encore mieux

    a+

  6. #5
    HULK28

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    Citation Envoyé par lynal1 Voir le message

    unsigned char I2Cs_ReceiveByte8(unsigned char data)
    {
    if(I2Cs_DataRdy() == 0)
    {
    return (-0); c'est quoi ça?
    }
    else
    {
    data = I2Cs_ReadByte();
    return (0);
    }
    }
    [/COLOR]
    *************
    Le génie est fait d'un pour cent d'inspiration et de 99% pour cent de transpiration.

  7. A voir en vidéo sur Futura
  8. #6
    lynal1

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    return (-0);

    Heu c'est -1 en fait. Mais j'ai créé une variable de type enum pour les valeurs de retour d'erreur.

    Sinon pour le PIC les connections fonctionnement parfaitement, le problème vient juste du code que je ne sais pas créer ^^^

    1/ 2 cartes PICDEM FS-USB
    Oui les deux pics sont montés sur une carte PICDEM FS-USB, ces cartes connectées à un debugger ICD 2, lesquels sont connectés chacun à un PC par USB.

    3/ peux-tu me dire combien de résistances de rappels à Vdd ainsi que leur valeur sont sur les broches SDA et SCL ?

    J'utilise deux résistances de rappel de 4k7, une pour SDA et une pour SCL, branchées d'un côté sur +5v. Les valeurs sont bien à +5v au repos, ce n'est pas ça du tout le soucis ^^

    4/ connection par des fils ? si oui quelle distance ?

    Oui ils sont connectés entre eux par trois fils de 5-10cm (masse, SDA et SCL). Le signal est parfait quand j'envoie un octet avec le Master, je vois bien l'octet et le 9ème bit à 1 pour indiquer un Non-ack du slave.

    J'ai déjà réalisé une opération simple d'envoi de master et de réception du slave, le soucis n'est pas là

  9. Publicité
  10. #7
    lynal1

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    Hmmm bon j'ai fait quelques tests et il se trouve que côté slave :

    - L'interruption a bien lieu : le slave reconnait son adresse.
    - Le premier octet envoyé est bien reçu.

    Par contre les autres octets ne sont plus reçus. Bizzare... Faut-il mettre des pauses entre chaque envoi d'octet ?

  11. #8
    coulox

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    salut
    as tu résolu ton problème??

    il se trouve que moi aussi j'utilise la carte picdem fs usb (pic 18f4550)

    je souhaiterai écrire des donné en i2c mais le problème c'est que lorsque je regarde ma clk et ma data avec un osciloscope je vois +5v même après ouverture des ports ..

    j ai posé mon probleme ici :
    http://forums.futura-sciences.com/sh...=1#post1681064

  12. #9
    HULK28

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    Dans ce cas il faut regarder de plus près au niveau du code, une coquille doit s'y trouver.
    Le génie est fait d'un pour cent d'inspiration et de 99% pour cent de transpiration.

  13. #10
    rm2

    Re : Transaction I2C entre deux pics 18f4550 (maître-esclave)

    Bonjour,
    J'ai suivi votre discussion sur la programmation d'un pic 18f4550 et l'ic2 pour un afficheur et j'aimerai savoir si vous êtes arrivé à vos fins et comment. J'ai le même problème que vous, la clock ne vis pas

Sur le même thème :

Discussions similaires

  1. communication i2c entre deux pics
    Par frednico56 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/11/2007, 22h56
  2. Multi-prise maitre-esclave qui ne coupe pas?
    Par Burt67 dans le forum Dépannage
    Réponses: 1
    Dernier message: 10/04/2007, 18h31
  3. PIC18F452 - Maître-esclave I2c
    Par lianoos dans le forum Électronique
    Réponses: 17
    Dernier message: 06/02/2007, 20h18
  4. grveur dvd maitre ou esclave ???
    Par MeMyki dans le forum Matériel - Hardware
    Réponses: 35
    Dernier message: 13/07/2004, 13h51
  5. maitre/esclave
    Par weeman dans le forum Matériel - Hardware
    Réponses: 10
    Dernier message: 28/03/2004, 14h49