Connexion de deux microcontrôleurs PIC18Fxxxx avec I2C

M

mikkolaa

Guest
Bonjour,

Je commence la programmation des programmes whitch communiquer entre deux PIC18F6520.
(Il est possible d'utiliser la SPI aussi, mais quelle est la longueur de câble maximale entre les dispositifs de SPI?)
Le protocole devrait être très facile.Il vous sera envoyé seulement 2-4 octets à la fois.
Je pense que
j'ai besoin de recourir au double mode maître, parce que deuxième PIC envoyer les codes d'erreur de
PIC maître.
Je
n'ai aucune idée de la façon de démarrer le projet I2C.(Le capitaine PIC travaille maintenant
sans I2C, mais la prochaine je vais écrire protocole I2C pour "esclave" et les "master" pic.

J'utilise MPLAB 7.4 ASM codage.

Pouvez-vous à quiconque des conseils pour démarrer certains projets?Exemple de code?
J'ai PIC18C Reference Manual.

 
Bonjour!
Ce serait bien si vous pouviez nous donner plus d'informations sur votre projet!
Alors, s'il vous plaît, décrire votre projet en quelques mots, puis nous montrer ce que vous avez fait
jusqu'à présent.
Enfin nous poser vos questions!
observe

 
Kabanga a écrit:

Bonjour!

Ce serait bien si vous pouviez nous donner plus d'informations sur votre projet!

Alors, s'il vous plaît, décrire votre projet en quelques mots, puis nous montrer ce que vous avez fait jusqu'à présent.

Enfin nous poser vos questions!

observe
 
bonjour,

Je tente de faire quelque chose qui semble très similaire à ce que vous essayez de ne pas il ya si longtemps.

à la fin,
j'ai décidé de ne pas utiliser I2C, car elle est probablement la plus complexe de la méthode de communication sur la puce.

si vous êtes capable de vous suggérons d'utiliser i would USART ou EUSART comme ils sont beaucoup plus faciles à mettre en œuvre.

dans mon projet,
j'ai aussi besoin de communiquer entre plusieurs appareils comme i est la construction d'une unité qui a un maître à puce et les multiples dispositifs esclaves.il est très facile de faire une routine qui peut parler aux esclaves individuellement.

je fait cela en utilisant les 9 bits.ce qui permet l'octet que vous souhaitez envoyer plus un peu d'être envoyé en un seul.si vous utilisez ce bit pour indiquer que l'adresse est en cours d'envoi, vous pouvez parler à 1 appareil à la fois.

il semble être un moyen fiable d'obtenir à court peices des données d'une puce à l'autre et est rapide pour obtenir de travailler.

bien que je travaille avec le dispositif 16f877A im sure que ce serait une tâche facile pour obtenir ce groupe de travail sur votre appareil.

l'inconvénient est
qu'il sera très probablement besoin d'un changement de broche à migrer vers les allocations de cette forme de communication, mais la hausse est de coutume de passer de longues obtenir le reste du code écrit.

bonne chance!

 
shaun_c_m a écrit:

bonjour,Je tente de faire quelque chose qui semble très similaire à ce que vous essayez de ne pas il ya si longtemps.à la fin, j'ai décidé de ne pas utiliser I2C, car elle est probablement la plus complexe de la méthode de communication sur la puce.si vous êtes capable de vous suggérons d'utiliser i would USART ou EUSART comme ils sont beaucoup plus faciles à mettre en œuvre.dans mon projet, j'ai aussi besoin de communiquer entre plusieurs appareils comme i est la construction d'une unité qui a un maître à puce et les multiples dispositifs esclaves.
il est très facile de faire une routine qui peut parler aux esclaves individuellement.je fait cela en utilisant les 9 bits.
ce qui permet l'octet que vous souhaitez envoyer plus un peu d'être envoyé en un seul.
si vous utilisez ce bit pour indiquer que l'adresse est en cours d'envoi, vous pouvez parler à 1 appareil à la fois.il semble être un moyen fiable d'obtenir à court peices des données d'une puce à l'autre et est rapide pour obtenir de travailler.bien que je travaille avec le dispositif 16f877A im sure que ce serait une tâche facile pour obtenir ce groupe de travail sur votre appareil.l'inconvénient est qu'il sera très probablement besoin d'un changement de broche à migrer vers les allocations de cette forme de communication, mais la hausse est de coutume de passer de longues obtenir le reste du code écrit.bonne chance!
 
Salut,
Je travaille sur un projet similaire dans laquelle je suis PIC18F8722 connecter deux appareils par I2C bus.There sont également une EEPROM, RTC et du CAD sur le même bus I2C.

Mais je vais avoir de problème d'envoi des données de l'esclave à maître cpu.
Je peux recevoir correctement les données de maître à esclave.

Mais dès que
j'ai lu les données de l'esclave,
le maître ne cesse de se bloque et attend peu à BF set.It semble SCL est bas en permanence.

J'utilise le même code que celle utilisée pour communiquer au CCF en master.Please voir ci-dessous:

StartI2C ();
IdleI2C ();
varslave1 = putcI2C (adresse) / / octet de contrôle d'écrire
IdleI2C ();
varslave1 = putcI2C (0xAB);
IdleI2C ();
StopI2C ();

StartI2C ();
IdleI2C ();
varslave1 = putcI2C (adresse);
IdleI2C ();
varslave1 = getcI2C () / / Lire les données de l'esclave
IdleI2C ();
StopI2C ();

Slave cpu a permis à des interruptions sur I2C.The code de l'esclave est la suivante:
void I2CInterruptHandlerHigh (void)
(
BYTE var;
INTCONbits.GIE = 0; / / disable global interrompre
if (PIR1bits.SSP1IF) / / esclave I2C répondre à interrompre
(
/ / I2C bit d'arrêt détecté (Page 81) si c'est un esclave I2C Transmission
/ * if (SSP1STATbits.P == 1)
(
SSP1BUF = 0; / / SSPBUF = 0 (Page 19)
SSPCON1bits.CKP = 1; / / set_bit (SSPCON, 4) aka CKP, SSPBUFF doit écrire avant (Page 82)
) * /

if (SSP1STATbits.BF == 1) / /
sinon c'est un / / I2C Slave Accueil
(

AddDelayMs (10);
gFnCode = SSP1BUF / / sauvegarde de données
var = putsI2C (0x31) / / envoyer des données à maîtriser
ComputeENQ (gFnCode);
)

PIR1bits.SSP1IF = 0;
) / / END IF
INTCONbits.GIE = 1; / /
enable global interrompre
)

Je suis totalement lost.Any aide est grandement appréciée.

Merci,
Amit

 
J'ai eu même des problèmes.Je ne peux donc pas vous aider.
Je pense que
la puce i2c matériel
n'est pas si facile
(avec l'assembleur).
J'ai travaillé près de mois avec les I2c problèmes.
Aujourd'hui, je remplace la communication de la SPI ou similaires
basées sur des logiciels de communication de données.
Reazon est que je
n'ai pas d'autres périphériques sur le même réseau et je ne
voulez plus utiliser le temps d'essayer utilisation puce I2C modules.

Protocole de communication est la question.Je
n'ai pas besoin de transmettre et de recevoir d'énormes paquets de données ne sont que mes quelques octets.(quelques octets de données et cheksum).

 
Chers collègues,

Est-il possible de basculer entre maître et esclave I2C modes au cours de l'exécution par écrit à l'SSPCON s'inscrire?

Je vais avoir deux pays insulaires du Pacifique dans le système.On
s'occupera de l'affichage, une autre de contrôler le processus.Lorsque le processus isn t en cours d'exécution, l'affichage PIC devrait être le maître.Lorsque le processus est en cours d'exécution, l'affichage PIC devrait afficher les paramètres.Mais le problème
c'est que
j'ai une obligation de l'homme, qui a développé la version actuelle du firmware PIC de contrôle, que le contrôle PIC ne devrait pas être interrompu pour la communication série.Je m envisage de faire un multi-bus, où le processus de contrôle de PIC est un maître, quand le processus est en marche, et l'affichage PIC est un Master pour le reste du temps.I ll probablement ajouter une ligne trop handshaking.Pensez-vous que
c'est une bonne approche?

À la vôtre,
- Nick

PS Une autre option serait de remplacer I2C avec CAN, qui est un peer-to-peer bus au départ.Unfortunaltely, il
est trop tard pour le faire.

 
Encore mieux que la CAN est le LIN, mais comme vous l'avez dit est trop tard pour mettre en œuvre.

 

Welcome to EDABoard.com

Sponsor

Back
Top