Horloge a PIC en C
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

Horloge a PIC en C



  1. #1
    invite8d9e8b09

    Horloge a PIC en C


    ------

    Bonjour je cherche a realiser un horloge avec un PIC16F84A, chose faite.
    J'ai juste un soucis pour avoir une vrai seconde.

    Mon quartz : 2,4576 Mhz
    instruction = 1,627604 us
    soit 100ms = 61440 instructions
    prediviseur 256 soit pour 100ms TMR0 = 240

    dites moi si je me trompe.
    maintenant voici un resume de mon code

    Code:
    #pragma origin 4
    interrupt timer(void){
    	int_save_registers;
    	TMR0=16;  // Prechargement du timer a 16 pour avoir un debordement a 240
    	if(m_sec<10){
    		m_sec++;
    	}else{
    		m_sec=0;
    		if(seconde<59){
    			seconde++;
    		}else{
    			seconde=0;
    			if(min<59){
    				min++;
    			}else{
    				min=0;
    				if(heure<23){
    					heure++;
    				}else{
    					heure=0;
    				}
    			}
    		}
    	}
    	write(min,0); write(seconde,1);  //fonction pour ecrire l'heure sur des 7 segments
    	T0IF=0;
    	int_restore_registers;
    }
    
    void main(void) {
    OPTION = 0b.10000111;
    GIE = 1;
    INTE = 1;
    T0IE = 1;
    TMR0 = 16;  // Prechargement du timer a 16 pour avoir un debordement a 240
    for(;;;){}
    }

    -----

  2. #2
    invite8d9e8b09

    Re : Horloge a PIC en C

    J'ai oublie de specifier que je travailler avec MPLAB et CC5X.
    Et que je simulais sur ISIS.

    Et quand je lance ma simulation mon horloge prend du retard sur le timer de ISIS.

    Merci

  3. #3
    Gérard

    Re : Horloge a PIC en C

    Avec ton Qz de 2,4576MHz, l'entrée de TMR0 est de 614400 Hz.
    Avec un prédiviseur de 256, (TMR0 est un compteur par 256) tu auras un débordement du timer après 0,10667s.

  4. #4
    Seb.26

    Re : Horloge a PIC en C

    Pour les RTC, en général on ajoute un quartz horloger à 32KHz comme source d'un des compteur/timer du PIC, c'est nettement plus simple
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

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

    Re : Horloge a PIC en C

    Merci a vous deux...

    Gerard: c'est bien pour ca que je met TMR0 a 16 et non a 0, soit 256-16 = 240
    soit 240*((4/2,4576)*256)=100ms.
    Mais quand je fais la simulation sur ISIS mes secondes sont fausses.

    Seb.26: Ben a vrai dire, c'est que j'ai deja des quartz de 2,4576 alors ce serait con de les jeter.

  7. #6
    Gérard

    Re : Horloge a PIC en C

    Avec ce Qz :
    prescaler à 32, tu laisses déborder TRM0 (255 puis 0),
    dans l'interruptionde TMR0, tu comptes une variables jusqu'à 75.
    quand var = 75 alors s = s + 1 (secondes) et var = 0

    Assez clair ?

  8. #7
    invite8d9e8b09

    Re : Horloge a PIC en C

    C'est vrai que ca marche aussi, je vais essayer tout de suite, et je te tiens au courant.
    Merci

  9. #8
    marc2009

    Re : Horloge a PIC en C

    sinon, tu peux utiliser le timer1 ( sans prédiviseur ) tu auras 10 irq / s ( Merci Gérard, j'arrive maintenant ) en préchargeant la valeur 16 dans tmr1h, tu as "déjà" 16 * 256 = 4096 incrémentations donc il restera 65 536 - 4096 = 61 440 incrémentations avant un débordement et donc avant une interruption, et de plus :

    Fosc / 4 = 2,4576 Mhz . 10^6 / 4 = 614 400 et donc 614 400 / 61 440 = 10 IRQ / s

    ++

    ps : je sais pas si c'est ça que tu cherches ^^

  10. #9
    Gérard

    Re : Horloge a PIC en C

    Citation Envoyé par marc2009 Voir le message
    sinon, tu peux utiliser le timer1 ( sans prédiviseur ) tu auras 10 irq / s ( Merci Gérard, j'arrive maintenant ) en préchargeant la valeur 16 dans tmr1h, tu as "déjà" 16 * 256 = 4096 incrémentations donc il restera 65 536 - 4096 = 61 440 incrémentations avant un débordement et donc avant une interruption, et de plus :

    Fosc / 4 = 2,4576 Mhz . 10^6 / 4 = 614 400 et donc 614 400 / 61 440 = 10 IRQ / s

    ++

    ps : je sais pas si c'est ça que tu cherches ^^

    Pas mal comme explication, je suis fier de toi

    L'ennui, c'est que le 16F84 n'a pas de Timer1, il est obligé de faire avec TMR0 qui ne compte que sur 8 bit.

  11. #10
    marc2009

    Re : Horloge a PIC en C

    Citation Envoyé par Gérard Voir le message
    Pas mal comme explication, je suis fier de toi

    L'ennui, c'est que le 16F84 n'a pas de Timer1, il est obligé de faire avec TMR0 qui ne compte que sur 8 bit.
    ah, désolé j'avais pas regardé le datasheet

    Sinon, Merci

  12. #11
    invite8d9e8b09

    Re : Horloge a PIC en C

    Et dans mon programme, trouvez vous une erreur, car jusque la on est tous d'accord. Et pourtant sur ISIS j'ai un defaut avec mes secondes.
    Merci...

  13. #12
    Gérard

    Re : Horloge a PIC en C

    La vrai vie, c'est le cablage, pas ISIS !

  14. #13
    invite5637435c

    Re : Horloge a PIC en C

    Code:
    if(m_sec<10){
    		m_sec++;
    	}else{
    		m_sec=0;
    		if(seconde<59){
    			seconde++;
    		}else{
    			seconde=0;
    Donc si m_sec = 9 on incrémente avec m_sec++ et m_sec = 10 ce qui pose un problème.
    En faisant if(m_sec<9) m_sec++; le problème disparait.
    @+

Discussions similaires

  1. [PIC]Horloge
    Par invitec35bc9ea dans le forum Électronique
    Réponses: 6
    Dernier message: 07/05/2008, 14h07
  2. horloge et pic
    Par inviteef26fb36 dans le forum Électronique
    Réponses: 2
    Dernier message: 02/05/2007, 20h43
  3. horloge a pic
    Par invitec4aa5843 dans le forum Électronique
    Réponses: 17
    Dernier message: 06/12/2006, 18h59
  4. Horloge et PIC
    Par invitecb425c94 dans le forum Électronique
    Réponses: 14
    Dernier message: 24/05/2006, 03h58
  5. Horloge avec PIC 16F84
    Par invitee45b5732 dans le forum Électronique
    Réponses: 16
    Dernier message: 14/04/2006, 00h32
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...