Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
Forum général sur le langage C !

Modérateur : Jérémy

Pic 16F505 I2C
ditame
Débutant
Débutant
Messages : 32
Enregistré en : avril 2017

#1 Message par ditame » mar. 9 mai 2017 18:02

Bonjour à tous,

Je viens vers vous car je souhaiterais installer un bus I2C entre un pic et un arduino UNO, mais j'ai trouvé pas mal de librairie différentes sur internet pour le faire. Je voudrais donc savoir qu'elle serait la plus adaptée pour mon cas ? j'utilise MPLAB X pour programmer avec un pickit3

Pic 16F505 I2C
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#2 Message par Gérard » mar. 9 mai 2017 20:26

Quel est la finalité?
Le PIC ne possède pas d'I2C hard et arduino, c'est Atmel.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Pic 16F505 I2C
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#3 Message par paulfjujo » mar. 9 mai 2017 20:46

bonsoir

Ou alors, peut etre avec une librairie SOFT I2C coté PIC ..
l'I2C etant un protocole de dialogue connu, pourquoi pas dialoguer avec un ATMEL.
Qui est le maitre, qui est l'esclave ?
Le maitre toujours du meme coté ?
Aide toi, le ciel ou FantasPic t'aidera

Pic 16F505 I2C
Temps-x
Avatar de l’utilisateur
Expert
Expert
Messages : 2595
Enregistré en : juillet 2016
Localisation : Terre

#4 Message par Temps-x » mer. 10 mai 2017 01:32

Bonjour à tous,

J'ai une routines pour gérer un bus I2C, sur les Pics dont l'horloge est à 4 MHz, pour une fréquence SCL d'environ 100 KHz .
Toutes les sorties peuvent être utilisées, sans risque de court circuit, car à 1 les I/O sont en entrées (haute impédance).

Version 100% assembleur, si cela peut être utile, fait le moi savoir.

A+
:roll: Les requins, c'est comme le langage ASM, c'est le sommet de la chaîne alimentaire. :wink:

Pic 16F505 I2C
ditame
Débutant
Débutant
Messages : 32
Enregistré en : avril 2017

#5 Message par ditame » mer. 10 mai 2017 08:19

Bonjour,

Alors le maître serait toujours l'arduino et il enverrait juste une consigne au pic qui commande un moteur avec feed back derrière.

Temps-x a écrit :Version 100% assembleur, si cela peut être utile, fait le moi savoir.Source du message


J'ai jamais fait d'assembleur donc si il existe la même chose en C je suis plus preneur :-D

Pic 16F505 I2C
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#6 Message par paulfjujo » mer. 10 mai 2017 21:23

bonsoir,

et pourquoi pas un dialogue via UART , avec un protocole specifique d'echange de donnees

L'I2C SOFTWARE Maitre doit etre courant sous mikroC coté PIC
Attention!! en mode esclave , je ne l'ai jamais testé .
Aide toi, le ciel ou FantasPic t'aidera

Pic 16F505 I2C
ditame
Débutant
Débutant
Messages : 32
Enregistré en : avril 2017

#7 Message par ditame » jeu. 11 mai 2017 09:35

Bonjour,

paulfjujo a écrit :bonsoir,

et pourquoi pas un dialogue via UART , avec un protocole specifique d'echange de donnees

L'I2C SOFTWARE Maitre doit etre courant sous mikroC coté PIC
Attention!! en mode esclave , je ne l'ai jamais testé .



Le but serait d'envoyer une consigne de position et que les pics répondent à l'arduino quand ils ont fini ou qu'ils signalent un problème pour atteindre cette position.Donc je pense que L'I2C reste le mieux pour répondre à ça non ?

Pic 16F505 I2C
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#8 Message par paulfjujo » jeu. 11 mai 2017 10:34

bonjour,

Quelle serait l'avantage d'utiliser ce protocole de communication ?


Le protocole, c'est toi qui le defini...
Reste aussi à savoir quelle niveau de securité il te faut..

exemple d'echange simple ,à detailler par la suite
des 2 cotés .. maitre et esclave
Ici en liaison point à point , pas besoin de protocole "industriel" comme "MODBUS ASCII" ou autre

un simple protocole d'echange en ascii me semble suffisant.


Code : Tout sélectionner


Arduino
   Envoi d
'une trame au format texte (ascii)   :    "Target= 223 mm<CR>"   
   Armement d'
un  TimeOut  pour attente reponse   
   
                                        PIC reconnait le debut de sequence 
"Target="  et la fin de sequence "mm<CR>"
                                        extirpe la position demandée "223"
                                        ...
                                        declenche un timeout sur l'action à mener
                                        active le changement de position
                                        sort de la boucle de positionnement sur position atteinte ou timeout
                                        si la mesure de position est atteinte à +-1mm pres
                                        (il faut bien gerer une tolerance ..
                                        au moins due à la resolution de mesure ,du jeu mecanique, de la qualité de regulation de position)
                                        renvoi           "OK <CR>" 
                                        sinon renvoi   "BAD 225 <CR>"  (avec eventuellemnt la position atteinte)
    Attente reponse OU timeout
    si reponse : 
    ..Arduino traite le retour                                    
    sinon : Problemo, le PIC ne repond pas ?
    
    Traiter eventuellement un nombre d'
essais ?
    
                                        


s'il faut plus de securité , sur l'echange de donnée, rajout d'un CRC16 en fin de trame emise par l'Arduino
Ce CRC16 est alors controlé à la reception coté PIC pour valider le contenu de la trame reçue.
Aide toi, le ciel ou FantasPic t'aidera

Pic 16F505 I2C
ditame
Débutant
Débutant
Messages : 32
Enregistré en : avril 2017

#9 Message par ditame » jeu. 11 mai 2017 11:32

Merci pour les infos le programme arduino ne devrait pas me poser de soucis, mais coté PIC je n'arrive pas a avoir un code correcte il ne reconnait pas des fonctions trouvées sur internet comme:

Code : Tout sélectionner

void I2CInit(void)
{
    
TRISB 0b00000000//  SDA and SCL as input pin (ça il trouve pas de soucis ^^)
    
SSPSTAT |= 0x80/* Slew rate disabled */
    
SSPCON 0x28;   /* SSPEN = 1, I2C Master mode, clock = FOSC/(4 * (SSPADD + 1)) */
    
SSPADD 0x28;    /* 100Khz @ 4Mhz Fosc */

Pic 16F505 I2C
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#10 Message par paulfjujo » jeu. 11 mai 2017 11:40

Si ce pic n'a pas de I2C Hardware, c'est normal
Puisque les registres n'existent pas.
Il faut alors faire un I2C software but bang
Qui plus est, en mode esclave.
Aide toi, le ciel ou FantasPic t'aidera


Retourner vers « Langage C »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 29 invités