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

programmation avec MIKROC d'un PIC16F877A



  1. #1
    anouardz

    programmation avec MIKROC d'un PIC16F877A

    Bonjours;
    j'ai un mini projet à faire avec un PIC16f877A et un quartz 4Mhz, et j'ai besoin d'un signal numérique de période T=10us (5us état haut et 5us état bas) qui se répété 100 fois (1ms) ,je programme pour la première avec MIKROC, le problème est lorsque j'écrit le programme:
    int J ;
    void main ()
    {
    TRISA=0x00;
    for(J=0 ; J<100 ; J++)
    {
    PORTA.B2=1;
    delay_us(4);
    PORTA.B2=0;
    }
    }
    sans faire un delay_us(5) de l'état bas, après simulation avec proteus, j'ai eu un état bas d'une durée de 17 us et un état haut d'une durée de 5us, je pense que le problème est dans le nombre de cycles non connus dans MIKROC pour la boucle for, par contre lors de la programmation avec l'assembleur on peut connaitre le nombre du cycles exacte.
    j'ai augmenté la fréquence du quartz, ça me donne pas ce que je cherche.
    j'utilise pas la programmation avec l'assembleur parce que j'aurai un problème dans la taille du programme , j'ai plusieurs signaux à programmer.
    et lorsque j'ai utilisé dans MIKROC:
    void ENVOI_UNms ()
    {
    asm{
    BSF STATUS,RP0
    BCF TRISA,2
    asm BCF STATUS,RP0
    l_cp:
    BSF PORTA,2
    NOP
    NOP
    NOP
    NOP
    BCF PORTA,2
    NOP
    DECFSZ _I,f
    goto l_cp
    };
    }
    et lorsque j'appel plusieurs fois cette fonction (ENVOI_UNms () ) ça donne un autre signal qui a une durée plus que 1ms (100 fois 10us) .

    et maintenant je ne sais pas s' il y a d'autre instructions dans le MIKROC pour réaliser ce genre de signaux (100KHZ)????
    Merci d'avance.

    -----

    Dernière modification par anouardz ; 24/03/2014 à 13h52.

  2. Publicité
  3. #2
    gabuzo

    Re : programmation avec MIKROC d'un PIC16F877A

    Je ne programme pas en C mais il me semble qu'il manque qqchose pour avoir un signal carré.

    Code:
    int J ;
    void main ()
    { 
    TRISA=0x00;
    for(J=0 ; J<100 ; J++)
    {
    PORTA.B2=1;
    delay_us(4);
    PORTA.B2=0;
    delay_us(4);}
    }
    Je suis Charlie

  4. #3
    anouardz

    Re : programmation avec MIKROC d'un PIC16F877A

    mais si je mets delay_us(4) j'aurai un état bas d'une durée de 17+4 = 21us .j'ai pas ajouté cette instruction pour voir le minimum de temps qu'on pourra avoir si on utilise la boucle for.
    merci de m’avoir répondu

  5. #4
    gabuzo

    Re : programmation avec MIKROC d'un PIC16F877A

    Mais si tu mets 4µs à l'état haut et pas de delai à l'état bas ça va pas faire un signal carré !

    De plus si tu veux avoir une période de 10µs il faudrait faire 5µs à 1 et 5µs à 0 et pas 4.
    Je suis Charlie

  6. #5
    paulfjujo

    Re : programmation avec MIKROC d'un PIC16F877A

    bonsoir,


    Meme en C , tu peux rajouter une partie en ASM
    j'avais testé la generation d'un signal de 1Mhz avec un PIC18
    Ce n'est pas evident de garder le rapport cyclique de 1 (50% ON 50%OFF)
    voir test à 1MHz ici

    En prenant un quartz de 20Mhz , tu devrait pouvoir sortir ton signal correctement (en asm)
    20MHz-> cycle de 0.2µS..

    par contre pour generer 100 cycles , il va falloir jouer sur les durees de boucle
    BRA qui consomme 2 cycles + la gestion du compteur decrementation + test x cycles
    à integrer dans le delai global d'un des etats..
    à moins que tu n'aies pas besoin d'un rapport cyclique de 1.
    ou une seule boucle et un XOR pour changer l'etat du bit de sortie
    Dernière modification par paulfjujo ; 24/03/2014 à 18h48.

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

    Re : programmation avec MIKROC d'un PIC16F877A

    j'ai pas bien compris lorsque vous avez dit : une seule boucle et un XOR pour changer l'etat du bit de sortie,
    et ce que c'est en asm ou c??

    merci de m'avoir répondu

  9. Publicité
  10. #7
    spown

    Re : programmation avec MIKROC d'un PIC16F877A

    Exemple de XOR :
    Code:
    int b=0;
    for(...)
    {
       b ^=1;  // b = 1, pour la prochain  itération b = 0 ,,  ainsi de suite
       delay();

Sur le même thème :

Discussions similaires

  1. Besoin d'aide PIC16F877a (programmation)!
    Par muneeb dans le forum Électronique
    Réponses: 1
    Dernier message: 09/05/2012, 16h04
  2. programmation en C avec MikroC
    Par hannibalIII dans le forum Électronique
    Réponses: 4
    Dernier message: 09/03/2012, 22h37
  3. programmation du pic 16F84A avec mikroc
    Par azizinovitch dans le forum Électronique
    Réponses: 3
    Dernier message: 14/03/2010, 16h05
  4. Programmation PIC 16F84A avec MIKROC:AIDE SVP
    Par hissokaaaa dans le forum Électronique
    Réponses: 8
    Dernier message: 09/10/2009, 18h08
  5. programmation des PICs avec mikroc
    Par sam192 dans le forum Logiciel - Software - Open Source
    Réponses: 4
    Dernier message: 27/05/2009, 07h53