-
05/03/2008 - 15h19 Toufinet
I2C .. c'est reparti ...
Bonjour à tous,
Voilà, c'est reparti pour une tournée de déboggage d'I2C ! Par ici les bierres !
Bon, plus sérieusement, j'ai pas cherché à me compliquer la vie, j'ai fait un copié/collé du code de bigonoff ( cf part 2 )
Lorsque je simule, je look le registre PORTC ( les bits 3 et 4 pour SDA et SCL ).
La séquence I2C commence par un START ( ça vous surprend hein ! ).
Je devrais donc voir bouger les bits 3 et 4 du port C, mais il n'en est rien.
Une chose que je trouve un peu étrange, c'est que bigonoff nous indique de mettre TRISC 3,4 en entrée ( BSF TRISC,3 ; BSF TRISC,4 ).
Hors, en tant que master, ça devrait être des sorties non ? Sur ce point, j'ai regardé la doc car en général ils disent comment initialiser un module, mais là, rien .
Donc en fait, mon VRAI problème, c'est que je ne sais pas comment débogger ça ... quel registre regarder ? quand ? etc ...
Voilà, si vous avez des idées, n'hésitez pas !
PS : pour l'instant je suis encore en simulation, j'ai appris par expérience qu'il était strictement inutile de tenter en réel tant que la simu ne fonctionnait pas 
Edit : PIC16F882 pour les curieux .. mais je pense pas que ça soit utile ici ^^
-
05/03/2008 - 16h48 Toufinet
Re : I2C .. c'est reparti ...
Bon, après réflexion, je commence à me demander si l'I2C est simulable ...
Je m'explique :
On a RC3 et RC4 en inputs, donc par conséquent, générer un start bit ( passage de 1 à 0 ) devient difficile, d'autant plus que, si on met dans les stimuli RC3 et RC4 à 1, le simulateur ***pourrait*** ne pas les mettre à 0 à cause du fait que non-seulement RC3 et RC4 sont configuré en entrée, et en plus parceque dans les stimuli, on ne peut pas expliciter le fait qu'on met RC3 et RC4 à 1 via une résistance de pull-up ...
Je ne sais pas si je me suis bien fait comprendre dans ce message, donc dites-moi ce que vous en pensez .. peut-être que je fais fausse-route 
Donc en gros, soit le simulateur n'est pas suffisament bien développé pour pouvoir simuler l'I2C, soit il y a un réel problème dans mon programme.
Merci -
05/03/2008 - 22h26 DavidDB
Re : I2C .. c'est reparti ...
Salut,
I2C soft ou Hard???
David.
-
06/03/2008 - 17h30 Toufinet
Re : I2C .. c'est reparti ...
I2C hard .
On m'a dit sur le forum de microchip, que c'était en effet pas simulable.
Bref, me voici maintenant dans le monde réel , toujours autant semé d'embuches 
Alors voilà, donc mon PIC16F882 en master, et un capteur de température, le TCN75A.
Problème : lors de la configuration du TCN75A, je reçoit le 1ier ACK, mais pas le 2ième ... Code: CALL I2C_start
CALL I2C_address_W
CALL I2C_check; <- first ACK sent by slave, and seems to be received
MOVLW TCN75A_conf_register
MOVWF OCTET
CALL I2C_send
CALL I2C_check; <- second ACK sent by slave, and doesn't seem to be received En mode debug dans MPLAB, au bout de X secondes d'attente, je click sur "stop", et le PIC se trouve dans le second I2C_check, en attente du 2nd ACK ... Code: I2C_check
CALL I2C_idle
bank1
I2C_check2 BTFSC SSPCON2,ACKSTAT
GOTO I2C_check2
RETURN Il reste dans la boucle "I2C_check2"
Je comprend pas pourquoi je recevrais le 1ier ack, et pas le 2ième ...
une idée ?
PS : résistances de PULL-UP de 1kohm, FSCL environ 100kHz
-
06/03/2008 - 20h39 DavidDB
Re : I2C .. c'est reparti ...
Salut,
A mon avis, tu as simplement une erreur de BANK au vu de ton code...
Es-tu certain que la variable "OCTET" est accèssible depuis la BANK1???
Une chose que je trouve un peu étrange, c'est que bigonoff nous indique de mettre TRISC 3,4 en entrée
C'est normal, car en hardware l'I2C ne travaille que sur la direction du PORT pour émettre (il change simplement l'I/O en sortie/entrée pour emettre sur le bus)
David.
-
07/03/2008 - 14h50 Toufinet
Re : I2C .. c'est reparti ...
Bien vu pour la banque, c'est sans doute ça ( il me semblait bien avoir déjà rencontré exactement le même problème ! )
Je verrais ça ce week-end , merci | | |