probleme programme C(cc5x) sur 16f84A
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

probleme programme C(cc5x) sur 16f84A



  1. #1
    invitee17aeca5

    probleme programme C(cc5x) sur 16f84A


    ------

    Salutations

    Je suis en train de bricoler avec un pic16f84. J'ai un "buzzer" de carte mere sur la sortie 5 port B de mon µC

    J'ai codé une petite fonction sensée envoyer sur cette pin un signal de fréquence f et de durée d :

    Code:
    void sound(uns16 f, uns16 d)
    {
    	int i; 
    	uns16 p = 50000 / f; // une demi période en dizaines de µscondes
    	uns16 d2 = d * 100; // d(ms) --> d2(10µs)
    	uns16 p2 = p * 2;    // p2 = période du signal (µs)
    	uns16 duree = d2 / p2; //nombre de périodes
    	for(i=0; i<=duree; i++)
    	{
    		PORTB.5 = 1;
    		delay_10us(p);	
    		PORTB.5 = 0;	
    		delay_10us(p);		
    	}
    }
    je ne comprends pas pourquoi, mais ma fréquence étant à peu pres bonne, j'ai je ne sais quel probleme avec la durée... elle varie en fonction de ma fréquence, et parfois meme, en dépit de tout autre facteur ...

    J'ai vérifié mon raisonnement quatres ou cinq fois, mais je ne comprends pas pourquoi il ne fais pas ce que je lui demande.

    Sauriez vous maider ?

    merci, ++ Tix.

    -----

  2. #2
    gcortex

    Re : probleme programme C(cc5x) sur 16f84A

    Si ton pic éxécute 4M instructions par seconde,
    et qu'une instruction C prend 4 instructions assembleur,
    çà fait 10 instructions en 10µs
    sans compter les saut + retour de sous routine + sauvegarde des variables + ...

    Travaille plutot en assembleur avec un timer !!


  3. #3
    gcortex

    Re : probleme programme C(cc5x) sur 16f84A

    + restitution du contexte

    Le pic n'a donc pas le temps d'éxecuter la séquence
    (je devance ta remarque )
    Dernière modification par gcortex ; 12/06/2008 à 16h57.

  4. #4
    cherwam07

    Re : probleme programme C(cc5x) sur 16f84A

    Travaille plutot en assembleur avec un timer !!
    Moi je serai même pour qu'on ai à passer un diplome d'assembleur avant d'avoir le droit au C sur un PIC

    Dans cette "simple" fonction, il y a deux divisions, et deux multiplications....en plus sur 16 bits.
    Ca ferait rigoler le plus simple des processeur de PC, mais c'est un enfer pour un PIC (8 bits) qui n'est équipé ni d'un multiplieur (je crois que c'est vrai pour tous les 16f) et encore moins d'un diviseur.

    Clairement ce sont ces quatre opérations que ton PIC en entrain de faire la majorité du temps.

    Il va falloir changer de stratégie....ou de micro

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

    Re : probleme programme C(cc5x) sur 16f84A

    Citation Envoyé par cherwam07 Voir le message
    Dans cette "simple" fonction, il y a deux divisions, et deux multiplications....en plus sur 16 bits.
    Ca ferait rigoler le plus simple des processeur de PC, mais c'est un enfer pour un PIC (8 bits) qui n'est équipé ni d'un multiplieur (je crois que c'est vrai pour tous les 16f) et encore moins d'un diviseur.
    heureusement cette séquence n'a lieu qu'une seule fois, avant de faire le bip


  7. #6
    cherwam07

    Re : probleme programme C(cc5x) sur 16f84A

    Posté par cherwam07 Voir le message
    Dans cette "simple" fonction, il y a deux divisions, et deux multiplications....en plus sur 16 bits.
    Ca ferait rigoler le plus simple des processeur de PC, mais c'est un enfer pour un PIC (8 bits) qui n'est équipé ni d'un multiplieur (je crois que c'est vrai pour tous les 16f) et encore moins d'un diviseur.
    heureusement cette séquence n'a lieu qu'une seule fois, avant de faire le bip

    Hmmm pas faux. Au temps pour moi, ca n'explique donc pas que la durée de l'impulsion soit étrange.
    Alors il faudrait peut-être regarder si les résultats des calculs sont bien codables sur 16 bits.

    Tu peux nous donner des paramètres qui semblent marcher et d'autres qui semblent planter ?

  8. #7
    gcortex

    Re : probleme programme C(cc5x) sur 16f84A

    pour çà vient du fait que le code n'est pas optimisé

  9. #8
    invitee17aeca5

    Re : probleme programme C(cc5x) sur 16f84A

    merci pour vos réponses =)

    bien, écoutez, apparement, le compilateur y ets pour beaucoup...

    au lieu de mettre :

    Code:
    uns16 variable = ...;
    uns16 variable2 = ...;
    uns16 variable3 = ...;
    j'ia tenté ca :


    Code:
    uns16 variable = ..., variable2 = ... variable3 = ...;
    et ca fonctionne à peu pres comme il le faut... (la fréquence est cependant trompée, vous l'avez bien démontrés)

    peu on introduire de l'assembleur dans un code C sur CC5X ?
    si oui, commetn gere t'on un timer en Assembleur ? (j'ai de tres faibles bases en assembleur, encore moisn sur PIC, c'ets pas des kernels sur PC ces betes là -_-')

    P.S: Pourrais-je palier à certaisn de ces problemes d'optimisation en passant à 20Mhz ? Comment pensez vous pouvoir optimiser ce code sinon ?

    merci, ++ Tix.

  10. #9
    mictour

    Re : probleme programme C(cc5x) sur 16f84A

    Bonjour Tix,
    ...Et si tu t'inspirais du fichier DELAY.C dans le dossier cc5xfree ?
    Bonne prog, mictour.

  11. #10
    freepicbasic

    Re : probleme programme C(cc5x) sur 16f84A

    Je connais 2 raisons qui donnerait des temps aléatoires.

    1) soft , les interruptions étant actives des éléments externes quelqu'ils soinent perturbent la base de temps, l'int RBIF par exemple autorisée alors que les pins sont en l'air ferait ce genre de problème.

    2) hard, des capas trop faibles sur le quartz filtre mal les harmoniques , lesquels arrivent a passer parfois dans des "extra-cycles" modifiant la fréquence de l'horloge.

    Quant aux remarques sur les calculs elles sont justifiées et le calcul devrait être fait dans le main() une fois pour toute , surtout si l'on fait une boucle de sound et que l'on ne veut pas faire un son haché.
    Mais le calcul n'explique pas la variation de durée...
    A+, pat

Discussions similaires

  1. [MPLAB et CC5X] Problème lors de la compilation
    Par invite56dfcaf2 dans le forum Électronique
    Réponses: 6
    Dernier message: 07/04/2008, 10h31
  2. programme en PIC 16f84a
    Par invitedc3cc90b dans le forum Électronique
    Réponses: 5
    Dernier message: 24/12/2007, 13h19
  3. Au SECOURS problème 16f84A et PORTA 1
    Par invitec41c2110 dans le forum Électronique
    Réponses: 17
    Dernier message: 15/05/2007, 17h48
  4. Problème Mplab +CC5X
    Par wave68runner dans le forum Électronique
    Réponses: 0
    Dernier message: 31/01/2007, 19h10
  5. Programme et config d'un PIC 16F84A
    Par inviteaa61387f dans le forum Électronique
    Réponses: 9
    Dernier message: 21/01/2007, 20h35
Découvrez nos comparatifs produits sur l'informatique et les technologies.