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 ---
- 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 ---
Modérateur : Jérémy
Pic 16F505 I2C
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
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
Pic 16F505 I2C
Pic 16F505 I2C
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+
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+
Pic 16F505 I2C
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.
J'ai jamais fait d'assembleur donc si il existe la même chose en C je suis plus preneur
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
Pic 16F505 I2C
Pic 16F505 I2C
Bonjour,
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 ?
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
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
Expert- Messages : 2589
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
bonjour,
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.
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.
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.
Pic 16F505 I2C
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
Qui est en ligne
Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 29 invités