sortir d'une interruption sans retfie sur un 18f252...
Répondre à la discussion
Affichage des résultats 1 à 25 sur 25

sortir d'une interruption sans retfie sur un 18f252...



  1. #1
    inviteb1cc1e07

    sortir d'une interruption sans retfie sur un 18f252...


    ------

    Bonjour à tous,
    je suis en train de bricoler un pic 18f252, et je sèche sur un point....Je veux faire un gbf avec mon pic et plusieurs formes d'onde
    je voudrai faire de la sorte: mon pic démarre sur une boucle produisant un signal sinus et elle tourne sur elle même...je veux changer de forme d'onde; je suis donc obliger de l'interrompre avec une interruption (là ça va....) "int0"(-),"int1"(+),"int2"(ok) sont reliés à des B.P. J'entre dans mon interruption traite l'info des B.P, j'efface les flags correspondant et, je veux sortir de mon interruption(là ça va....) MAIS pas par retfie car il m'enverrai là ou j'étais avant... sur la boucle "sinus". Maintenant je voudrais du triangle (une autre boucle dans mon programme). Donc pas de retfie....
    Je me suis dit puisque lors de l'interruption le pic a copié l'adresse de départ prévoyant son retour qui m'interresse pas je vais le dépilé juste avant de sortir de mon interruption et sortir par un "goto" vers ma nouvelle boucle.....! il y va...! (là ça va....)mais après il ne veut plus en sortir, les B.P ne déclenchent plus d'interruption (là ça va....pas!).Pourtant j'ai reseté mes flags "int0, int1,int2" dépilé l'interruption (avec "pop") j'ai allumé les interruptions lors des initialisations (d'ailleurs elles fonctionnent le premier coup)et je n'y touche plus après (sauf les flags bien sûre )

    MA QUESTION: Comment aller dans une autre boucle en gardant ses interruptions actives? j'utilise MPLAB et un pickit2.
    enfin au plus simple mon "goto" me plaisait bien.

    actuellement comme c'est un projet long et ambitieux, je simule en écrivant des mots sur un LCD dans des boucles qui tournent sur elles même
    de cette façon je vois ou il est passé.

    -----

  2. #2
    Seb.26

    Re : sortir d'une interruption sans retfie sur un 18f252...

    plutôt que de boucler dans une fonction qui fait un sinus, tu boucles dans une fonction qui fait une forme qui dépend de la valeur d'une variable ... variable que tu modifies dans ton IT ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    bonjour et merci de cette réponse rapide,
    En effet mais je suis donc toujours obligé de lire cette variable et donc de perdre du temps qui diminuera la fréquence de sortie
    c'est pour cette raison que j'avais écarté cette méthode.
    je voudrai des boucles sans fin modifiable (fréquence, forme,.... )que par interruption et ensuite en effet charger des parametres et lançer une boucle sans fin.
    mon soucis c'est que les B.P marchent qu'une fois...? je suis dans une boucle, j'en change, et après impossible de changer....

  4. #4
    invite830075ec

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Avant d'exécuter une routine d'interruption, le pic commence par désactiver le bit enable interrupt, pour éviter qu'elle se redéclenche. C'est RETFIE qui réactive ce bit enable.

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

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Bonjour satinas,
    bonne idée, bien vu!, j'essai ça de suite.... je vais débuter mes boucles en forçant mes interruptions.....
    à tout de suite....

  7. #6
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    bonjour à tous
    suite à la réponse de satinas j'ai essayé de recharger directement le registre "INTCON" avant de quitter ma pseudo interruption et en effet c'est mieux
    je procède comme suit:
    je fais le boulot des B.P
    j'efface les flags
    je recharge le registre INTCON
    Je dépile avec l'instruction "pop"
    je "goto" vers une autre boucle
    Maintenant ça marche environ 10 fois et en suite bug.... peut être qui reste une crotte (je pense au "pop") pourtant dans les fusibles j'ai mi "reset si la pile déborde" et là c'est figé.... donc pas de reset .... mais merci quand même ça fais deux jour que je patinais...on patine plus loin...

  8. #7
    Seb.26

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Tu peux essayer de bidouiller l'adr de retour de ton IT (pour changer de boucle sans fin) et ensuite faire le RETFIE normalement.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. #8
    RISC

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Salut,

    Ne pas revenir d'une interruption par RETFIE c'est une des choses les plus farfelues que j'ai jamais vu ;=)
    Il y a tellement de choses bizarres pouvant découler des tentatives de "simuler" un retour d'interruption que je ne prendrais pas le risque de faire cela.

    Il y a obligatoirement une autre façon de faire les choses.
    Des millions de programmes C sont écrits sans utiliser le GOTO.

    Remets à plat ton organigramme. Tu peux activer un flag dans l'interruption et le tester dans ton programme principal. Ce n'est pas les quelques us ou tu vas continuer de générer une sinusoide avant de passer à un triangle qui va perturber ton fonctionnement.

    Je ne peux que te recommander d'abandonner cette idée saugrenue et de cherche à résoudre ta spécification d'une manière plus "catholique" ;=)

    a+

  10. #9
    luc_1049

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Bonsoir

    Cela fonctionne maintenant pendant environ 10 fois dites vous.
    Peut être que vous ne faîtes les opérations dans le bon ordre. Que se passe-t-il quand vous faîtes du debug (pas de la simulation !)
    D'autre part qu'en est il des rebonds des boutons poussoir , êtes vous sur que les rebonds sont arrétés lorsque vous remettez les interruptions en route ?

    Ps : Relisez la partie interruption dans le pdf de xc8 , il est dit que certaines choses pendant la sortie d'interruption sont faites par le hardware du pic et pas par retfie
    cdlt
    Dernière modification par luc_1049 ; 05/03/2014 à 01h08.

  11. #10
    invite29971eb1

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Je crois qu'il va être plus que temps d'apprendre ce qu'est un pointeur....

    Un exemple de pseudo-code:
    Code:
    unsigned int sinus[]={1,2,4,8.....};
    unsigned int carre[]={0,1,0,1};
    unsigned int triangle[]={1,2,4,8,4,2,1};
    
    unsigned int *formeencours;
    unsigned char choixforme=0;
    
    formeencours=sinus;
    dans l'int ou ailleurs, tu fais évoluer la valeur de choixforme, tu la testes et tu ré-affectes formeencours selon la valeur de choixforme (en incrémentant, en utilisant un bouton par type d'onde, à toi de voir).

    La ré-affectation de formeencours ne se fait qu'après scan des touches. Ensuite, dans ton int de timer, tu utiliseras formeencours qui se fichera bien de savoir vers quelle courbe il pointe.

  12. #11
    Seb.26

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Une autre solution : tu fais un RESET soft de ton pic ...

    pseudo-algo :

    NB: 'mode' est une variable non initialisée en RAM

    Code:
    * Boot :
    
    si mode >3
      mode = 0
    
    si mode == 0
      goto boucle infinie sinus
    
    si mode == 1
      goto boucle infinie triangle
    
    si mode == 2
     goto boucle infinie carré
    
    si mode == 3
     goto boucle infinie petit chien obèse
    
    * interuption :
    
    mode = mode+1
    RESET
    voilà un truc bien crade que tu devrais aimer ...
    Dernière modification par Seb.26 ; 05/03/2014 à 10h45.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  13. #12
    Seb.26

    Re : sortir d'une interruption sans retfie sur un 18f252...

    NB: Pour faire le RESET, tu active le WatchDog dans ton interruption et tu entre dans une boucle infinie ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  14. #13
    luc_1049

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Bonjour

    Je comprends la satisfaction de trouver une solution en gardant votre idée de base, mais c'est dommage que vous vous contraignez de cette façon, vous avez des goulots d'étranglement dans votre soft qui vous impose des traitements particuliers, qui finiront par fonctionner mais bon.

    Des impératifs de "temps réel" ou réactivité lors du changement de forme d'onde sont ils indispensable ?
    Privilégiez une solution qui puisse être debuggée certaines astuces pourraient ne pas l'être .

    Une solution possible :

    initialisation ()
    ---------
    mode n-1 =mode zéro;
    mode n = forme sinus // val par défaut au démarrage
    ---- fin initialisation
    autorise interruption();

    while(1)
    if mode == mode n-1 continue // pas de changement demandé
    mode n-1 = mode
    initialisation préalable du mode partie commune à chaque mode();
    switch (mode) // changement du mode par un switch mais voir l'assembleur quel changement est le plus rapide, xc8 permet des options
    // faudrait il implémenter un pointeur sur une fonction de configuration ?
    case 1 : config forme onde sinus();break
    case 2 : config forme onde carrée ();break
    fin du switch
    initialisation finale commune à chaque forme d'onde ();
    fin du while(1)

    interruption()
    lecture état bp
    attente fin des rebonds
    positionnement variable volatile mode
    fin interruption
    cdlt

  15. #14
    luc_1049

    Re : sortir d'une interruption sans retfie sur un 18f252...

    A noter que le switch doit être sur mode n-1 sinon si interruption à tout moment risque. Mais mode n'est peut être évalué qu'au début du switch.
    Que mode ou mode n est forcément volatile


    Ps : C'est vraiment pénible impossible d'ouvrir et de modifier au dela de 5 minutes son message et AUSSI impossible de valider les évolutions du message que l'on fait sitôt le message initial envoyé mais pendant une session d'édition pour modification du message qui dure plus de 5 minutes.

    Si QUelqu'un intercale un message entre temps on y perd en lisibilité .


    cdlt

  16. #15
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    bonsoir tout le monde,
    j'ai bien lu toutes vos idées......
    une petite chose qu'il est vrai j'ai pas précisé c'est que je programme en asm ! Cependant c'est pas grave je comprend l'idée exprimé en C

    revenons à nos moutons: Le but de ma démarche est de modifier des variables (fréquences, forme d'onde , ....) avec des BP montés sur des interruptions
    ensuite retour dans le programme pour charger les modifs et lancer la boucle à la vitesse voulu de la forme voulu....cette boucle lit un tableau de 255 valeurs.
    moins j'ai d'instructions plus je gagne en fréquence si dans cette partie je loge un test il va me faire perdre un cycle x 256.... bref une interruption arrangerait
    bien mon problème.( je pourrai y aller faire des modifs mais retfie me renverrait dans la même boucle et donc sans avoir pris en compte mes changements.)

    Je n'ai pas d'impératifs particuliers si ce n'est une onde propre, et si possible tant qu'a faire un GBF rapide
    Il est vrai cependant que d'un point de vue programmation c'est barbare, et farfelue. Le coup du reset par Watch dog proposé plus haut est lui aussi tordu
    cependant si j'arrive à sortir de cette interruption par une pirouette avec la pile ce serai pour moi une prouesse intelligente qu'il faut tenter maintenant j'ai testé plein de choses avec le pointeur de pile les registres tosu,h,l les instruction "pop"et "puch" et pour l'instand c'est de mieux en mieux mais c'est pas encore juste le fonctionnement des deux instructions précitées ne sont pas prévues pour mon cas.
    j'ai regardé vite fait le pdf de xc8 il faut que je le lise plus attentivement j'y ai vue des trucs interressant.....

    à j'oubliai j'ai testé l'overclocking...... comme ça pour voir..... 16mega x 4 = 64mega ça marche..... à voir.... si obligation de rajouter des tests dans mes boucles enfin c'est pareil c'est barbare.....

  17. #16
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    J'ai trouvé

  18. #17
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Bonjour à tous
    Après de longues lectures en anglais....
    voilà voilà....

    org 0x08 ;adresse de mes interruptions

    ;ayant mi en route uniquement les interruptions; int0, int1, int2 qui sont déclenchées par des B.P
    ;pas besion de voir qui a appelé...

    bcf INTCON3,0 ;raz flag int2
    bcf INTCON3,1 ;raz flag int1
    bcf INTCON,1 ;raz flag int0 (on peut faire plus court mais un peu de compréhension....)

    movlw 0x01 ;on charge 1 dans le pointeur de pile, car peut-être que nous étions dans des sous programmes
    movwf STKPTR ;maintenant notre pile est à "zéro"(si nous avions mi zéro dans STKPTR ça fait un reset car c'est "stack Under flow" siça peut servir...)

    movlw 0x00 ;reste à donner l'adresse de retour...
    movwf TOSU ;inutil pour mon pic qui a une petite mémoire...
    movlw 0x04
    movwf TOSH
    movlw 0x00
    movwf TOSL ;soit 0x000400 (retour à la ligne "org 0x400 ;adresse de la ligne suivante")
    retfie ;pourquoi ce privé de la remise à un du bit GIE...? return fonctionne mais comme il m'a été dit il faut remettre manuellement ce bit
    ;avant la séquence de retour organisé.
    Voilà je comprend pas ce qui est "barbare", ce n'est pas conventionnelle certes mais c'est logique et ça suit une démarche réfléchi!

  19. #18
    luc_1049

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Bonjour

    Merci du retour

    Finalement quelle était la subtilité ?

    Ce soft fonctionne c'est parfait et vous avez réussi ! Ce soft est "barbare" pour certain car il fait appel à une méthode extrême. C'est un peu comme les goto qui sont déconseillés en programmation structurée, mais bien mieux à mon sens. Il faut juste être sur de "redémarrer" avec tout bien configuré.

    cdlt

  20. #19
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    bonjour luc 1049,
    J'ai passé tant de temps à chercher des explications sur les forums et hop au moment crucial fin de la discution...
    vous m'avez apporté votre aide je trouve normal de vous faire partager les résultats et si quelqu'un cherche cette
    info il ne sera pas planté.
    la subtilité: je gagne un temps énorme dans ma boucle qui travaille de façon optimum pour un signal le plus propre que je peux.
    je voulais juste profiter de l'interruption....
    voilà merci à tous

  21. #20
    RISC

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Salut,
    Citation Envoyé par DENIS16 Voir le message
    à j'oubliai j'ai testé l'overclocking...... comme ça pour voir..... 16mega x 4 = 64mega ça marche..... à voir.... si obligation de rajouter des tests dans mes boucles enfin c'est pareil c'est barbare.....
    Plutôt que de prendre le risque de non-fonctionnement choisis un PIC18F25K22 (le grand frère du PIC18F252) mais qui fonctionne je crois à 64MHz...sans overcloker ;=)

    a+

  22. #21
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    bonjour,
    Dans ce moment creux il fallait bien que je m'occupe..... et comme tout le monde en parle....
    un p'tit éssai des fois...! aujourd'hui je ne suis pas interréssé mais imagine, mon gbf est à fond à 992Khz
    ben là moi j'overclock un peu. Histoire de pas avoir de virgule sur le titre du boitier!

    C'est comme sur la route qui roule à 90km/h? Tous les menteurs...enfin ça rassure TF1...

    J'ai pri ce pic car il était sur un truc que j'ai récupéré avec un lcd...
    D'ailleur je remarque que les pics qui ont été protégé en écriture sont pénible à effacer,
    et ça si un jour je suis fâché je lancerai un topic sur ce forum.
    Autrement ils sont parmi nous dans les blocs secours 16f819 dans les variateurs de vitesse 18f4520
    certaines tempo industriel, dans des vérins électrique de lit d'hôpital 16f508
    16f887 dans un truc qui gere le freinnage d'un moteur tri (lui, .. j'attend qu'il perisse.... )
    voilà voilà
    il y a qu' a ce baisser.... un coup de marteau PAN! et hop

  23. #22
    RISC

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Salut,
    Citation Envoyé par DENIS16 Voir le message
    D'ailleur je remarque que les pics qui ont été protégé en écriture sont pénible à effacer,
    Il n'y a aucune différence pour effacer un PIC protégé ou non. Le bit de protection se trouve avec tous les autres dans la mémoire Flash.
    Utilises-tu un programmateur "original" ( Pickit3, ICD3,...) ou un fait maison.
    Je n'ai jamais eu de problème spécial du à la protection. As-tu un exemple précis ? quel modèle de PIC ?

    a+

    NB : les "très très vieux" PICs sont en mémoire OTP ...ceux tu ne risques pas de les effacer ;=)

  24. #23
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    bonjour,
    Le dernier pic que j'ai eu du mal à effacer est le 18f252 que je bricole actuellement.
    Comme matériel pour programmer j'ai un pickit2 et un p.c récent.
    Cette dernière fois j'ai recalibré le 5v qui d'ailleurs est à environ 4.85v maxi en charge (le pic et son LCD
    pas de rétroéclairage, pas de led c'est dire que la charge est dans les spécifications).
    C'est le port USB qui est faible!
    Les chinois économisent même les volts....!

    en effet chez les pics il y en a qui ne sont pas reprogrammable généralement les "xxCxx"
    Alors que les "xxFxx" et "xxLFxx" sont reprogrammable
    Mais à force d'insister ils finissent par s'effacer.
    Surtout que quand j'ai une idée je fais la plaque sur une cnc et je programme ensuite....
    Je trouve que c'est plus facile qu'une plaque d'essai sans soudure qui fait des faux contact
    ce serai difficile de dessouder des 16f819 qui sont en CMS (ceux des blocs secours)
    Sous prétexte qu'il veulent pas s'effacer. Car pour les récupérer je coupe le C.I autour
    et entre les deux rangées de patte avec une dremel ensuite je dessoude un coté à la foi.
    voilà voilà
    à+ Denis

  25. #24
    RISC

    Red face Re : sortir d'une interruption sans retfie sur un 18f252...

    Salut,
    Citation Envoyé par DENIS16 Voir le message
    bonjour,
    Le dernier pic que j'ai eu du mal à effacer est le 18f252 que je bricole actuellement.
    Comme matériel pour programmer j'ai un pickit2 et un p.c récent.
    Cette dernière fois j'ai recalibré le 5v qui d'ailleurs est à environ 4.85v maxi en charge (le pic et son LCD
    pas de rétroéclairage, pas de led c'est dire que la charge est dans les spécifications).
    C'est le port USB qui est faible!
    SI je comprends bien tu alimentes le PIC et son environnement avec ton Pickit2 ? Cela est peu-être la source du problème.
    L'USB peut fournir au minimum 100mA voire normalement 500mA MAIS....le Pickit2 ne fournis au maximum que 20 ou 30 mA (il n'y a pas de transistor de puissance dedans).
    Donc si ta carte consomme de trop, la tension s'écroule et la progrmmation ne peut s'effectuer correctement. Le Pickit n'est pas une alimentation...
    C'est pourquoi j'utilise toujours une alimentation externe ;=)

    Surtout que quand j'ai une idée je fais la plaque sur une cnc et je programme ensuite....
    Je trouve que c'est plus facile qu'une plaque d'essai sans soudure qui fait des faux contact
    ce serai difficile de dessouder des 16f819 qui sont en CMS (ceux des blocs secours)
    Sous prétexte qu'il veulent pas s'effacer. Car pour les récupérer je coupe le C.I autour
    et entre les deux rangées de patte avec une dremel ensuite je dessoude un coté à la foi.
    Cà c'est de la vraie récup !!!!

    Tu peux aussi te faire envoyer des echantillons de PIC gratuits pour les PICs que tu ne trouves pas dans tes récup ;=)

    a+

  26. #25
    inviteb1cc1e07

    Re : sortir d'une interruption sans retfie sur un 18f252...

    Salut RISC,
    J'y repensais et en relisant ta réponse ça m'a fais pensé que 4.8v c'est peu surtout que
    c'est pickit qui créé les 13v nécessaire au "MCLR".... donc une petite mesure en forçant
    pickit..... Et là que 11.6v... alors j'ai regardé comment c'était fichu dedans, peu de place.
    Mais je vais tenter de lui donner 5v de extérieur pour voir....
    C'est pas si simple je couper le "+" de l'USB et pouvoir le ressouder en lieu et place au cas où
    mais j'hesite et je couperai bien le "-" aussi (et là c'est plus dure de couper un plan de masse)
    pour ne pas avoir de problème via la terre...
    ce serai con de cramer pickit ou autre.... Car mine de rien il est très robuste et pratique
    plus tard je prendrai un pickit3 mais je garderai le 2 car il programme aussi les eeproms
    et pas pickit3.
    Voilà je testerai le coup du 5v à la prochaine programmation ce sera certainement un variateur de
    vitesse à couple constant (en surveillant la vitesse de rotation via un encodeur pour donner + de
    puissance sur les coups dure...) pour faire un petit tour d'atelier....une idée qui me trotte...
    j'espère que je penserai à vous répondre concernant le problème... d'effacement des pics...
    Voilà à + Denis

Discussions similaires

  1. Réponses: 86
    Dernier message: 02/10/2017, 18h26
  2. Passage d'un PIC 18F252 à un 18F4550
    Par inviteee2ce2b6 dans le forum Électronique
    Réponses: 15
    Dernier message: 29/11/2010, 21h04
  3. Problème synchronisation SPI pic 18F252
    Par invite7ba2f4a0 dans le forum Électronique
    Réponses: 3
    Dernier message: 16/08/2010, 17h43
  4. petit problème programmation 18F252
    Par invite6185b9fb dans le forum Électronique
    Réponses: 17
    Dernier message: 26/02/2009, 15h56
  5. Recherche 18f252.lkr : site ou on peut tous les télécharger.
    Par invite7e3a8d7d dans le forum Électronique
    Réponses: 3
    Dernier message: 22/06/2006, 11h22
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...