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 : Gérard
La Communication I2C
- paulfjujo
Expert- Messages : 2620
- Âge : 73
- Enregistré en : juillet 2015
- Localisation : 01800
- Contact :
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- Messages : 2732
- Âge : 45
- Enregistré en : juillet 2015
- Localisation : Dans le sud
- Contact :
??? 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?
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?
La Communication I2C
- cyril13110
Confirmé- Messages : 923
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
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....
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
Confirmé- Messages : 923
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
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.....
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
Expert- Messages : 1725
- Âge : 65
- Enregistré en : septembre 2015
- Localisation : Alsace - Haut-Rhin
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
La Communication I2C
La Communication I2C
- cyril13110
Confirmé- Messages : 923
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
La Communication I2C
- cyril13110
Confirmé- Messages : 923
- Âge : 41
- Enregistré en : avril 2016
- Localisation : 13
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 13 invités