Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 34

Programmation horloge RTC DS1302



  1. #1
    camelia222

    Programmation horloge RTC DS1302


    ------

    Bonjour a tous et toutes, j'ai un petit problème electronique et j'espere que vous allez pouvoir m'aider. Voila la situation, j'ai un pic18F4520 que je programme sous MikroC et qui me permet (entre autre) d'envoyer des donnees sur une carte SD. Le problème c'est que je voudrais pouvoir envoyer ces données a des heures précise et que la date apparaisse sur la carte SD. Pour cela j'ai donc acheté un DS1302 (horloge temps réel) qui permet grâce aux vibration d'un quartz d'avoir l'heure et la date. Le problème c'est qu'il faut rentrer une date et une heure de départ et je n'ai vraiment que très peu d'idées a ce sujet. Donc si quelqu'un posséde un programme (ou bien a une quelconque methode) compatible avec mikroC qui permet d'envoyer la date et l'heure et aussi de la récupérer se serait vraiment très gentil de sa part si il pouvait m'aider. J'ai cherché sur le Web mais je n'ai rien trouvé d'interessant donc je suis vraimeent bloquée.

    Voila,, merci d'avance pour vos réponse

    Biz a +

    -----

  2. Publicité
  3. #2
    gienas
    Modérateur

    Re : Programmation horloge RTC DS1302

    Bonjour camelia222 et tout le groupe

    Je suis un peu "dérouté" par ta question

    Tu programmes un PIC et dialogues avec une carte SD, et tu bloques sur un problème élémentaire, en principe bien décrit dans la datasheet

    Bien entendu, une RTC doit être mise à l'heure du lieu où elle doit fonctionner. La procédure est décrite dans la doc. Le RTC se comporte généralement comme un port, à plusieurs registres, qu'il faut charger en écriture en y mettant les bons bits. On récupère les informations en lisant les mêmes registres.

  4. #3
    camelia222

    Re : Programmation horloge RTC DS1302

    oui je sais mais j'ai du mal a bien comprendre la datasheet et les differents registres, quel bit mettre a 1, quel bit mettre a 0... si quelqu'un peux juste me donner quelque indice pour commencer svp

  5. #4
    mat64

    Re : Programmation horloge RTC DS1302

    Bonjour,

    tu as la procédure pour lire et écrire p.6 à 8 de la datasheet, avec un chronogramme qui récapitule tout p. 8. Les registres sont résumés dans un tableau p.9, le rôle des registres de date est détaillé dans le paragraphe CLOCK/CALENDAR qui commence p.6.

    Te faire l'explication que tu demandes (quel bit positionner...) reviens à traduire ces pages, et ça je pense que pas grand monde ici aura envie de le faire. Mais si il y a un point particulier que tu ne comprends pas, pose une question précise, et tu auras des réponses

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

    Re : Programmation horloge RTC DS1302

    ok merci j'ai deja commencé a lire, le problème c'est que je suis pas une championne en anglais mais bon au pire je traduirai... Aller au boulot, et encore merci

  8. #6
    gienas
    Modérateur

    Re : Programmation horloge RTC DS1302

    Citation Envoyé par camelia222 Voir le message
    ... le problème c'est que je suis pas une championne en anglais mais bon au pire je traduirai ...
    Le style des datasheets est en général très simple, et souvent le même, donc facile à comprendre. C'est loin d'être du littéraire

    Si tu as une tournure qui coince, tu peux jeter un oeil sur ce fil

    http://forums.futura-sciences.com/thread147361.html

    pour le cas où ta question était présente, et, au besoin, y poser ta question de vocabulaire ou de compréhension.

    Pour des questions plus spécifiques à ton RTC, mieux vaut poser tes questions ici.

  9. Publicité
  10. #7
    camelia222

    Re : Programmation horloge RTC DS1302

    J'ai une petite question, je ne comprend pas a quoi correspond le mode "Burst"

  11. #8
    gienas
    Modérateur

    Re : Programmation horloge RTC DS1302

    Citation Envoyé par camelia222 Voir le message
    ... je ne comprend pas a quoi correspond le mode "Burst"
    Voilà ce que donne la première réponse google à la question "burst mode":

    http://en.wikipedia.org/wiki/Burst_mode

    En anglais, il faut toujours mettre l'adjectif avant le substantif.

    Je n'exclus pas que la même question, posée dans l'autre sens ("mode burst") donne des réponses en français.

    Attention, les guillemets sont importants. Ils permettent d'obliger la recherche à tenir compte de l'expression et non de chaque mot, pris séparément.

    Maintenant, à toi de jouer!


    Edit: Effectivement, il y a 3390 réponses, en français seulement, dont

    http://dictionnaire.phpmyvisites.net...-mode-8225.htm

    qui est la première réponse.
    Dernière modification par gienas ; 14/03/2008 à 14h23.

  12. #9
    camelia222

    Re : Programmation horloge RTC DS1302

    Oui mon problème en lo'ccurence ce n'est pas la comprehension du mot burst mais son interet dasn le cas present c'est a dire pour ds1302

  13. #10
    gienas
    Modérateur

    Re : Programmation horloge RTC DS1302

    Citation Envoyé par camelia222 Voir le message
    ... son interet dans le cas present c'est a dire pour ds1302?
    Mais alors, pourquoi ne pas le dire de suite, clairement?

    L'intérêt, c'est qu'il n'est pas nécessaire de demander (gentiment ) quelle heure il est. Il suffit "d'écouter", la fourniture de l'information est permanente, mais répond, bien entendu, à un timing, puisqu'elle est séquencielle.

  14. #11
    camelia222

    Re : Programmation horloge RTC DS1302

    a ok je comprend, merci de ton aide

  15. #12
    Jack
    Modérateur

    Re : Programmation horloge RTC DS1302

    L'intérêt, c'est qu'il n'est pas nécessaire de demander (gentiment ) quelle heure il est. Il suffit "d'écouter", la fourniture de l'information est permanente, mais répond, bien entendu, à un timing, puisqu'elle est séquencielle
    Il me semble que le mode burst permet d'écrire ou lire une séquence de données à l'aide d'un seul mot de commande.

    C'est intéressant quand on veut transférer plusieurs octets. On évite ainsi d'envoyer un octet de commande avant chaque octet de donnée.

    A+

  16. Publicité
  17. #13
    gienas
    Modérateur

    Re : Programmation horloge RTC DS1302

    Bonjour à tous

    Citation Envoyé par Jack Voir le message
    Il me semble que le mode burst permet d'écrire ou lire une séquence de données à l'aide d'un seul mot de commande ...
    Ce mot de commande est même facultatif.

    Citation Envoyé par Jack Voir le message
    ... C'est intéressant quand on veut transférer plusieurs octets. On évite ainsi d'envoyer un octet de commande avant chaque octet de donnée ...
    Que tu confirmes en effet.

    Il "suffit" que le programme attende l'occurence du premier octet d'une trame, et lise la totalité de cette trame. Cela évite de combiner des valeurs n'appartenant pas à la même trame, et donc de donner des valeurs aléatoires dues à des rafraîchissements successifs, qui, dans le cas d'une horloge, changent, par définition, tout le temps

  18. #14
    camelia222

    Re : Programmation horloge RTC DS1302

    Honnetement, j'ai beaucoup de mal à bien comprendre la datasheet. D'aprés ce que j'ai compris, avant tout il faut envoyer une trame de commande spécifiant si l'on est en mode burst, en lecture, en ecriture en ram en clock.... Ensuite en envoyant une seconde trame on lit ou on ecrit dans les registres selon que l'on soit sur front montant ou descendant de l'horloge... Deja je ne suis pas du tout sur de ce que je raconte et ensuite beaucoup de point reste sombre: a quoi sert la RAM (c'est de la mémoire mais dans le cas présent je ne vois pas son utilité), qu'elle type de données faut il envoyer, comment accede t'on au bon registre ...
    Si quelqu'un peut me donner quelque reponse se serait vraiment trés gentil de sa part

    merci

    a+

  19. #15
    mat64

    Re : Programmation horloge RTC DS1302

    Citation Envoyé par camelia222 Voir le message
    D'aprés ce que j'ai compris, avant tout il faut envoyer une trame de commande spécifiant si l'on est en mode burst, en lecture, en ecriture en ram en clock....
    oui c'est ça

    Citation Envoyé par camelia222 Voir le message
    Ensuite en envoyant une seconde trame on lit ou on ecrit dans les registres selon que l'on soit sur front montant ou descendant de l'horloge...
    oui c'est ça. Si tu regardes les timings sur les schémas pages 12, tu vois que tu doit attendre qq centaines de nanosecondes entre le moment du front de SCLK et le moment ou la donnée est entrée/sortie du DS1302. Vérifie quand même ton temps de cycle pour voir si tu dois rajouter des attentes (en général pas nécéssaire avec un pic mais ça dépends de ta fréquence de travail).

    Citation Envoyé par camelia222 Voir le message
    beaucoup de point reste sombre: a quoi sert la RAM
    à rien c'est de la RAM que tu as à ta disposition pour faire ce que bon te semble. C'est présenté en premièrepage comme "31 x 8 RAM for Scratchpad Data Storage" , tu as un "bloc notes" de 31 octets. Si tu n'en as pas besoin, tu l'utilises pas.

  20. #16
    camelia222

    Re : Programmation horloge RTC DS1302

    je te rermercie mat pour tes réponses c'est super gentil de ta part et je commence a mieux comprendre le principe.

    Encore merci
    biz a+

  21. #17
    gienas
    Modérateur

    Re : Programmation horloge RTC DS1302

    Bonjour camelia222 et tout le groupe

    Citation Envoyé par camelia222 Voir le message
    ... a quoi sert la RAM (c'est de la mémoire mais dans le cas présent je ne vois pas son utilité) ...
    mat64 a tout dit, je n'y reviens pas

    Juste pour préciser qu'historiquement, les RTC ont été créées pour servir d'horloge temps réel sur les ordinateurs, dont les premiers n'étaient pas munis. L'IBM PC devait être remis à l'heure à chaque démarrage. Cette RAM, la seule des PC à être non volatile du fait de la pile obligatoire, servait à conserver la configuration matérielle du BIOS, variable d'une machine à l'autre. Il est possible que ce soit encore d'actualité.

  22. #18
    camelia222

    Re : Programmation horloge RTC DS1302

    Rebonjour, Hé oui encore moi, la relou de service.... Juste pour vous dire que a part afficher des 0 à la place de la date et du temps, j'ai beau essayer mais je n'y arrive pas. Le problème c'est qu'il me faut un programme compatible avec MikroC, j'ai bien tenté de m'inspirer de programmes d'autres compilateur en m'aidant de la datasheet mais bon au final je n'arrive à rien... Voila si défois, quelqu'un pouvai m'aider ou me donner un programme, je me doute que vous avez autre chose a faire mais si défois vous avez ça sous la main et un peu de temps à me consacrer se serait trés gentil, sinon tanpis j'essairai de me debrouiller par moi meme....

    Merci quand meme

    biz a++

  23. Publicité
  24. #19
    mat64

    Re : Programmation horloge RTC DS1302

    Citation Envoyé par camelia222 Voir le message
    Rebonjour, Hé oui encore moi, la relou de service....
    mais non personne a dit ça

    Citation Envoyé par camelia222 Voir le message
    Le problème c'est qu'il me faut un programme compatible avec MikroC, j'ai bien tenté de m'inspirer de programmes d'autres compilateur en m'aidant de la datasheet mais bon au final je n'arrive à rien... Voila si défois, quelqu'un pouvai m'aider ou me donner un programme
    Le premier conseil que je peux te donner : c'est très bien de lire d'autres programmes pour comprendre leur fonctionnement et retenir les "trucs classiques", mais au bout d'un moment il faut arrêter de regarder ailleurs et te concentrer sur ton problème. Je pense que personne ici ne va te donner un programme qui fait ce que tu veux dans le bon langage etc (sauf gros coup de bol), par contre on peut te faire avancer sur ton prog, notamment en t'aiguillant sur la méthode de débug. j'ai l'impression que c'est surtout ça qui te manque...

    Commençons par le début : de quels outils disposes-tu ? Oscillo ? Emulateur ?
    Dernière modification par mat64 ; 18/03/2008 à 16h20. Motif: aurteaugraffe

  25. #20
    camelia222

    Re : Programmation horloge RTC DS1302

    j'ai un oscillo mais bon le principal problème je pense vient deja du fait que je ne sais pas quel type de donner choisir au départ (int, char, tableau ...)

  26. #21
    Jack
    Modérateur

    Re : Programmation horloge RTC DS1302

    Pour envoyer une trame d'octets, je verrais bien:

    unsigned char trame[32];

    puisque si j'ai bien compris, il faut envoyer un octet de commande suivi au maximum par 31 octets.

    A+

  27. #22
    mat64

    Re : Programmation horloge RTC DS1302

    Tu parles des données dans ton prog C pour stocker heures, minutes, etc ? Alors ça c'est vraiment pas un souci... Perso je mettrais un struct, qui regrouperais toutes les données relatives à une date. Avec des char comme type de données. Mais si tu déclare un tableau ou des variables séparées, ça change vraiment pas grand chose...

    La question c'est surtou de rester en BCD (http://fr.wikipedia.org/wiki/Binary_coded_decimal) qui est le format dans le DS1302, ou de convertir entier. Je crois que tu dois faire un affichage, alors c'est peut être plus pratique de rester en BCD. Si tu dois manipuler les dates dans ton prog, il vaut mieux convertir.

  28. #23
    mat64

    Re : Programmation horloge RTC DS1302

    J'ai relu ton premier post, tu ne parles pas d'affichage (j'ai du réver...). Il faut donc savoir sous quel format tu dois stocker sur ta carte SD pour choisir ton format de données interne.

  29. #24
    camelia222

    Re : Programmation horloge RTC DS1302

    Si si j'ai bien un ecran LCD, pour la conversion en BCD il existe une fonction toute faite sur mikroc qui permet la conversion dans les deux sens. Le probléme c'est que cette fonction demande du int en entrée et resort du int ne sortie. Est il possible d'utiliser des int pour le reste du programme ?

  30. Publicité
  31. #25
    Jack
    Modérateur

    Re : Programmation horloge RTC DS1302

    Il existe des fonctions de conversion, par exemple atoi( ) ou itoa( ) pour passer de caractère à int et inversement.

    A+

  32. #26
    mat64

    Re : Programmation horloge RTC DS1302

    Citation Envoyé par camelia222 Voir le message
    Si si j'ai bien un ecran LCD, pour la conversion en BCD il existe une fonction toute faite sur mikroc qui permet la conversion dans les deux sens. Le probléme c'est que cette fonction demande du int en entrée et resort du int ne sortie. Est il possible d'utiliser des int pour le reste du programme ?
    Soit tu travailles en int, soit tu travailles en autre chose et tu cast pour faire tes appels de fonctions.

    cast = convertion de type : si maVariable est un char et maFontion() prends un int en paramètre, il faut faire maFontion( (int)maVariable ) ;

  33. #27
    camelia222

    Re : Programmation horloge RTC DS1302

    oui je les connais. La question que je me pose est de savoir si je dois vraiment passer par du char ou si je peux tout tenter en int. Le problème, c'est que comme la transmission se fait bit a bit, un tableau semble bien indiqué...

  34. #28
    Jack
    Modérateur

    Re : Programmation horloge RTC DS1302

    Tout dépend des fonctions de gestion de la transmission de mikroC. A mon avis elles doivent travailler au niveau de l'octet. Mais il faut absolument se référer à la doc.

    A+

  35. #29
    camelia222

    Re : Programmation horloge RTC DS1302

    Bon ça ne marche toujours pas je pense que le mieux pour que vous m'aidiez c'est qu eje mette mon code alors le voici:

    #include "built_in.h"

    /* RB1 = CLK
    RB2 = CE
    RB3 = DATA */

    int Jour1, Mois1, Annee1, Num_Jour1, Heure1, Min1, Sec1;
    int Jour2, Mois2, Annee2, Num_Jour2, Heure2, Min2, Sec2;
    unsigned char *tc, *tc2;

    void RTC_Init()
    {
    PORTB.RB1 = 0;
    PORTB.RB2 = 0;
    PORTB.RB3 = 0;
    }


    void Ecrire_RTC(int Donnee, int Longueur)
    {

    int i;
    i = 0;

    for(i = 0; i < Longueur; i++)
    {
    if((Donnee & 0x01) == 0)
    {
    PORTB.RB3 = 0;
    }
    else
    {
    PORTB.RB3 = 1;
    }
    Donnee = Donnee >> 1;
    PORTB.RB1 = 1;
    Delay_us(10);
    PORTB.RB1 = 0;
    Delay_us(10);
    }
    }

    int Lire_RTC(int Longueur)
    {
    int i, Donnee;
    i = 0;

    for(i = 0; i < Longueur; i++)
    {
    PORTB.RB1 = 1;

    TRISB = 0x01 ;

    if(PORTB & PORTB.RB3 == 0)
    {
    Donnee = Donnee & 0x7F;
    }
    else
    {
    Donnee = Donnee & 0x80;
    }

    Donnee = Donnee >> 1 ;

    TRISB = 0;

    Delay_us(10);
    PORTB.RB1 = 0;
    Delay_us(10);
    }
    return Donnee;
    TRISB = 0;
    }

    int BCD_Normal(int Donnee_BCD)
    {
    int i, Donnee_Normale;
    i = Donnee_BCD;

    Donnee_BCD =(i>>4)*10;
    Donnee_BCD = Donnee_BCD + (i<<4>>4);

    Donnee_Normale = Donnee_BCD ;

    return Donnee_Normale;
    }

    int Normal_BCD(int Donnee_Normale)
    {
    int nibh;
    int nibl;

    nibh=Donnee_Normale/10;
    nibl=Donnee_Normale-(nibh*10);

    return((nibh<<4)|nibl);
    }

    void Mise_Heure(int Jour, int Mois, int Annee, int Num_Jour, int Heure, int Min, int Sec)
    {
    int Commande ;

    PORTB.RB1 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 134 ;
    Ecrire_RTC(Commande, 8) ;
    Ecrire_RTC(Normal_BCD(Jour), 8) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 136 ;
    Ecrire_RTC(Commande, 8) ;
    Ecrire_RTC(Normal_BCD(Mois), 8) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 140 ;
    Ecrire_RTC(Commande, 8) ;
    Ecrire_RTC(Normal_BCD(Annee), 8) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 138 ;
    Ecrire_RTC(Commande, 8) ;
    Ecrire_RTC(Normal_BCD(Num_Jour ), 8) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 132 ;
    Ecrire_RTC(Commande, 8) ;
    Ecrire_RTC(Normal_BCD(Heure), 8) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 130 ;
    Ecrire_RTC(Commande, 8) ;
    Ecrire_RTC(Normal_BCD(Min), 8) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 128 ;
    Ecrire_RTC(Commande, 8) ;
    Ecrire_RTC(Normal_BCD(Sec), 8) ;
    PORTB.RB2 = 0;
    }

    void Obtenir_Date(void)
    {
    int Commande;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 135 ;
    Ecrire_RTC(Commande, 8) ;
    Jour2 = BCD_Normal(Lire_RTC(8)) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 137 ;
    Ecrire_RTC(Commande, 8) ;
    Mois2 = BCD_Normal(Lire_RTC(8)) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 141 ;
    Ecrire_RTC(Commande, 8) ;
    Annee2 = BCD_Normal(Lire_RTC(8)) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 139 ;
    Ecrire_RTC(Commande, 8) ;
    Num_Jour2 = BCD_Normal(Lire_RTC(8)) ;
    PORTB.RB2 = 0;
    }

    void Obtenir_Heure(void)
    {
    int Commande;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 133 ;
    Ecrire_RTC(Commande, 8) ;
    Heure2 = BCD_Normal(Lire_RTC(8)) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 131 ;
    Ecrire_RTC(Commande, 8) ;
    Min2 = BCD_Normal(Lire_RTC(8)) ;
    PORTB.RB2 = 0;

    PORTB.RB2 = 1;
    Delay_us(10);
    Commande = 129 ;
    Ecrire_RTC(Commande, 8) ;
    Sec2 = BCD_Normal(Lire_RTC(8)) ;
    PORTB.RB2 = 0;
    }




    Pour le conversion je me suis servi de fonction que j'ai trouvé, a priori elles ont l'air de marcher. Mon gros problème viens du fait que en regardant à l'oscillo la patte de data (RB3) ne varie jamais ...

  36. #30
    mat64

    Re : Programmation horloge RTC DS1302

    Citation Envoyé par camelia222 Voir le message
    Mon gros problème viens du fait que en regardant à l'oscillo la patte de data (RB3) ne varie jamais ...
    En effet c'est un problème

    tu as essayé en pas à pas, autour d'une instruction "PORTB.RB3 = 1;" ?

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. serrure codée via RTC
    Par voixdedion dans le forum Électronique
    Réponses: 1
    Dernier message: 12/03/2008, 16h37
  2. Programmation: Création Horloge
    Par jorg1n dans le forum Électronique
    Réponses: 9
    Dernier message: 17/10/2007, 12h12
  3. [Divers] horloge de programmation
    Par andrevm dans le forum Dépannage
    Réponses: 1
    Dernier message: 10/07/2007, 20h29
  4. A la recherche de la RTC idéale
    Par Imei dans le forum Électronique
    Réponses: 5
    Dernier message: 30/06/2007, 10h10
  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.