Problème de mise en place I²C [PIC] - C - Programmation
Marsh Posté le 03-05-2008 à 20:30:21
Yo Juju
Test de base : commence par faire clignoter une LED, ça permettra de voir si ton prog se flashe bien, qu'il s'exécute bien, que l'oscillateur tourne et que le prog s'exécute
Marsh Posté le 03-05-2008 à 20:33:31
Tu peux aussi poster un schéma
et donner les paramètres de l'option byte (HS/XT etc.)
Marsh Posté le 03-05-2008 à 23:01:03
beel1 a écrit : Yo Juju Test de base : commence par faire clignoter une LED, ça permettra de voir si ton prog se flashe bien, qu'il s'exécute bien, que l'oscillateur tourne et que le prog s'exécute |
Yo
Je savais pas que t'etais calé en PIC aussi
Je suis déja passé par la, et comme je l'ai deja dit, un autre programme du meme style marche sans probleme (sans que je touche a la maquette entre temps)
Mais euh bon ... Comme par magie, j'ai donc changé de PIC pour un 18F2550 (qui a la meme datasheet que le 18F4550 que j'utilisais avant, donc a priori les memes registres and so on), j'ai aussi ajouté des resistances supplémentaires (passant de 1kohm a ... tadammm .. 2kohm ), et avec exactement le meme programme, ca s'est mis a marcher ... Incompréhensible (si j'ai le temps je re testerai avec le 4550 pour voir si c'etait juste un probleme avec les resistances, mais ca me paraitrait enorme, qd meme ... d'autant que dans les documents Microchip ils parlent d'une valeur de 1 a 10k)
J'ai maintenant du boulot a rattraper pour faire marcher tout comme il faut, mais .. Au moins je sais dans quelle direction bosser
Marsh Posté le 04-05-2008 à 10:44:11
1k c'est faible commême, perso j'aurais plutôt tendance à mettre 10k. À moins d'être dans un environnement très perturbé, ça sert à rien de mettre la résistance la plus faible possible. D'ailleurs la dernière fois que j'ai mis un bus I²C sur un produit, les pulls-up étaient de 22k
Ton init me paraît un peu légère aussi, y'a ptêt ceci :
ADCON1 = 0x0F; // Enable digital I/O
qui manque
Ca va dépendre de ton Config bit PBADEN :
Citation : Note: On a Power-on Reset, RB4:RB0 are configured as analog inputs by default and read as ‘0’; RB7:RB5 are configured as |
Marsh Posté le 04-05-2008 à 16:11:20
Pour la valeur de la résistance, je me suis basé la dessus :
http://ww1.microchip.com/downloads [...] oc/i2c.pdf (page 9)
Quant au reste, bah, pour l'instant ca marche au poil sans ca, et apparemment d'après la datasheet, qd tu actives l'I2C, y a pas besoin de ce truc la
Je cite
Citation : |
De tte facon vu que ca marche ..
Enfin qd je dis que ca marche, c'est bcp dire, j'ai encore parfois des WCOL ou des BCLIF qui surgissent de nulle part, mais au moins je sais ou regarder pour régler le probleme ... Alors qu'avant, nan, et c'est qd meme pénible de meme pas avoir la moindre idée de l'origine d'un probleme
Marsh Posté le 04-05-2008 à 21:06:53
Juju_Zero a écrit : Pour la valeur de la résistance, je me suis basé la dessus : |
J'aime bien le "values are approximative" en gros dans la slide et le paragraphe en-dessous pour dire que "bon, OK, c'est pas forcément ça"
Juju_Zero a écrit : Quant au reste, bah, pour l'instant ca marche au poil sans ca, et apparemment d'après la datasheet, qd tu actives l'I2C, y a pas besoin de ce truc la
|
Yep. Sauf que si ta pinoche est aiguillée vers l'ADC et non vers le bus de données (j'arrive pas à avoir un schéma des broches du port B ) bah ton MSSP il va lire que des 0.
Marsh Posté le 05-05-2008 à 11:39:21
ReplyMarsh Posté le 05-05-2008 à 20:26:32
beel1 a écrit : |
Ouai
J'ai trouvé la docu officielle Philips, qui traite en particulier de la valeur de resistance a utiliser, et j'ai rien compris
beel1 a écrit : Yep. Sauf que si ta pinoche est aiguillée vers l'ADC et non vers le bus de données (j'arrive pas à avoir un schéma des broches du port B ) bah ton MSSP il va lire que des 0. |
Bah apparemment y a pas de probleme de ce genre vu que ca marche
coincoin94 a écrit : a tu résolu le probleme car je block comme toi avec mon 4550 |
Je suis passé au 2550 et voila
J'ai assez de choses a faire pour pas prendre le temps de repasser au 4550 et voir ce qui allait pas D'ailleurs je pense que je trouverai pas le probleme
Marsh Posté le 05-05-2008 à 20:47:14
Ouais 'fin 'faudrait pas que ça se mette à déconner sur le 2550 aussi, hein
Genre en pleine démo
Marsh Posté le 05-05-2008 à 20:53:30
T'inquiete
D'facon je vais surement encore devoir changer pour une version low voltage (a moins que t'aies une solution miracle pour faire cohabiter un pic alimenté en 5V et un truc alimenté en 3.3V max ), alors j'ai encore le temps de trouver des trucs qui marchent pas
Marsh Posté le 02-05-2008 à 19:38:09
(je mets ca en sous cat C sans grande conviction mais y a rien de plus approprié)
Bien .. Dans le cadre d'un projet que je dois réaliser en 2e année de ma formation en école d'electronique, je dois mettre en place une liaison I²C entre un microcontroleur et une EEPROM d'une part, et entre un microcontroleur et un accélérometre d'autre part (qui dispose d'un bus I²C ou SPI, au choix) .. Pour diverses raisons, j'ai donc choisi un 18F4550, et pour la RAM, une 24AA256 (toutes 2 de Microchip)
Dans un premier temps, j'ai utilisé le code disponible sous la forme de l'Application Note 997 (dispo sur le site de Microchip) .. Ca fonctionnait (les formes d'onde vues sur un oscilloscope etaient correctes, et correspondaient bien a ce qui etait attendu), mais pas exactement comme je le souhaitais ...
Bref, j'ai donc ensuite tenté de revenir à la base, et de tenter de programmer le truc moi meme .. En utilisant les différents registres dont dispose le 18F4550, qui permettent de gérer ca en hard (alors que le programme de l'AN997 gérait ca en soft) : SSPCON1,SSPCON2,SSPADD,SSPBUF et autres
J'ai donc utilisé un code ressemblant a celui ci :
http://www.google.fr/codesearch?hl [...] 52.c#first
Bref .. Le code compile sans probleme, pas d'erreurs dans MPLAB, etc ... Je programme le pic (avec l'ICD2 de Microchip), enfin a priori y a aucun probleme dans l'interface ordi -> pic ..
Je lance le programme .. Déja, rien ne se passe sur l'oscilloscope .. Et ensuite, le programme stoppe au premier while(!PIR1bits.SSPIF) .. Vérification faite, le SSPIF reste désespérement à 0, alors qu'il devrait se mettre a 1, tel que précisé dans les datasheets et tous les documents sur l'I²C que j'ai pu trouver ..
Mais bon, le premier problème est déja que rien ne bouge sur l'oscillo, alors qu'on devrait voir un start
(si je fais une boucle while avec des restart a la chaine, rien n'apparait non plus)
Ce qui me fait penser que c'est peut etre un problème de montage, pourtant c'est pas bien sorcier .. La RAM, le PIC, tous les 2 correctement alimentés ... Un fil qui relie le SDA de l'un a l'autre, idem avec le SCL .. Sans oublier la résistance de pull-up, qui maintient les lignes a l'etat haut en l'absence de sollicitation (comme recommandé dans les brochures techniques) ... Et de tte facon le tout marchait correctement (et continue de marcher) avec l'autre programme ..
Alors quid ? Ca peut venir d'ou ?
(j'ai déjà testé avec un autre 18F4550, revérifié les liaisons - avant j'utilisais une plaque a essais qui me paraissait un peu merdique, depuis j'ai refait ca proprement sur une vraie plaque avec soudures et tout le toutim, j'ai fait le tour de la datasheet du µP en question pour voir d'ou pouvait venir le probleme sans y trouver de réponses, maté des sujets sur la question sur pas mal de forums, essayé d'appliquer ce qu'ils recommandaient sans que ca change qqch .. bref, je suis perdu )
PS : j'ai a ma disposition des 16F877 et des 18F2550, je vais d'ailleurs tester de ce pas le meme code avec le 18F2550, en espérant un miracle
Message édité par Juju_Zero le 03-05-2008 à 15:34:47
---------------
iRacing, LA simu automobile