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 en BASIC et PASCAL !

Modérateur : Gérard

La Communication I2C
paulfjujo
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 806
Âge : 67
Enregistré en : juillet 2015
Localisation : 01120
Contact :

#21 Message par paulfjujo » mar. 2 août 2016 13:46

cyril13110 a écrit :Salut jeremy,
Jai testé avec le paramètre a 0 pour chaque lecture. Resultat le pic affiche n'importe quoi sur le lcd.
Quand je passe ce paramètre a 1 les valeurs sont correcte.
Par contre apres avoir jouer un moment avec ce paramètre il faut que ce pametre soit a 0 pour la derniere ligne si non carnage......



comme le precise Gerard ... le pointeur de registre du DSxxxx est incrementé à chaque lecture
si le parametre est à 1 ..
et pour la derniere valeur , il est à 0 .. normal on a plus rien à lire .

idem que pour la DS1307..

Code : Tout sélectionner


void Read_Time
(char *sec, char *min, char *hr, char *week_day, char *day, char *mn, char *year) {
        I2C1_Start();
        I2C1_Wr(DS1307);
        I2C1_Wr(0);
        I2C1_Repeated_Start();
        I2C1_Wr(0xD1);
        *sec =I2C1_Rd(1);
        *min =I2C1_Rd(1);
        *hr =I2C1_Rd(1);
        *week_day =I2C1_Rd(1);
        *day =I2C1_Rd(1);
        *mn =I2C1_Rd(1);
        *year =I2C1_Rd(0);
        I2C1_Stop();
}

La Communication I2C
Jérémy
Administrateur du site
Administrateur du site
Messages : 1934
Âge : 38
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#22 Message par Jérémy » mar. 2 août 2016 14:10

??? je comprends mieux ? mais alors cela signifie que mon commentaire dans le Tuto du DS1307 est faux .

value = I2C1_Rd(0); // lecture et enregistrement de la valeur le 0=pour no ACK

En fait le 0 c'est pour dire que l'on incrémente pas l'adresse de lecture , c'est bien ca ? et non pour demander un ACK?
C'est en faisant des erreurs, que l'on apprend le mieux !!!

La Communication I2C
cyril13110
Passioné
Passioné
Messages : 401
Âge : 35
Enregistré en : avril 2016
Localisation : 13

#23 Message par cyril13110 » mar. 2 août 2016 14:40

Ok ok mais alors pourquoi ca parle d'acquitement ?
Ca serai plutot increment....non ?

Mais du coup il me vient une question......est ce que cest le meme principe pour toutes puces I2C (eeprom,can,cna,ect...) ?

Et tiens il me vient une idée bête....si je mets un 2 au lieu de 1 en parametre du ack, est ce que ca incremente de 2 ?
Je soir je fait le test et je vous dit le resultat....

La Communication I2C
cyril13110
Passioné
Passioné
Messages : 401
Âge : 35
Enregistré en : avril 2016
Localisation : 13

#24 Message par cyril13110 » mar. 2 août 2016 21:14

bon au final la com I2C est plutot simple a faire fonctionner du moment que l'on connait les différentes adresses ou lire et ecrite dans la puce à utiliser.....chose par fois complexe à dechiffrer ......(aujourd'hui je regardais une puce de convertion ana-num en i2c, j'ai retrouver l'adresse de la puce sur le reseau mmais le reste des registre bein ils sont decrit mais pas d'adresse d'indiqué....c'est bien pratique ca)
j'ai modifier mon code pour passer de soft_i2c à la gestion I2C physique de la puce, sans grande surprise ca fonctionne trés bien.
comme cité ci dessus j'ai testé le paramètre 2 pour i2c_rd, ca ne fait strictement rien de bien différent que le paramètre 1.....

Code : Tout sélectionner

'sous programme de lecture i2c
sub procedure Read_Time()
   I2C1_Start()
   I2C1_Wr(0xD0)
   I2C1_Wr(0)
   I2C1_Start()
   I2C1_Wr(0xD1)
   seconds = I2C1_Rd(1)
   minutes = I2C1_Rd(1)
   hours =  I2C1_Rd(0)
  I2C1_Stop()
end sub

'
sous programme d’écriture pour mise à jour
sub procedure WR_Time
()
    
I2C1_Start()
   
I2C1_Wr(0xD0)
   
I2C1_Wr(0)
    
I2C1_Wr(0)
   
I2C1_Wr(0x13)
    
I2C1_Wr(0x19)
   
I2C1_Stop()
end sub

La Communication I2C
Gérard
Avatar de l’utilisateur
Confirmé
Confirmé
Messages : 666
Âge : 59
Enregistré en : septembre 2015
Localisation : Alsace

#25 Message par Gérard » mar. 2 août 2016 21:20

Jérémy a écrit :??? je comprends mieux ? mais alors cela signifie que mon commentaire dans le Tuto du DS1307 est faux .

value = I2C1_Rd(0); // lecture et enregistrement de la valeur le 0=pour no ACK

En fait le 0 c'est pour dire que l'on incrémente pas l'adresse de lecture , c'est bien ca ? et non pour demander un ACK?


Je viens de chercher dans l'aide concernant cette instruction : value = I2C1_Rd(0)
value contiendra la valeur du registre précédemment pointé, le (0) veut dire NACK quand on ne veut plus rien lire juste avant I2C1_Stop
Le 11 / 07 / 2017, j'ai commandé une Ford Mustang.
Le 31 / 08 / 2017, j'ai eu la Mustang, un régal.

La Communication I2C
Jérémy
Administrateur du site
Administrateur du site
Messages : 1934
Âge : 38
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#26 Message par Jérémy » mar. 2 août 2016 21:25

Hum....

Alors mon commentaire est bon mais pas dans le sens que je le croyais ! NACK pour No Acknowledge ?

Je pensais que c'était pour un accusé reception ! Je vais corriger mon Tuto exit

:bravo:
C'est en faisant des erreurs, que l'on apprend le mieux !!!

La Communication I2C
cyril13110
Passioné
Passioné
Messages : 401
Âge : 35
Enregistré en : avril 2016
Localisation : 13

#27 Message par cyril13110 » mar. 2 août 2016 22:06

bon en tous cas je suis bien content que les réponses à mes questions aident la communauté....
en tous cas merci pour votre aide...

La Communication I2C
cyril13110
Passioné
Passioné
Messages : 401
Âge : 35
Enregistré en : avril 2016
Localisation : 13

#28 Message par cyril13110 » mar. 2 août 2016 22:12

je viens de trouver une description complete de ACK sur la Ds du 24c08:

Acknowledge Bit (ACK)
The acknowledge bit is used to indicate a successful byte transfer. The bus transmitter, whether it be bus master or slave device, releases Serial Data (SDA) after sending eight bits of data. During the 9th clock pulse period, the receiver pulls Serial Data (SDA) Low to acknowledge the receipt of the eight data bits.


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité