[PIC18F]- Intégration Horloge RTC DS130x
Répondre à la discussion
Affichage des résultats 1 à 28 sur 28

[PIC18F]- Intégration Horloge RTC DS130x



  1. #1
    jorg1n

    [PIC18F]- Intégration Horloge RTC DS130x


    ------

    Bonjour,

    dans le cadre d'un projet, je souhaiterai pour faire communiquer une RTC externe avec mon PIC18F6722.
    Pour cela, j'ai déjà quelques idées, mais, pourriez vous m'aider (hard et soft), interfaçage PIC/RTC, ajout d'une pile?

    Matériel :
    -En ce qui concerne le choix de la RTC, j'en recherche une toute simple et je suis parti sur la DS1306 de chez MAXIM:
    http://www.maxim-ic.com/quick_view2.cfm/qv_pk/2687

    La liaison sera de type SPI, donc de ce genre:
    http://www.microt.it/images/Orologio18F.bmp

    -Au niveau du quartz, je partirai sur ce type:
    http://fr.farnell.com/citizen-americ...956?Ntt=CMJ206
    Avec les précautions de routage qui vont bien.

    -En ce qui concerne la Pile, il s'agira d'un 3V / 235mAh:
    http://fr.farnell.com/renata/cr2032-...-3v/dp/1319741

    Questions:
    Maintenant, ce que je ne sais pas, au niveau soft, auriez vous la connaissance d'un exemple de gestion en SPI, car j'ai trouvé des exemple en 3 fils (avec SDI et SDO relié ensemble) mais je ne souhaite pas le faire de cette manière, je veux le faire en SPI.

    Ensuite, dans le fonctionnement de mon système, je dois pouvoir gérer l'heure (affichage d'un défaut horodaté), mais aussi lancé parfois des "chrono" allant de 1 à 45 min, et sur le principe je ne sais pas quelle solution choisir:
    -Configurer l'alarme de la RTC en ajoutant le temps du chrono?
    ou
    -Récupérer l'information 1Hz ? Mais que faire avec?
    ou
    -Récupéré la sortie 32Khz du DS1306 et l'appliquer sur une entrée d'oscillateur de mon µC (mais laquelle ? RC0/T1OSO ?) et m'en servir de source pour mon Timer1, et donc gérer le "chrono" avec le Timer1? (c'est la solution qui me semble la +pratique, mais j'aurai besoin de votre avis svp)

    Donc voila... jespère que mon explication a été clair... et que vous pourrez m'aider, et qui c'est, cela pourra aussi aider certains...

    Bonne journée a tous

    -----

  2. #2
    DAUDET78

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    A mon avis, il doit y avoir une note d'application sur le site de MicroChip
    J'aime pas le Grec

  3. #3
    Qristoff
    Animateur Électronique

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Salut,
    Pour le quartz OK mais attention à la qualité sinon tu le paierais plus tard par des dérives donc ne pas chercher le profit sur ce poste !, pour la pile une CR2032 va trés bien mais je te conseille plutôt d'utiliser un support pour pouvoir changer la pile plus tard.

    Pour l'aspect pratique, tu prévois un affficheur lcd ou autre pour pouvoir régler l'heure ?
    Enfin, pour la gestion de minuterie, ce que je fais personnellement: le pic lit périodiquement le registre du RTC (toutes les secondes par exemple) et le compare à un de ses registres qui contient la valeur d'alarme (ça évite même les grandes tempo par les timer du pic si besoin). Sinon, tu peux effectivement utiliser la fonction wake-up du RTC associé à la fonction sleep du pic (si tu prévoit d'utiliser ce mode). Dans ce cas, il suffit de configurer les registres alarm du RTC.
    Tout existe, il suffit de le trouver...!

  4. #4
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Merci pour ta réponse Qristoff,

    Pour le quartz OK mais attention à la qualité sinon tu le paierais plus tard par des dérives donc ne pas chercher le profit sur ce poste !
    Pour le quartz, je pense que ça devrait allez, mais je vais regarder ce qui ce fait d'autre.

    pour la pile une CR2032 va trés bien mais je te conseille plutôt d'utiliser un support pour pouvoir changer la pile plus tard.
    Ok, je vais voir cela.

    Pour l'aspect pratique, tu prévois un affficheur lcd ou autre pour pouvoir régler l'heure ?
    Oui, mon petit système sera équipé d'un afficheur graphique, pour mettre le réglage et l'affichage si besoin de l'heure et la date.

    Enfin pour la minuterie, je vais me pencher dessus, pour essayer de voir le plus simple, et celui qui demande le moins de "COM" entre la RTC et le PIC.

    Au niveau soft, je suis allé faire un tour sur le sitre de Microchip, mais pour le moment, je n'ai rien trouvé, je continu mes recherches mais si vous connaissez un lien utile, je suis preneur.

    Merci d'avance

  5. A voir en vidéo sur Futura
  6. #5
    RISC

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Salut,

    Pourquoi ne choisis tu pas directement un PIC18 avec RTCC intégrée ;=) comme les PIC18FxxJ11 ?

    a+

  7. #6
    invite7a49d0d5

    Cool Re : [PIC18F]- Intégration Horloge RTC DS130x

    Salut,

    pourquoi une RTC externe?

    un quartz 32768Hz sur les bons pins...
    et tu as une horloge...

    ou mieux, comme écris RISC,
    un PIC intégrant une RTC...

    vede
    ;O]

    ps sinon une DS1307 I2C est assez facile à mettre en oeuvre...
    vu l'énorme documentation sur le protocole I2C dans Google...

  8. #7
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour à tous,

    Pourquoi ne choisis tu pas directement un PIC18 avec RTCC intégrée ;=) comme les PIC18FxxJ11 ?
    En fait j'ai besoin de pas mal I/O d'ou le choix du PIC18F6722, mais aussi d'une mémoire EEPROM, mais je j'ai pas trouvé de référence contenant tout cela. (J'ai l'impression que aucun PIC ne dispose a la fois d'une RTC interne et d'une EEPROM interne? je me trompe ?)

    Donc sois je prend un PIC18F6722 + RTC externe sois je prend un PIC18F45J11 + Extension I/O MCP23S17 en SPI + EEPROM en SPI... et mon choix a été la première solution.

    pourquoi une RTC externe?

    un quartz 32768Hz sur les bons pins...
    et tu as une horloge...
    J'y avais pensé, mais bon, il y a des composants pour cela, alors autant ne pas surchargé en soft pour gérer une horloge + calendrier.

    ps sinon une DS1307 I2C est assez facile à mettre en oeuvre...
    vu l'énorme documentation sur le protocole I2C dans Google...
    J'utilise déja la bus SPI sur mon PIC pour communiquer avec un autre système, donc pas de I²C...

    J'essai toujours de trouver un tuto avec la gestion ce cette référence en SPI... mais rien, alors si vous avez des infos...
    Sinon, pas je me lancerai dans la création d'une bibliothèque pour la gestion de cette RTC en SPI... mais bon, ça existe déjà, alors autant ne pas perdre trop de temps!

    Merci d'avance

  9. #8
    RISC

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Salut,

    Il n'existe effectivement pas de PIC avec RTCC et E2PROM (voir MAPS).
    Par contre tu peux faire de l'émulation d'E2PROM si le nombre d'écritures/effacement n'est pas trop important.
    C'est à dire que l'on se sert de la mémoire FLASH comme E2PROM.
    Il existe la note d'application AN1095 qui optimise le nombre de cycles en fonction du PIC.

    a+

  10. #9
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour,

    et merci RISC pour ce conseil...
    Par contre tu peux faire de l'émulation d'E2PROM si le nombre d'écritures/effacement n'est pas trop important.
    C'est à dire que l'on se sert de la mémoire FLASH comme E2PROM.
    Il existe la note d'application AN1095 qui optimise le nombre de cycles en fonction du PIC.
    Je ne savais pas que l'on pouvais faire cela...
    Je vais donc voir cela de plus prêt, et si cela peu me convenir, et j'opterai donc pour un PIC avec RTC interne si cela me parait faisable.

    Merci encore et bonne journée a tous

  11. #10
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bon, j'ai bien réfléchi, et je pense faire la partie minuterie, je vais utiliser une des sorties 1hz ou 32,768 KHz, pour servir de source pour le Timer 1 (T1OSO).
    Par contre, j'ai regardé dans la documentation du PIC18F6722, et je n'arrive pas a savoir s'il y a une limite de signal pour T1OSO, en gros, est ce que je peux utiliser le 1Hz comme source? ou est il plus préférable d'utiliser le 32Khz?

    Merci d'avance pour vos conseils d'expert ...

  12. #11
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour à tous...

    il y a du nouveau dans la gamme PIC18...
    J'ai eu le support technique Microchip, et il y a plusieurs référence qui vont sortir:
    PIC18F87K22. family. [ PIC18F65K22, 66K22, 67K22, 85K22, 87K22]

    Et à priori, ils intégrerons EEPROM + RTC... après je n'ai pas eu encore la doc constructeur. Je vais les contacter.

  13. #12
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour a tous...

    bon,je suis en cours de développement du programme, mais je n'arrive pas à trouver de routine en C pour gérer la RTCC DS1306 en SPI, malgré mes nombreuses recherches...

    un coup de pouce serait le bienvenue!!

    Un grand merci d'avance

  14. #13
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour,

    vous n'avez pas une petite idée où je pourrais trouver des infos, ou sur une routine sur laquelle je pourrais me baser?

    merci d'avance

  15. #14
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour à tous,
    bon, je suis en ce moment entrain d'essayer de faire communiquer mon PIC18 avec l'horloge DS1306...
    J'arrive à venir lire l'heure... mais en ce qui concerne la modification de l'heure... je n'y arrive pas !!!
    Auriez vous une petite idée, voila mes routines pour ceux que ça intéresse :
    >> Initialisation de l'horloge:
    void Open_DS1306 (void)
    {
    unsigned char temp;

    /* Configure the Control Register of the DS1306 */
    SS_DS1306 = 1; // Enable SPI transfer to DS1306
    SSPBUF = 0x8F; // Send out the address of the control register
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag
    SSPBUF = 0x04; // Enable 1 Hz Output / Disable alarm 0 & alarm 1
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag
    SS_DS1306 = 0; // Disable SPI transfer to DS1306

    /* Configure the Trickle Charger Register of the DS1306 */
    SS_DS1306 = 1; // Enable SPI transfer to DS1306
    SSPBUF = 0x91; // Send out the address of the Trickle Charger Register
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag
    SSPBUF = 0x00; // Disable the Trickle Charger
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag
    SS_DS1306 = 0; // Disable SPI transfer to DS1306

    }
    >> Lecture de l'horloge:
    void Read_DS1306_Clock (void)
    {
    unsigned char temp;

    /* Configure the reading of the DS1306 */
    SS_DS1306 = 1; // Enable SPI transfer to DS1306
    SSPBUF = 0x00; // Send the Start address of reading to DS1306
    while (!SSPSTATbits.BF); // Wait untill address is shifted out
    temp = SSPBUF; // Clear the BF flag

    /* Read the Second of the DS1306 */
    SSPBUF = 0x00; // Trigger 8 clock pulses
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Read the second -> NOT USE / Clear BF

    /* Read the Minutes of the DS1306 */
    SSPBUF = 0x00; // Trigger 8 clock pulses
    while (!SSPSTATbits.BF);
    DS1306_Min = SSPBUF; // Read the Minutes / Clear BF

    /* Read the Hour of the DS1306 */
    SSPBUF = 0x00; // Trigger 8 clock pulses
    while (!SSPSTATbits.BF);
    DS1306_Hr = SSPBUF; // Read the Hours / Clear BF

    /* Read the Day of the DS1306 */
    SSPBUF = 0x00; // Trigger 8 clock pulses
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Read the Day -> NOT USE / Clear BF

    /* Read the Date of the DS1306 */
    SSPBUF = 0x00; // Trigger 8 clock pulses
    while (!SSPSTATbits.BF);
    DS1306_Date = SSPBUF; // Read the Date / Clear BF

    /* Read the Month of the DS1306 */
    SSPBUF = 0x00; // Trigger 8 clock pulses
    while (!SSPSTATbits.BF);
    DS1306_Month = SSPBUF; // Read the Month / Clear BF

    /* Read the Year of the DS1306 */
    SSPBUF = 0x00; // Trigger 8 clock pulses
    while (!SSPSTATbits.BF);
    DS1306_Year = SSPBUF; // Read the Year / Clear BF

    SS_DS1306 = 0; // Disable SPI transfer to DS1306
    }
    Et voila la fonction qui me permet normalement de venir modifier l'heure, mais ça ne marche pas pour le moment:
    void Write_DS1306_Clock (void)
    {
    unsigned char temp;

    /* Configure the Control Register of the DS1306 */
    SS_DS1306 = 1; // Enable SPI transfer to DS1306
    SSPBUF = 0x8F; // Send out the address of the control register
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag
    SSPBUF = 0x04; // Write protection Disable / Enable 1 Hz Output / Disable alarm 0 & alarm 1
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Configure the writing of the DS1306 */
    // SS_DS1306 = 1; // Enable SPI transfer to DS1306
    SSPBUF = 0x00; // Send the Start address of writing to DS1306
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Write the Second of the DS1306 */
    SSPBUF = 0x00; // Write the Second to DS1306 -> NOT USE
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Write the Minutes of the DS1306 */
    SSPBUF = DS1306_Min; // Write the Minutes to DS1306
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Write the Hour of the DS1306 */
    DS1306_Hr &= 0x3F; // Fixe le mode horaire - mode 24-hour (bit 6 = 0)
    SSPBUF = DS1306_Hr; // Write the Hours to DS1306 + Mode 24H
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Write the Day of the DS1306 */
    SSPBUF = 0x00; // Write the Day to DS1306 -> NOT USE
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Write the Date of the DS1306 */
    SSPBUF = DS1306_Date; // Write the Date to DS1306
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Write the Month of the DS1306 */
    SSPBUF = DS1306_Month; // Write the Month to DS1306
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    /* Write the Year of the DS1306 */
    SSPBUF = DS1306_Year; // Write the Year to DS1306
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag

    SS_DS1306 = 0; // Disable SPI transfer to DS1306
    }
    Alors si vous aviez une idée sur le problème ...je suis preneur!
    Pour info, il y a un bit a mettre a zéro pour permettre l'écriture, il s'agit du bit WP, mais je le fais bien au début de ma routine d'écriture...

    Merci d'avance

  16. #15
    invite7a49d0d5

    Cool Re : [PIC18F]- Intégration Horloge RTC DS130x

    Salut,

    si tu arrives à y écrire (Control Register) on voit
    que la différence c'est que quand tu envoyes l'heure
    tu ne spécifies plus d'adresse (écriture séquentielle espérée???)...

    peut-être renseignes l'adresse avant chaque écriture...
    déjà pour voir...

    vede
    ;O]
    ________
    ...

  17. #16
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Salut Vede...

    bon, je viens de faire le test, fixer l'adresse du paramètres que je veux modifier avant la donnée (voir exemple pour les minutes):
    /* Write the Minutes of the DS1306 */
    SSPBUF = 0x81; // Send the Start address of writing to DS1306
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag
    SSPBUF = DS1306_Min; // Write the Minutes to DS1306
    while (!SSPSTATbits.BF);
    temp = SSPBUF; // Clear the BF flag
    Mais toujours rien !!

    Sachant que la lecture fonctionne, la liaison SPI entre les 2 n'est pas à remettre en cause normalement...?

  18. #17
    invite7a49d0d5

    Cool Re : [PIC18F]- Intégration Horloge RTC DS130x

    re ;O]

    est-ce que tu arrives bien à écrire le byte Control Register?

    si oui c'est bizarre que la même méthode ne fonctionne pas pour écrire l'heure...

  19. #18
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    est-ce que tu arrives bien à écrire le byte Control Register?
    Bah,... justement, je me pose la question...
    Je vais essayer d'inhiber et d'autoriser la sortie 1Hz...bit 2 du CONTROL REGISTER. et je verrais bien si ça fonctionne ou non...

    -> Ai-je besoin de tempo entre chaque envoi? a priori non..?

  20. #19
    invite7a49d0d5

    Cool Re : [PIC18F]- Intégration Horloge RTC DS130x

    re re ;O]

    Citation Envoyé par jorg1n Voir le message
    Bah,... justement, je me pose la question...
    Je vais essayer d'inhiber et d'autoriser la sortie 1Hz...bit 2 du CONTROL REGISTER. et je verrais bien si ça fonctionne ou non...

    -> Ai-je besoin de tempo entre chaque envoi? a priori non..?
    bonn'idée...
    et si ça ne fonctionne pas, c'est ta fonction d'écriture qu'il faut revoir...

    pour le tempo je sais pas... mais après ça coûte rien de tenter...
    style "delay_ms(1)" entre chaque écriture...
    si déjà il arrive à écrire le premier byte Control Register...
    ;O]

  21. #20
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bon, bah, ça fonctionne pas....
    j'ai fais ça:
    Code:
    	unsigned char temp;
    	unsigned int us = 10;
    
    /* Configure the Control Register of the DS1306 */	
    	SS_DS1306 = 1;					// Enable SPI transfer to DS1306
    	SSPBUF = 0x8F;					// Send out the address of the control register
    	while (!SSPSTATbits.BF); 	 
    	temp = SSPBUF;					// Clear the BF flag
    	SSPBUF = 0x04;					// Enable 1 Hz Output / Disable alarm 0 & alarm 1
    	while (!SSPSTATbits.BF);
    	temp = SSPBUF;					// Clear the BF flag
    	SS_DS1306 = 0;					// Disable SPI transfer to DS1306
    
    /* Configure the Trickle Charger Register of the DS1306 */	
    	SS_DS1306 = 1;					// Enable SPI transfer to DS1306
    	SSPBUF = 0x91;					// Send out the address of the Trickle Charger Register
    	while (!SSPSTATbits.BF); 	 
    	temp = SSPBUF;					// Clear the BF flag
    	SSPBUF = 0x00;					// Disable the Trickle Charger
    	while (!SSPSTATbits.BF);
    	temp = SSPBUF;					// Clear the BF flag
    	SS_DS1306 = 0;					// Disable SPI transfer to DS1306
    puis ça ensuite:
    Code:
    	
    /* Configure the Control Register of the DS1306 */	
    	SS_DS1306 = 1;					// Enable SPI transfer to DS1306
    for(us=0; us<=1; us++);				// Delay de 10µs
    	temp = SSPBUF;
    	SSPBUF = 0x8F;					// Send out the address of the control register
    	while (!SSPSTATbits.BF); 	 
    for(us=0; us<=1; us++);				// Delay de 10µs
    	temp = SSPBUF;					// Clear the BF flag
    	SSPBUF = 0x04;					// Enable 1 Hz Output / Disable alarm 0 & alarm 1
    	while (!SSPSTATbits.BF);
    	temp = SSPBUF;					// Clear the BF flag
    	SS_DS1306 = 0;					// Disable SPI transfer to DS1306
    
    for(us=0; us<=1; us++);				// Delay de 10µs
    Mais rien !!!... je comprend pas...

  22. #21
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bon, bah, j'ai du sortir l'oscillo....
    et d'après ce que j'ai vu, en visualisant SCK et SDI lors de ma fonction Open_DS1306 :
    -j'ai bien 4 "phases" de SCK...
    - mais rien sur SDI!!!!!

    C'est pas normal ??

  23. #22
    invite7a49d0d5

    Cool Re : [PIC18F]- Intégration Horloge RTC DS130x

    re ;O]

    non, je ne pense pas que cela soit "normal" ;O]

    il y a un os quelque part... soft ou hard...

    après je connais pas trop SPI, ni le compilo, ni les PIC18F6722...

    FOsc est géré comment?

  24. #23
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour à tous,

    FOsc est géré comment?
    J'utilise le périphérique MSSP du PIC...
    voila comment j'initialise la liaison:

    Code:
     SSP1CON1 = 0b00100001;		// Initialisation du Module MSSP - MASTER MODE FOSC/16 - ENABLE SERIAL PORT
     SSP1STAT = 0b11000000;
    Voila la signification :
    > Input data sampled at end of data output time
    > Transmit occurs on transition from active to Idle clock state
    > SPI Master mode, clock = FOSC/16
    > Idle state for clock is a low level
    > Enables serial port and configures SCKx, SDOx, SDIx and SSx as serial port pins

    il y a un os quelque part... soft ou hard..
    Je suis d'accord avec toi.. mais ce que je trouve étrange, c'est que j'arrive à lire...

    J'ai vérifié, j'ai bien:
    - SCLK (DS1306) -> SCK (PIC)
    - SDI (DS1306) -> SDO (PIC)
    - SDO (DS1306) -> SDI (PIC)
    et CE (DS1306) -> RC2 du PIC
    Et justement, faut il utiliser obligatoirement la broche /SS du PIC ?

    Je continue d'essayer de comprendre... mais si on peut m'aider... ce serait le bienvenue

    Merci d'avance,

    Bonne journée a tous

  25. #24
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bon, de Bon Matin... j'avance...
    Erreur de ma part, j'ai mal déclaré mes I/O, je l'ai déclaré en regardant le cablage de la RTC, dons j'avais déclaré SDI en sortie et SDO en entrée...

    La lecture marchait car j'ai pu lire dans la doc constructeur, §19.3.3 ENABLING SPI I/O cela :
    • SDIx is automatically controlled by the
    SPI module
    • SDOx must have the TRISC<5> or TRISD<4> bit
    cleared
    • SCKx (Master mode) must have the TRISC<3> or
    TRISD<6>bit cleared
    Donc, le bit TRISC<4> basculait automatiquement en entrée...

    Et là, je peux visualiser les données transmises... je vais pouvoir avancer!!

  26. #25
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Alors,

    j'ai fais un autre test... la DS1306 dispose d'une RAM de 96 octets, j'ai donc décider d'écrire une donnée à une adresse connue et de venir la lire ensuite... en pensant biensur que ça n'allait pas marcher... et là surprise, ça fonctionne...
    Voila ce que je fais :


    Code:
    	SS_DS1306 = 0;					// Disable SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation  
    	SS_DS1306 = 1;					// Enable SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation 
    
    /* Configure the Control Register of the DS1306 */	
    	temp = SSP1BUF;					// Clear the BF flag
    	SSP1BUF = 0x8F;					// Send out the address of the control register
    	while (!SSP1STATbits.BF); 
    	temp = SSP1BUF;					// Clear the BF flag
    
    	SSP1BUF = 0x00;					// WP Disable / Disable 1 Hz Output / Disable alarm 0 & alarm 1
    	while (!SSP1STATbits.BF);
    	temp = SSP1BUF;					// Clear the BF flag
    
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 0;					// Disable SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 1;					// Enable SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation 
    
    /* Write to the User RAM of the DS1306 */	
    	temp = SSP1BUF;					// Clear the BF flag
    	SSP1BUF = 0xA0;					// Send Out the address of the User RAM for WRITE
    	while (!SSP1STATbits.BF); 
    	temp = SSP1BUF;					// Clear the BF flag
    
    	SSP1BUF = 0xA5;					// Send the data to the RAM
    	while (!SSP1STATbits.BF);
    	temp = SSP1BUF;					// Clear the BF flag
    
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 0;					// Disable SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 1;					// Enable SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation 
    
    /* Read to the User RAM of the DS1306 */
    	temp = SSP1BUF;					// Clear the BF flag
    	SSP1BUF = 0x20;					// Send Out the address of the User RAM for READ
    	while (!SSP1STATbits.BF); 
    	temp = SSP1BUF;					// Clear the BF flag
    	
    	SSP1BUF = 0x00;					// Trigger 8 clock pulses
    	while (!SSP1STATbits.BF);
    	temp = SSP1BUF;					// Clear the BF flag --> LECTURE DE LA DONNEE ECRITE PRECEDEMMENT
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 0;					// Disable SPI transfer to DS1306
    Pour informations -> Temporisation de 7µs.

    Je vais essayer de réutiliser le même principe pour l'écriture de l'heure.

    Et aussi l'autorisation de la sortie 1Hz Output... Par contre, pensez vous que l'on peut le faire "en 1 fois" ou dois je d'abord mettre le control register à 0x00 (permettre l'écriture) et ensuite mettre le control register a 0x04...

    Merci d'avance...

    PS: Une fois terminé, je posterai ma routine complète de gestion, ça pourra en aider certains par la suite...

  27. #26
    jorg1n

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Et bien voila... ça marche....
    comme promis, l'ensemble des fonctions pour le réglage et la lecture de l'heure.

    Au final, il s'agissait d'une mauvaise écriture... temporisation, reset au mauvais endroit ... Mais maintenant ça marche
    Fichiers attachés Fichiers attachés

  28. #27
    lcoulon

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    Bonjour,

    Pourquoi dans ton code SPI dans les fonctions de lecture et ecriture des registres de la RTC,

    Dans ton code, en fin de transmission ou reception SPI, tu passes CS à "0", mais après une courte tempo tu repasses cette pattes à "1", pourquoi fais tu cela ?

    Code:
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 0;					// Disable  SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 1;					// Enable SPI transfer to DS1306
    	for(us=0; us<=1; us++);			// Temporisation 
    
    
    	for(us=0; us<=1; us++);			// Temporisation 
    	SS_DS1306 = 0;

  29. #28
    robintou

    Re : [PIC18F]- Intégration Horloge RTC DS130x

    En tous cas, j'ai le même code que lui, et ça marche pas chez moi. Help!

    Cordialement,
    Robintou.

Discussions similaires

  1. Réalisation d'une Horloge/Clock Nixie - PIC + Module RTC
    Par jorg1n dans le forum Électronique
    Réponses: 26
    Dernier message: 31/05/2010, 07h16
  2. rtc grillée ?
    Par Rancis dans le forum Électronique
    Réponses: 2
    Dernier message: 01/04/2009, 16h54
  3. Programmation horloge RTC DS1302
    Par invite9f1df75e dans le forum Électronique
    Réponses: 33
    Dernier message: 19/03/2008, 14h30
  4. Alimentation RTC I2C
    Par Toufinet dans le forum Électronique
    Réponses: 2
    Dernier message: 24/01/2007, 20h58
  5. Horloge lumineuse, horloge mecanique et Einstein
    Par pidofra dans le forum Physique
    Réponses: 6
    Dernier message: 22/03/2006, 15h21
Découvrez nos comparatifs produits sur l'informatique et les technologies.