Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Pic 16f877 Pic basic pro conseil



  1. #1
    ledinblue

    Pic 16f877 Pic basic pro conseil

    Bonjour, je commence l'utilisation de pic basic pro de crownill et des questions me viennent deja à l'esprit.
    Je développe un montage qui me permet de controler une insoleuse. J'utilise un petit lcd et 4 boutons pour la config du montage.Comment est-il possible de décompter les secondes tout en ayant accès au boutton? je m'explique: ma première idée était de faire une sous routine qui décrémenterais une variable et qui ferait une pause de 1seconde, ceci jusqu'a se que la variable soit nul et que le temps soit écoulé. Le problème avec ce genre de sous routine est que mes boutons poussoires ne répondent plus durant cette pause. comment est-il possible de faire cela pour que ca fonctionne? j'ai pensé utiliser un timer et faire un interrupt mais avant de me lancer je vous demande vos conseils!
    merci, bonne journée

    -----


  2. Publicité
  3. #2
    Gérard

    Re : Pic 16f877 Pic basic pro conseil

    Tu as la solution dans ta question.
    Qz de 3,2768MHz, Timer en compteur interne (Freq Qz/4)
    , rechargement à chaque IRQ de TMR1H avec la valeur 128 (080h), tu auras 25 IRQ par seconde.
    Si tu veux une routine écrite en Proton+ (de Crownhill), tu fais signe.
    Gérard.

  4. #3
    RISC

    Re : Pic 16f877 Pic basic pro conseil

    Gérard,

    Utilises-tu une carte existante (lien ?) ou vas-tu faire ta propre carte ?

    Quel outil vas-tu utiliser pour flasher la mémoire de ton PIC et le déboguer ?

    Pour simplifier ton programme, je te conseille d'utiliser un petit quartz 32kHz que tu connectes sur les entrées du timer 1 (broches T1OSO et T1OSI). Avec cette fréquence tu pourras facilement obtenir une base de1 Hz par division+interruption du timer1. De cette manière tu peux utiliser l'horloge interne du PIC16F877 comme horloge principale, à moins que tu aies besoin de précision.
    Pour ton clavier je te conseilles le PORTB qui possède des entrées provoquant directement des interruptions (RB4 à RB7). Attention cependant car RB6 et RB7 sont nécessaires au 'flashage' de la mémoire. Il se peut donc qu'il ne faille pas utiliser ces 2 broches.

    Il existe plein de notes d'applications et d'exemples pour t'aider :
    http://www.microchip.com/stellent/id...prodprefix=pic

    pour le LCD, pleins d'astuces ici :
    http://forum.microchip.com/tt.aspx?forumid=38
    Dernière modification par RISC ; 20/12/2006 à 20h33. Motif: orthographe

  5. #4
    Gérard

    Re : Pic 16f877 Pic basic pro conseil

    ;***************************** ****************************** **
    ; ROUTINE D'INTERRUPTION DU TIMER1
    ;***************************** ****************************** **

    IRQ_TMR1:
    asm

    bcf PIR1,TMR1IF ;flag irq TMR1 = 0
    movlf 10000000b,TMR1H ;080h

    incf ram_inter,f
    cljne 25,ram_inter,RESTORER_CONTEXTE
    clrf ram_inter

    incf sec,f ;seconde + 1
    cljne 60,sec,RESTORER_CONTEXTE
    clrf sec

    incf mn,f
    cljne 60,mn,RESTORER_CONTEXTE
    clrf mn

    incf hr,f
    cljne 24,hr,RESTORER_CONTEXTE
    clrf hr

    endasm

    RESTORER_CONTEXTE:

    context restore

    C'est ma routine d'IRQ (elle tourne)
    Certaines instructions n'existent que chez moi, par ex
    cljne (compare literal jump not egal).
    Ce sont des macros en asm qui me simplifient le prog.

    context restore est une instruction de Proton+
    ram_inter, mn, sec et hr sont des variables.

    Si tu as des questions, il ne faut pas hésiter.
    Gérard.

  6. #5
    ledinblue

    Re : Pic 16f877 Pic basic pro conseil

    Bonsoir,
    merci pour vos réponses!
    je vais partir avec cette solution la alors!
    Pour etre claire, je rappelle que je travaille en basic et que mes routines seront si possible en basic. Le quartz est à 20mhz et je vais connecter un quartz de 3,2768mhz sur les broches 15 et 16 du 16f877 pour l'interruption toutes les secondes.
    Mes configs de registres et mon code sont-ils bon car comme je me l'était dit, rien ne va fonctionner du premier coup.
    Merci pour l'aide!

    Code:
    '*******************************************************************************
    'Config des registres
    '*******************************************************************************
    	
    	INTCON= %11000000
    	PIE1 = %00000001
    	TMR1H =128
    	ON INTERRUPT goto interupt
    
    '*******************************************************************************
    'interrupt
    '*******************************************************************************
    disable
    interupt:
    
    		 Secondes = secondes+1
    resume
    enable
    goto interupt

  7. A voir en vidéo sur Futura
  8. #6
    ledinblue

    Re : Pic 16f877 Pic basic pro conseil

    up, si quelqu'un peux m'aider..
    merci

  9. Publicité
  10. #7
    Gérard

    Re : Pic 16f877 Pic basic pro conseil

    Avec un Qz de 3,2768MHz en entrée de TMR1, un chargement de TMR1H une seule fois avec 128, ça ne fonctionnera pas.
    Il faut une variable en plus vu qu'il y a 25 IRQ par seconde.
    De plus, il faut recharger TMR1H à chaque IRQ.
    Si tu choisis un deuxième Qz en entrée de TMR1, mets un 32,768KHz, il y aura moins de divisions à faire.
    Gérard.

  11. #8
    ledinblue

    Re : Pic 16f877 Pic basic pro conseil

    ok merci pour les conseils, comme je n'avais pas vrmt besoin de précision j'ai utiliser le timer 1 mais avec compteur de cycle internet et ca fonctionne tres bien !
    j'ai encore une petite question est-il possible d'utiliser la fonction button mais pour l'appuie de deux bouttons en meme temps? Je cherche à faire une action l'orsque j'ai deux bouttons pressé au meme moment ! hors la fonction boutton renvoie vers une étiquette sous l'appuis d'un boutton et pas de deux .
    Merci pour le coup de main

  12. #9
    Gérard

    Re : Pic 16f877 Pic basic pro conseil

    Pour contourner le problème :
    if Bouton1 = 1 and bouton2 = 1 then etiquette
    Gérard.

  13. #10
    ledinblue

    Re : Pic 16f877 Pic basic pro conseil

    le problème c'est que j'utilise la fonction button de crownill, avec cette syntaxe ci :
    BUTTON Pin , DownState , Delay , Rate , Workspace , TargetState , Label
    Votre solution n'est possible je pense que si on a affecté le nom boutton sur un des ports du pic. Hors ici j'utilise la fonction button du compilateur.
    Merci pour l'aide

  14. #11
    Gérard

    Re : Pic 16f877 Pic basic pro conseil

    La fonction Button du compilateur ne fonctionne qu'avec une seule entrée, ce que je te propose fonctionne avec 2 boutons appuyés.
    Effectivement, Bouton1 et Bouton2 sont des noms affectés aux broches du PIC.
    Gérard.

Sur le même thème :

Discussions similaires

  1. servo et pic 16f877
    Par ricorico dans le forum Électronique
    Réponses: 7
    Dernier message: 11/10/2009, 08h42
  2. CAN intégré au PIC 16F877
    Par mak42 dans le forum Électronique
    Réponses: 4
    Dernier message: 05/04/2007, 12h30
  3. Réponses: 0
    Dernier message: 18/03/2007, 15h43
  4. programmation en C pic 16F877
    Par Manu_67 dans le forum Électronique
    Réponses: 2
    Dernier message: 08/03/2007, 19h51
  5. Bootloader PIC 16F877
    Par azertylr dans le forum Électronique
    Réponses: 7
    Dernier message: 30/12/2005, 21h30