PIC récéption HF problème... prog en C
Répondre à la discussion
Affichage des résultats 1 à 20 sur 20

PIC récéption HF problème... prog en C



Vue hybride

  1. #1
    invite1feace2e

    PIC récéption HF problème... prog en C

    Bonjour,
    pour un projet avec un pote on cherche à réaliser un transmission par HF (module aurel, 3k de bande passante).

    Actuellement:
    - émission avec un 16f628
    - réception avec un 16f877: affichage sur un LCD

    Notre problème est que la réception ne fonctionne pas correctement.
    Nous utilisons les fonctions de CCS.

    voir en PJ la source svp.

    Pourquoi il ne fonctionne pas? ce qui nous étonne, c'est que la réception par interruption fonctionne deux fois (deux passages de boucle) puis plus d'interruption du tout (alors que le programme tourne toujours dans la boucle principale!!).
    L'émission c'est un mot en continue.
    En faite, lors des deux passages dans l'interruption, on recoit un caractère à chaque fois, qui n'a rien avoir avec ceux envoyé (d'ou le doute sur la synchronisation).

    pour remettre en forme notre signal issu du récepteur, nous avons ajouter un trigger, est ce que celui ci perturberais notre réception, en modifiant les temps haut et bas de la durée d'un bit?

    Merci de votre intérêt.
    Fichiers attachés Fichiers attachés

  2. #2
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    tu interdit ton int dans l'int elle meme
    disable_interrupts(INT_RDA);
    Et tu l'autorise tout les 2600 ms tout delay additionné.
    Y a de quoi en raté un maximum

    D'ailleurs dans l'int on est déja en interruption disable.
    Cette ligne semble superflue.

    Il ya une erreur de logique, à cogiter ...

  3. #3
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    Non, elle est en commentaire (//).
    Pas dans le main,
    mais dans #INT_RDA il y en a un aussi mais pas de comments

    Par contre lorsque ton prog tombe dans while(1) il ne fait plus rien
    Hè !
    C'est un Do {} while(1)
    pas
    un While {}

  4. #4
    invite5637435c

    Re : PIC récéption HF problème... prog en C

    Citation Envoyé par freepicbasic Voir le message
    Pas dans le main,
    mais dans #INT_RDA il y en a un aussi mais pas de comments


    Hè !
    C'est un Do {} while(1)
    pas
    un While {}

    Oui tu as raison, d'ailleurs j'ai carrément supprimé mon post, y avait rien de bon du tout.
    désolé...

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

    Re : PIC récéption HF problème... prog en C

    Citation Envoyé par freepicbasic Voir le message
    tu interdit ton int dans l'int elle meme
    Par contre ça n'est pas génant, tu es déjà dans l'interruption donc tu exécutes les instructions jusqu'au bout et si une autre interruption survient elle ne sera pas prise en compte.

    Citation Envoyé par freepicbasic Voir le message
    Et tu l'autorise tout les 2600 ms tout delay additionné.
    Y a de quoi en raté un maximum
    Là je suis d'accord avec toi, les timmings sont vraiment demesurés.

  7. #6
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    disable_interrupts(INT_RDA);
    Tu crois que ça c'est un nettoyage de flag ?
    ça ressemble plus à un "Clear int" !

    Je connais pas son compilateur ...

  8. #7
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    Si effectivement le compilo ne gère pas le flag, avec la déclaration en pragma "#" il faut alors l'effacer.
    Il y a peut être une confusion entre 2 ordres.

  9. #8
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    If you want to stop the application from processing interrupts, you can disable the interrupts using disable_interrupts CCS macro. You can either disable a specific interrupt or all interrupts using the GLOBAL define.
    http://mdubuc.freeshell.org/Robotics/Tips.html

    C'est bien un CLI donc l'erreur est juste lol
    Dans leur exemple pas de nettoyage de flag , j'en déduit ,le compilo doit le faire.

  10. #9
    invite5637435c

    Re : PIC récéption HF problème... prog en C

    Oui, moi aussi je n'utilise pas ce compilo et je trouve que leurs explications ne sont pas très claires...

    Je ne vois pas comment on peut annuler une routine d'interruption lorsqu'on est déjà dedans, à moins que le CLI soit lui même une interruption plus prioritaire encore sur ce type de compilo, mais j'en doute un peu.

    Je regarderai ça demain car comme je suis passablement grippé, je n'ai pas vraiment les idées claires.
    @+

  11. #10
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    Je regarderai ça demain car comme je suis passablement grippé, je n'ai pas vraiment les idées claires.
    ah , je me disais aussi , il a pas la forme aujourd'hui.
    bon rétablissement

  12. #11
    invite1feace2e

    Re : PIC récéption HF problème... prog en C

    Bonjour,
    merci pour vos réponses.
    Effectivement, au début on s'est dit que tant qu'à faire, c'est plus simple d'utiliser les fonctions toutes faites de CCS.
    Après on à quand même eu un doute pour la remise du flag pour "l'acquitement" de l'interruption.
    Il semblerait que le registre se vide en le lisant.
    On va essayer de baisser le flag à la main, on sera sur comme ca

    Le disable/enable vient du faite qu'on emet en continue, donc les interruptions arriveraient trop souvent, non?
    Du coup pour garder la main dans le main, on disable l'interrupt.
    On perd des données, mais par la suite un bon protocole nous évitera cet inconvénient. Du moment qu'on récupère les bon caractères.

    Pour les tempos, on va les enlever de l' IT.
    Résultat cette aprèm

    Merci

  13. #12
    invite1feace2e

    Re : PIC récéption HF problème... prog en C

    Quelques nouvelles, l'acquittement de l'intteruptions se fait automatiquement avec les fonctions. Si on veut le faire manuellement, il faut rajouter no_clear derriere #int_rda.

    On a supprimé toutes les tempo, on a diminué la vitesse de transfert à 1200 baud.

    On dirait que les interruptions se "désactivent" après 2 passages dans la fonction d'interruptions.

    On a remis à jour les pieces jointes.

    Si quelqu'un a une idée...

    Merci à tous
    Fichiers attachés Fichiers attachés

  14. #13
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    Les fichiers sont en cours de validation...

    Peut on mettre un procedure LCD dans l'int ?
    Cela me semble pas très "clean".
    Il est préférable de mettre un flag dans l'int et afficher dans le main en poolant le flag.

    Personnellement j'aurais pas osé faire ça !

  15. #14
    invite1feace2e

    Re : PIC récéption HF problème... prog en C

    pour répondre en attendant la validation, il n'y a plus de procédure dans l'it. Celle ci a été réduite au strict nécéssaire.

    Code:
    #INT_RDA                
    void RecepIT(void)
    {
    	disable_interrupts(INT_RDA);
    	cVar = getch();
    	it = 1;
    }
    au faite, ca veut dire quoi "poolant le flag"??

    merci

  16. #15
    invite5637435c

    Re : PIC récéption HF problème... prog en C

    Ca y est, je viens de valider.

    Citation Envoyé par freepicbasic Voir le message
    ah , je me disais aussi , il a pas la forme aujourd'hui.
    bon rétablissement
    berci!

  17. #16
    invite1feace2e

    Re : PIC récéption HF problème... prog en C

    un nouvelle essai:

    on a enlever le disable et enable du programme mais on fait toujours que 2 passage dans l'interruptions.

    C'est bizarre, on voit vraiment pas d'ou ca peut venir...

  18. #17
    invitef86a6203

    Re : PIC récéption HF problème... prog en C

    au faite, ca veut dire quoi "poolant le flag"??
    C'est ce que tu fait avec la variable IT qui sert de flag.

    PlaceCurseur(LCD_L2, 13);
    AfficheCarLCD(cVar);
    Tu ecrit toujours à la meme place normal ?

    cVar = getch();
    reçois une lettre seulement.

    Il faut bufferiser et attendre la fin du message !

    Buffer[ptr] = getch();
    if Buffer[ptr]=13 then IT=1; /* 13d = 0x0d = fin de message */
    ptr++;

  19. #18
    invite1feace2e

    Re : PIC récéption HF problème... prog en C

    en faite, on a essayer de recupérer dans un tableau (ou buffer?) et afficher une fois plein. Mais cette ne fonctionne pas. En effet, on recois toujours que 2 caractères.

    Code:
     string[it] = cVar;
    		if(it == 15)
    		{
    		it = 0;
    		strcpy(stringdef, string);
    		AfficheTabLCD(stringdef, 16, LCD_L2, 0);
    		}
    		AfficheTabLCD(string, it, LCD_L2, 0);
    Du coup, on affiche tout le temps les différentes valeurs du tableau. On a remis le code en pièce jointe d'ou est issu ce code.

    Mais on reçois toujours que 2 caractères (seulement 2 interruptions ) et ce sont pas les bons...

    merci, on reviens demain matin!! (l'IUT ferme...)
    Fichiers attachés Fichiers attachés

Discussions similaires

  1. un prog pr un PIC (alarme)
    Par sg1 dans le forum Électronique
    Réponses: 6
    Dernier message: 29/05/2007, 20h56
  2. Problème prog. PIC
    Par invite9013ee57 dans le forum Électronique
    Réponses: 2
    Dernier message: 22/01/2007, 12h29
  3. Carte PIC applic + prog
    Par invite49856ed4 dans le forum Électronique
    Réponses: 5
    Dernier message: 15/05/2004, 20h30
  4. Hardware de Programateur de PIC pour IC-PROG
    Par invitea516a87c dans le forum Électronique
    Réponses: 11
    Dernier message: 12/05/2003, 19h28
  5. Pb de prog d'un PIC 16F84A
    Par inviteab233b68 dans le forum Électronique
    Réponses: 8
    Dernier message: 07/04/2003, 23h05
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...