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

saut de programme avec PIC !!



  1. #1
    arzew

    Smile saut de programme avec PIC !!

    bonsoir,

    lors d'un test sur un programme avec MPLAB mon programme de trouve resété.
    Je ne comprends pas cette action.
    Un rapport avec PCL et PCLATH !
    En regardant les registres je m'apperçois que PCLATH ne change pas de valeur
    (il reste à zéro) .
    Quand TMR0 passe >194 le programme va à l'adresse 0x805 sinon il boucle sur recep8 .
    Comme PCLATH est à zéro le compteur programme va à l'adresse 0x005.
    Décidement je me ferais jamais à ces 2 registres.
    Quelqu'un peut-il m'aider pour m'expliquer ce qu'il se passe afin de corriger
    cette erreur ?
    Ci-dessous le partie de programme incrémentée avec l'adresse des lignes de programme à gauche :


    0x804 recep8 JFIL TMR0,d'194',recep8
    0x805 clrf TMR0
    0x806 call pbit
    0x807 goto recep5

    Merci de votre aide

    Arzew

    -----


  2. Publicité
  3. #2
    freepicbasic

    Re : saut de programme avec PIC !!

    0x800 tu est en PAGE 1 , il faut mettre PCLATH à 0X8
    movlw 8
    movwf PCLATH
    call pbit

    si pbit est en PAGE 1

    sinon tout call goto ou addwf PCL se feront en PAGE 0
    A+, pat

  4. #3
    arzew

    Re : saut de programme avec PIC !!

    bonsoir freepicbasic

    ai du mal à comprendre ce que tu dis.
    0x800 correspond effectivement à PCLATH=8
    Pourquoi page 1 ?
    0x800 ne correspond pas à page 8 ligne d'adresse 00 ?

    a+

  5. #4
    hornet67

    Re : saut de programme avec PIC !!

    salut,

    les pics fonctionnent avec des pages de 2048 octets.
    0000h - 07ffh => page 0
    0800h - 0fffh => page 1
    1000h - 17ffh => page 2
    ...

  6. #5
    DavidDB

    Re : saut de programme avec PIC !!

    Salut,

    Voici une réponse à tes questions posées sur futura et Abc...

    http://forums.futura-sciences.com/post1462349-6.html

    David.

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

    Re : saut de programme avec PIC !!

    Citation Envoyé par DavidDB Voir le message
    Salut,

    Voici une réponse à tes questions posées sur futura et Abc...

    http://forums.futura-sciences.com/post1462349-6.html

    David.

    bonjour

    je suis confus de ma question déjà posée ... il y a peu.
    En plus j'avais imprimé ces réponses pour les avoir le cas échéant !
    C'est compris, je verrouille l'affaire !

    Par contre c'est la première fois que je fais un programme au-delà de l'adresse 0x7FF et je me demande s'il y a une façon simple de naviguer entre les différentes pages avec des goto et call.
    Mon soucis et de me trouver dans une situation où la transformation du programme en amont pourrait engendrer un décalage des adresses et de ce fait certains call et goto ne pouraient plus coïncider entre l'action call/goto et la sous-routine correspondante .
    Sinon c'est un sacrès travail de patience et minutie .

    Merci de votre aide

    Arzew

  9. Publicité
  10. #7
    abracadabra75

    Re : saut de programme avec PIC !!

    Citation Envoyé par arzew Voir le message
    Sinon c'est un sacrès travail de patience et minutie .
    Bonjour.
    Tu mets le doigt sur ce qui fait mal avec les µP....: la programmation.
    ça ne se fait pas tout seul, et surtout pas n' importe comment.
    Bon courage.
    A+
    Il n'y a que dans le dictionnaire où 'réussite' vient avant 'travail'.

  11. #8
    DavidDB

    Re : saut de programme avec PIC !!

    Citation Envoyé par arzew Voir le message
    je me demande s'il y a une façon simple de naviguer entre les différentes pages avec des goto et call.
    Mon soucis et de me trouver dans une situation où la transformation du programme en amont pourrait engendrer un décalage des adresses et de ce fait certains call et goto ne pouraient plus coïncider entre l'action call/goto et la sous-routine correspondante .

    Salut,

    La solution est "simple"...

    En fait, tu figes une partie de tes routines appelées par "call/goto" dans la partie haute de la mémoire avec la directive "ORG" et donc le chargement de PCLATH sera toujours identique pour ces routines même si tu modifies le code par la suite.

    David.

  12. #9
    arzew

    Re : saut de programme avec PIC !!

    bonjour,

    Il faut que se soit obligatoirement dans la partie haute de la memoire ?
    Cela correspond avec ce qu'il se passe quand j'utilise la pacro "CALLX" du cours de Bigonoff.
    Je joins le programme pour mieux comprendre.
    En fait quand je met le texte à lire en ORG 0x800 tout se passe bien.
    Mais quand je le déplace en ORG 0xE55 le CALLX est effectué mais le retour ne se fait pas à l'appel de la fonction !
    Je n'ai reçu aucune explication pour ce problème .
    Si quelqu'un en a une ...

    Cordialement

    Arzew

  13. #10
    freepicbasic

    Re : saut de programme avec PIC !!

    pas de programme joint ...

    Tiens ça me rappelle une discussion avec BigOnOff au sujet de ses CallX.

    Il faut vraiment comprendre le fonctionnement, à partir du moment ou on fait des callX gotoX , il faut en faire partout !

    On peut considérer qu'il existe 2 types de saut les courts (intra segment ou Page) les longs (extra segment).
    Comme l'adresse haute est dans PCLATH et n'est modifier que par une instruction MOV , il faut charger PCLATH devant chaque saut.
    Car l'instruction return , retourne bien a l'adresse appelante mais ne change pas le PCLATH , ainsi si le prochain goto, call , action PCL sera fait par rapport au PCLATH .
    Code:
    loop:
    Movlw 8
    Movwf PCLATH
    call Pbit
    clrf PCLATH
    Btfss STATUS,Z
    goto loop
    A+, pat

  14. #11
    DavidDB

    Re : saut de programme avec PIC !!

    Salut,

    Je n'ai pas encore utilisé la solution proposée par Bigonoff des callX et gotoX, car je la trouve trop contraignante une fois que l'on a assimilé la contrainte de PCLATH...

    Il faut que se soit obligatoirement dans la partie haute de la memoire ?
    Non, pas spécialement, mais pour être tranquille avec l'overwritting, c'est le plus simple à gérer.
    Une fois que tu utilises la directive ORG pour placer tes routines, tu connais exactement où sont placées tes routines et donc, le chargement de PCLATH ne bouge plus avec les modifs dans le programme...

    David.

  15. #12
    arzew

    Re : saut de programme avec PIC !!

    bonsoir,

    oui j'ai oublié de poster la partie de programme ... la voilà jointe maintenant.
    Je commence à comprendre le fonctionnement de ces pages et leur adressage.
    Faire et refaire, cela fait maintenant 2 jours que j'y suis .
    D'accord avec vous pour vos informations ; merci.
    Pour DavidDB:
    Il faut vraiment que les routines que l'on place sur une autre page (en l'occurence pour moi page1 car je programme, ou essai de programmer, un 16F648A) ne soient pas succeptibles d'empiéter sur une autre valeur de PCLATH.

    Je m'explique : Dans mon exemple joint si ma routine (DT ".......") est plaçée en ORG 0xEFE et tient jusqu'à 0xF0F, au passage de 0xEFF à 0xF00 le call ne sera pas correcte car je n'ai pas ou je ne connais pas le moyen de changer automatiquement PCLATH (passer de 0xE.. à 0xF..), le CALLX ne fonctionne pas

    Apparement cette instruction devrait fonctionner si j'en crois le cours et les discussions que j'ai pu voir ...

    (le fichier que je joins ne s'ouvre pas !!!! mais je pense que vous avez compris mon idée)

    A+
    Fichiers attachés Fichiers attachés
    Dernière modification par arzew ; 07/03/2008 à 20h30.

  16. Publicité
  17. #13
    DavidDB

    Re : saut de programme avec PIC !!

    Salut,

    Dans mon exemple joint si ma routine (DT ".......") est plaçée en ORG 0xEFE et tient jusqu'à 0xF0F, au passage de 0xEFF à 0xF00 le call ne sera pas correcte car je n'ai pas ou je ne connais pas le moyen de changer automatiquement PCLATH (passer de 0xE.. à 0xF..)
    D'un point de vue purement théorique ton raisonnement est juste. Ce type de saut de page est difficilement gérable (mais faisable), mais c'est oublier le bon sens du programmeur...

    Pour un tableau, il est plus que judicieux de toujours le débuter sur un alignement de page (ou première adresse de cette page, pour être plus clair) afin d'éviter que le tableau se trouve sur deux pages.

    Ensuite, afin de voir si ton tableau ne déborde pas de la page, après assemblage du programme, tu peux vérifier l'adresse de fin de ton tableau dans la fenêtre "Program memory" de MPLAB.

    Maintenant, si ton tableau fait plus de 256 données, sur le site d'ABC, Freepicbasic à donné un exemple simple à Gilles afin de les gérer.

    Donc, pour résumer, avoir du bon sens est la meilleur méthode pour gérer ce satané PCLATH qui te pose tant de problèmes.

    David.

  18. #14
    arzew

    Re : saut de programme avec PIC !!

    bonjour DavidDB

    C'est vrai que regarder l'adresse de fin d'une routine ou de tableau, c'est une possibilité que j'ai mise à contribution.
    En fin de compte c'est une logique ... quand on ne connait pas autre chose.
    Mais au delà de 255 adresses on se fait "avoir", et le fait de ne pas trouver de solution(s) est frustrant.
    Être libre de programmer est tout ce qu'un "programmeur", même néophite, désire.
    Dommage de ne pas comprendre entièrement le travail de Bigonoff afin de découvrir ce qu'il ne va pas quand CALLX est associé à mon programme .
    Je vais tâcher de trouver l'explication de Freepicbasic comme tu me le dis.

    A+

  19. #15
    freepicbasic

    Re : saut de programme avec PIC !!

    A+, pat

  20. #16
    DavidDB

    Re : saut de programme avec PIC !!

    Salut,

    Merci à Freepicbasic d'avoir ajouté le lien...

    Dommage de ne pas comprendre entièrement le travail de Bigonoff afin de découvrir ce qu'il ne va pas quand CALLX est associé à mon programme .
    Je vais tâcher de trouver l'explication de Freepicbasic comme tu me le dis.
    La réponse est ultrasimple, Bigonoff a crée les deux macros pour diriger le programme vers des routines, et ne concerne pas les tableaux.

    Pour un tableau, il ne faut pas laisser la possibilité à l'assembleur de choisir à ta place l'adresse de début d'écriture...
    Le bon sens impose au programmeur d'utiliser la directive ORG afin de fixer le tableau à une adresse connue.

    Ensuite, si tes tableaux concerne du texte LCD (ce qui semble être ton cas), il te suffit de diviser tes textes en fonction des pages afin de connaître avec précision leurs emplacements. Ainsi quand tu ajoutes un texte, tu connais exactement la valeur à précharger dans PCLATH afin d'effectuer les sauts.

    En fin de compte c'est une logique ... quand on ne connait pas autre chose.
    C'est la solution que j'utilise quand je génère des tableaux automatiquement par les directives MPASM dont je ne me préoccupe pas de la grandeur. Et qui me permet par ailleurs de vérifier les calculs qui ont été effectués...

    David.

  21. #17
    arzew

    Re : saut de programme avec PIC !!

    bonsoir,

    Merci à DavidDB et freepicbasic, c'est réconfortant de se sentir aidé.
    Pour DavidDB :
    Ta solution est originale et somme toute très logique.
    La logique est parfois à portée mais le chemin de la difficulté est le plus souvent pris !
    Je retiens ta façon de faire.

    Pour freepicbasic : merci pour l'adresse de ton post, je le lirais avec attention ... peut être aurais-je quelques questions ...
    J'ai déjà vu ce procédé de création de sons en assembleur avec un logiciel.
    Il me semble que l'on recopiait un son en forme musicale et le logiciel le codait sous forme d'assembleur pour PIC .
    C'est peut-être de ça dont tu parles :

    http://www.romanblack.com/picsound.htm

    Je me demande ce que l'on sait pas faire !

    A+

  22. #18
    freepicbasic

    Re : saut de programme avec PIC !!

    dans le post c'était bien picsound (modulation 1 bit) , et ça fonctionne bien !

    Personnellement c'était pour faire au moins une Font de caractères, donc l'adresse devait être calculée ,d'ou ma méthode.

    ps) il y avait une différence de syntaxe avec mon assembleur perso et celui de MPLAB au sujet des adresses haute et basse, enfin, juste un détails.
    L'exemple de gilles était identique...
    A+, pat

  23. Publicité
  24. #19
    arzew

    Re : saut de programme avec PIC !!

    Citation Envoyé par freepicbasic Voir le message
    dans le post c'était bien picsound (modulation 1 bit) , et ça fonctionne bien !

    Personnellement c'était pour faire au moins une Font de caractères, donc l'adresse devait être calculée ,d'ou ma méthode.

    ps) il y avait une différence de syntaxe avec mon assembleur perso et celui de MPLAB au sujet des adresses haute et basse, enfin, juste un détails.
    L'exemple de gilles était identique...

    bonsoir,

    je profite de ta discussion sur le "picsound", jusqu'à présent je ne m'en pas trop occupé mais j'imaginais remplacer l'encodeur TCM5089 par le résultat des conversions faites par ce logiciel.
    Je sais que le pic possède le PWM mais pour ma part c'est assez complexe à comprendre.
    J'ai déjà utilisé ce PWM (en MLI) pour effectuer un allumage/extinction progressif d'intérieur de voiture, mais là il n'y avait qu'une seule fréquence.
    Pour en revenir au picsound et après avoir effectué quelques essais c'est vrai que l'on peut remplacer le TCM5089 par le résultat du picsound.
    Des trames de 100ms (et même 50ms) suffisent pour composer un numéro de téléphone et avoir l'abonné .
    Ces trames font 140 octets, par 10 cela fait 1400 octets c'est sûr qu'il faut de la mémoire programme derrière !
    As-tu déjà effectué ce type de montage, est-il fiable car pour ma part je ne l'ai exécuté seulement par l'intermédiaire de mes hautparleurs de PC qui crachait les codes téléphoniques (le son de picsound n'est pas très fameux mais ça marche)

    a+

  25. #20
    freepicbasic

    Re : saut de programme avec PIC !!

    ci joint enregistrement par le micro du PC d'un son Picsound, pourjuger de la qualité, ça craque un peu mais c'est très intelligible.
    Pour faire du DTMF ça devrait fonctionner à condition de conserver la bonne fréquence.
    Fichiers attachés Fichiers attachés
    A+, pat

  26. #21
    arzew

    Re : saut de programme avec PIC !!

    salut

    en effet c'est convincant.
    Pour ce qui est du DTMF on a besoin de 2 logiciels, Cool Edit et PicSound .
    Le premier met en forme le DTMF le second ... tu sais.
    A ce niveau on a strictement rien à faire ... si ! cliquer avec la souris .

    a+

    arzew

  27. #22
    CED_TV_JVC

    Re : saut de programme avec PIC !!

    Bonjour à tous

    pouvez vous me dire si mon problème peut correspondre au votre??

    Un grand merci

    http://forums.futura-sciences.com/sh...16#post1761416

Discussions similaires

  1. concatener sous Excel avec saut constant de case
    Par kokoro5000 dans le forum Logiciel - Software - Open Source
    Réponses: 59
    Dernier message: 22/02/2008, 02h42
  2. programme en PIC 16f84a
    Par lord_of_romns dans le forum Électronique
    Réponses: 5
    Dernier message: 24/12/2007, 13h19
  3. demarrage d'un programme PIC
    Par alainav1 dans le forum Électronique
    Réponses: 38
    Dernier message: 18/03/2007, 18h05
  4. Programme Pic Basic, valable ou non ?
    Par Fludo dans le forum Électronique
    Réponses: 3
    Dernier message: 15/03/2007, 17h19
  5. Programme En Pic
    Par MEMOR dans le forum Électronique
    Réponses: 6
    Dernier message: 13/05/2006, 11h01