PIC18F4520 - probleme lors d'un changement de frequence
Répondre à la discussion
Affichage des résultats 1 à 27 sur 27

PIC18F4520 - probleme lors d'un changement de frequence



  1. #1
    mistral83

    PIC18F4520 - probleme lors d'un changement de frequence


    ------

    Bonjour à tous.

    Ayant vu beaucoup de post au sujet de la programmation de PIC. Je n'arrive toujours pas à trouver une solution à mon problème. Je viens donc vers vous pour essayer d'obtenir une réponse à mon problème.

    Auto didacte, je programme en MikroPascal sur une EasyPic 6 de Mikroelectronika.

    je me suis fais un petit programme que j'ai intitule "Preampli", en effet fana de HIFI DIY je me suis fais un ensemble triphonique et le but de mon "Preampli" est de pouvoir gérer tout ce petit monde d'amplis et de sources.

    Description du "preampli" :
    6 entrées selectionables, sortie configurable en 1 voie, 2 voies (Grave - Medium/Aigu) ou 3 voies (Grave - Medium - Aigu)
    - le coeur, un PIC 18F4520 cadensé avec un quartz à 4Mhz
    - Affichage : ecran VFD ITRON 160*32
    - Gestion du volume : encodeur rotatif et PGA 2310
    - 2 series de BP, la 1er (6 BP)pour choisir la source à ecouter, la seconde (5 Bp) pour la configuration
    - 3 MCP42050 pour l'equilibrage des 3 sorties (Grave/medium/aigu)
    - des relais pour les sources et la configuration de la/des sorties
    et une telecommande pour le tout...

    Malgrés quelques probleme en cour d'elaboration celui ci tourne. mais je m'aperçois que certaine fonction sont lentes, transfer SPI, donc je me suis dis je vais passer la frequence en "HSPLL" ce qui me cadenserais mon Pic à 16Mhz (quartz 4Mhz * 4), modification du fusible de config en consequence...
    mais plus rien ne fonctionne correctement...
    l'affichage est comme fous...

    si vous avez une petite idée de mon soucis.
    merci beaucoup

    -----

  2. #2
    Jack
    Modérateur

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    Il faut lire les règles participatives avant de poster. Dans celles du forum info programmation, on trouve ceci:
    http://forums.futura-sciences.com/programmation-langages-algorithmique/441632-regles-participatives-nouveau-forum.html

    et ceci:
    http://forums.futura-sciences.com/pr...ces-forum.html


    De plus je rappelle qu'il est inutile de poster 2 fois la même demande. Un peu de patience!

    Merci d'en tenir compte à l'avenir.
    Je transfère donc en électronique

  3. #3
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    bonjour
    desolé pour l'erreur de forum...
    mais pour le double post, là je ne sais pas ce qui c'est passé...

  4. #4
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    Salut,

    la première chose à vérifier est que ton PIC fonctionne à la bonne fréquence, si tu as un oscillo sous le coude. Il y a une raison pour laquelle tu utilises un quartz plutot que l'horloge interne ?
    Si j'ai bien compris, ton quartz est à 4MHz. Tu as une résistance série apr hasard sur ton quartz ?

    Je te propose de faire un petit test :

    boucle:

    LATBbits.LATB5 = 0;
    _asm
    NOP
    NOP //4*NOP + CLEAR RB5 = 5 cycles
    NOP
    NOP
    _endasm
    LATBbits.LATB5 = 1;
    _asm
    NOP //2*NOP + SET RB5 + GOTO = 5 cycles
    NOP
    _endasm
    goto boucle; //10 cycles, soit 40 temps d'horloge. Mesure de la période du signal, a diviser par 40 pour avoir la periode de l'oscillateur
    Tu peux le faire sur n'importe qu'elle pin d'ES, ne pas oublier le registre TRIS et de mettre la PIN en mode digital (ADCON.PCFG) et de désactiver les éventuelles fonctions ECCP,MSSP etc.

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

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    SLT

    Dommage mon oscillo est en panne et je trouve personne pour me le reparer...

    Non pas de resistance serie avec le quartz, juste deux capa de 27pF.



    En fait mon prog fonctionne bien à 4Mhz, je voulais juste multiplie la frequence par 4 via la fonction HSPLL du PIC. ET là à 16Mhz, toute les fonctions de permutations de relais, la telecommade ont l'air de fonctionner, c'est juste l'affichage qui ne fonctionne pas, il affiche n'importe quoi...

  7. #6
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    ok, tu te sers d'une bibliothèque pour utiliser ton écran ?

    est ce que dans ton code tu as un truc du genre :
    #define CLOCK_FREQ 4000000 ?

  8. #7
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    non je n'utilise pas de bibliotheque, juste un bout de prog que j'ai ecris... et que je suis en train de revoir...

    pas de #define dans mon code...
    Dernière modification par mistral83 ; 06/03/2013 à 08h57.

  9. #8
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    Dans ce cas le problème vient surement des timings sur le front E, allonge un peu l'attente.

    Si pas d'améliorations, modifie les autres delais aussi.

    edit: Il a l'air cool ton écran, tu l'as payé combien ?

  10. #9
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    pour l'ecran (ref : GU160x32F-7806A/C),
    je l'ai payé ~100€...
    je l'ai trouvé ici http://www.noritake-itron.com/pages/,
    il existe ici http://fr.farnell.com/noritake-itron...vdc/dp/1684357 , mais jamais dispo...


    pour les timmings, c'etait ce que j'etais en train de verifier...
    d'apres la doc, ils sont tous en nanoseconde je les avait deja mis en microseconde, je fais des essais en doublant, triplant les temps... a voir...

  11. #10
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    tes délais tu les mets comment en place ?

  12. #11
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    comment ça... comprends pas...

  13. #12
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    je crois que j'ai trouvé...
    cela ne m'arrange pas trop, il faut que je j'utilise une patte de plus pour l'ecran.
    en effet, au lieu de mettre un delais à la fin de l'envoie de l'instruction sur l'ecran, j'utilise la broche "busy" (pin3) et j'attends quelle soit à 0 pour poursuivre...
    et pour l'instant à 16Mhz cela fonctionne, j'essaye à 32...

  14. #13
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    Eh bien pour envoyer un ordre à l'écran tu écris sur le port correspondant (disons que tu es en 8bits).

    Donc tu fais LATA = ton_ordre;
    puis E = 1;
    delais();
    E = 0;
    (je sais plus si ici aussi il faut un délais)

    tu le fais comment ton delais(); ?

  15. #14
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    euh!!! oui, c'est à peu prés ça..
    je suis en 4 bits donc 2 paquets envoyés...

    "Data_" c'est ma commande


    Code:
    // insert high data into port
      VFDPORT^.D4 :=  Data_.4;
      VFDPORT^.D5 :=  Data_.5;
      VFDPORT^.D6 :=  Data_.6;
      VFDPORT^.D7 :=  Data_.7;
    
      Delay_us(2);
      VFDPORT^.E := 1;         // E à "1" pendant 2 microsecs
      Delay_us(2);
      VFDPORT^.E := 0;
      Delay_us(2);
    
      // insert low data into port
      VFDPORT^.D4 :=  Data_.0;
      VFDPORT^.D5 :=  Data_.1;
      VFDPORT^.D6 :=  Data_.2;
      VFDPORT^.D7 :=  Data_.3;
    
      Delay_us(2);
      VFDPORT^.E := 1;         // E à "1" pendant 2 microsecs
      Delay_us(2);
      VFDPORT^.E := 0;
      Delay_us(2);
    
      while PORTD.0  do
      begin
         // on attend...
      end
    je viens juste de rajouter la boucle "while" à la fin
    sur l'entrée D.0 j'y ai mis la pin "busy" de l'ecran..

    et là pour l'instant tout à l'air d'etre correcte, je croise les doigts...
    cela faisait presque 15 jours que je buttais sur ce point...

  16. #15
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    Ta fonction Delay_us() ne PEUT PAS fonctionner si tu ne lui dis pas à quelle vitesse fonctionne ton microcontroleur !

    Va voir à l'implémentation de ta fonction Delay_us() pour voir ce qu'elle contient.

    Chez moi je vois ca:

    #define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0)))

    Comme tu peux le voir, si _XTAL_FREQ n'est pas défini, cette fonction ne peut pas aboutir au bon résultat.

    Donc regarde (ou poste ici) le contenu de la fonction delay_us() pour qu'on puisse modifier ca.

    Le problème avec ton while, c'est que si l'écran présente une malfonction pour une raison ou une autre, ton programme restera bloqué, et on ne veut pas ca.

  17. #16
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    j'utilise une routine de "mikroPascal"

    extrai de l'aide...
    Delay_us
    Prototype procedure Delay_us(time_in_us: const dword);
    Returns Nothing.
    Description Creates a software delay in duration of time_in_us microseconds (a constant). Range of applicable constants depends on the oscillator frequency.
    This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit.
    Requires Nothing.
    Example Delay_us(1000); // One millisecond pause


    Delay_ms
    Prototype procedure Delay_ms(time_in_ms: const dword);
    Returns Nothing.
    Description Creates a software delay in duration of time_in_ms milliseconds (a constant). Range of applicable constants depends on the oscillator frequency.
    This is an “inline” routine; code is generated in the place of the call, so the call doesn’t count against the nested call limit.
    Requires Nothing.
    Example Delay_ms(1000); // One second pause
    et je ne sais pas ou c'est dans dans le programme...
    Dernière modification par mistral83 ; 06/03/2013 à 13h24.

  18. #17
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    dans ton IDE, tu peux pas faire un clique droit sur la fonction pour voir ou elle est implémentée ?
    tu fais un include de fichiers peut etre ?

    Je te propose de coder toi meme tes fonctions delay, en leur donnant un autre nom bien sur, au moins histoire de faire des tests...

  19. #18
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    bon maintenant j'ai un affichage plus ou moins aleatoire au demarage...
    je pense que cela viens de mon initialisation, au demarage l'ecran est initialisé en fonctionnement 8 bits et moi je le fais fonctionner en 4 bits.
    je cherche de ce coté là...

  20. #19
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    les délais les délais...

  21. #20
    mistral83

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    et voila, je touche du bois et de la peau de singe...
    tout fonctionne correctement...


    dans ma procedur d'initialisation de l'ecran, j'ai augmenté la tempo avant le passage en mode 4 bits...
    je pense qu'il lui faut un peu de temps à l'allumage avant tout envoie d'instruction...
    Dernière modification par mistral83 ; 07/03/2013 à 07h56.

  22. #21
    terriblement

    Re : PIC18F4520 - probleme lors d'un changementde frequence

    oui c'est écris dans la datasheet de l'écran, c'est ce que je me tue à te dire, que ce soit pour l'initialisation ou les envoies de front, il faut respecter les delais, qui ne le seront pas si tu t'obstines à utiliser tes fonctions delay_us() qui sont définies on ne sait trop comment !

  23. #22
    mistral83

    Re : PIC18F4520 - probleme lors d'un changement de frequence

    ok je suis d'accord, mais je suppose que le mec qui a écrit le compileur n'est pas un niait comme moi... et que les routines qu'il a implementées sont correctement ecrites...

    j'ai essayer de mesurer des "delay_ms" de 1000, 5000 et 10000 se qui théoriquement donne 1, 5 et 10 secondes, bah avec mon pauvre chrono et mes gros doigts boudinés je ne suis pas loin de la veritée.

    toutefois je veux bien essayer de créer ma propre routine "delay" mais là il va me faloir un petit cout de main...

  24. #23
    Jack
    Modérateur

    Re : PIC18F4520 - probleme lors d'un changement de frequence

    mais je suppose que le mec qui a écrit le compileur n'est pas un niait comme moi... et que les routines qu'il a implementées sont correctement ecrites...
    Il n'est tout de même pas fort au point de connaitre la fréquence du quartz que tu as décidé de connecter ...

  25. #24
    mistral83

    Re : PIC18F4520 - probleme lors d'un changement de frequence

    Bonjour à tous...

    j'essaye de faire ma procedure "delay"
    donc, je reprends ce que Teriblement à poster : #define __delay_us(x) _delay((unsigned long)((x)*(_XTAL_FREQ/4000000.0))) et j'essaye de comprendre :
    - _XTAL_FREQ/4000000.0 : çela me permets d'avoir le nombre d'operation en 1 seconde
    - (x) : cela doit etre le temps que l'on souhaite
    - unsigned long : qu'est ce que c'est? un coef? je le trouve comment?

  26. #25
    terriblement

    Re : PIC18F4520 - probleme lors d'un changement de frequence

    En fait quand tu feras :

    __delay_us(10); //attendre 10 µs

    cela va appeler cette fonction :

    _delay((unsigned long)((10)*(_XTAL_FREQ/4000000.0)));
    mais je ne trouve pas comment la fonction _delay() est faite !

    pourquoi diviser par 4000000 ?
    eh bienm d'abord il faut savoir qu'avec l'architecture du PIC que tu as, il peut effectuer une instruction toutes les 4 périodes d'horloge, donc en ayant un micro cadencé à 32MHz, il sera capable de traiter 8 millions d'instructions par secondes. tu divises encore par 1000000 et tu obtiens le nombre d'instructions par micro secondes.

    donc 10 * 32000000 / 4000000 = 80 instructions

    Dans ton cas :

    10 * 16000000/4000000 = 40 insctructions à attendre.

    par exemple la fonction delay pourrait s'ecrire

    do
    {
    NOP()
    }while(i++ i<(nombre_instructions))

    mais là encore ce n'est pas tout à fait juste, vu que la boucle do while "consomme" des insctructions. Je ne saurais te dire comment faire ca proprement...

  27. #26
    mistral83

    Re : PIC18F4520 - probleme lors d'un changement de frequence

    ok

    donc en resumé si je m'embete à faire une tel procedure, j'ai aucune certitude quelle soit meilleure, plus precise, que la routine de mon compileur...

  28. #27
    terriblement

    Re : PIC18F4520 - probleme lors d'un changement de frequence

    Si, il y a bien une méthode pour faire ca avec précision, ce que je t'ai donné c'est juste un brouillon.

    Le problème avec la routine fournie par ton compilateur, c'est qu'on ne sait pas comment elle fonctionne. On ne connait ni ses valeurs limites, ni avec quelle fréquence de processeur elle à été pensée. De ce fait, appeler la fonction delay_us(10) pourrait très bien faire attendre 1µs comme 100µs !

Discussions similaires

  1. Récupérer un système Windows lors d'un changement de disque dur
    Par invitecfbf3d81 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 25/12/2009, 20h11
  2. Réponses: 10
    Dernier message: 14/12/2008, 22h28
  3. Palier de température lors d'un changement d'état
    Par invite635a16d2 dans le forum Chimie
    Réponses: 2
    Dernier message: 17/02/2008, 21h58
  4. Bornes lors d'un changement de variables
    Par prgasp77 dans le forum Mathématiques du supérieur
    Réponses: 6
    Dernier message: 04/11/2007, 22h10
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...