Bonjour, cliquez-ici pour vous inscrire et participer au forum.
  • Login:



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

probleme programme C(cc5x) sur 16f84A

  1. Tix

    Date d'inscription
    octobre 2004
    Localisation
    france
    Messages
    1 515

    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.
     


    • Publicité



  2. gcortex

    Date d'inscription
    juin 2006
    Localisation
    59
    Âge
    36
    Messages
    12 063

    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 !!

    Les difficultés sont moindres quand elles sont réparties.
     

  3. gcortex

    Date d'inscription
    juin 2006
    Localisation
    59
    Âge
    36
    Messages
    12 063

    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.
    Les difficultés sont moindres quand elles sont réparties.
     

  4. cherwam07

    Date d'inscription
    mars 2006
    Localisation
    Ardeche
    Âge
    29
    Messages
    368

    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. gcortex

    Date d'inscription
    juin 2006
    Localisation
    59
    Âge
    36
    Messages
    12 063

    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

    Les difficultés sont moindres quand elles sont réparties.
     


    • Publicité



  6. cherwam07

    Date d'inscription
    mars 2006
    Localisation
    Ardeche
    Âge
    29
    Messages
    368

    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 ?
     

  7. gcortex

    Date d'inscription
    juin 2006
    Localisation
    59
    Âge
    36
    Messages
    12 063

    Re : probleme programme C(cc5x) sur 16f84A

    pour çà vient du fait que le code n'est pas optimisé
    Les difficultés sont moindres quand elles sont réparties.
     

  8. Tix

    Date d'inscription
    octobre 2004
    Localisation
    france
    Messages
    1 515

    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.
     

  9. mictour

    Date d'inscription
    septembre 2005
    Localisation
    touraine
    Messages
    136

    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.
     

  10. freepicbasic

    Date d'inscription
    août 2006
    Localisation
    France
    Âge
    57
    Messages
    3 205

    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
     


    • Publicité




Poursuivez votre recherche :




Sur le même thème :




 

Discussions similaires

  1. [MPLAB et CC5X] Problème lors de la compilation
    Par Mazman dans le forum Électronique
    Réponses: 6
    Dernier message: 07/04/2008, 10h31
  2. programme en PIC 16f84a
    Par lord_of_romns dans le forum Électronique
    Réponses: 5
    Dernier message: 24/12/2007, 13h19
  3. Au SECOURS problème 16f84A et PORTA 1
    Par oxedgar 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 dam12 dans le forum Électronique
    Réponses: 9
    Dernier message: 21/01/2007, 20h35


Les tags pour cette discussion