[Programmation] Interruption PIC18F
Répondre à la discussion
Affichage des résultats 1 à 8 sur 8

Interruption PIC18F



  1. #1
    invitef4f3971b

    Interruption PIC18F


    ------

    Bonjour,

    J'ai un niveau correct en programmation C mais pas exceptionnel non plus
    Mes interrogations concernent les interruptions :

    J'ai bien compris le principe et le mécanisme, mais écrire le code pour dire au microcontrôleur quoi faire est une autre chose.
    Si je comprends bien, les fonctions suivantes vont permettre d'appeler une routine d'interruption qui va s'exécuter :

    Code:
    #pragma code InterruptVectorHigh = 0x0008
    void InterruptVectorHigh (void)
    Code:
    #pragma code InterruptVectorLow = 0x0018
    void InterruptVectorLow (void)
    Ma première question :

    Quand est-ce que le PIC décide d'exécuter ces fonctions ?
    Je sais très bien que (par exemple), si le bit 4 du port B configuré en entrée est à l'état 1 (histoire du flag), alors l'interruption est générée, le programme principal est interrompu, la routine s'exécute puis le programme principal reprend.
    Mais comment concrètement coder ça pour le dire au PIC d'entrer en interruption ? Car les fonctions InterruptVectorHigh et Low ne sont pas appelée dans le code que j'utilise.

    Autre chose, je parlais dans l'exemple que j'ai pris d'un bit de registre mis à 1 pour générer l'interruption, mais ici on parle bien d'un port spécial pour les interruptions ?
    Comment ça se passe et cela est-il possible de générer des interruptions dans un process actif par la liaison UART entre deux microcontrôleur. L'idée serait de générer une interruption si un octet spécial est reçu sur RX.

    Merci beaucoup par avance pour vos réponses, j'espère que j'ai été clair

    Bastien.

    -----

  2. #2
    antek

    Re : Interruption PIC18F

    Si le bit "enable" correspondant à l'interruption est activé, le programme se connecte automatiquement à l'adresse prévue.
    Pour un octet spécial, il faut le gérer par programme, il n'y a pas à ma connaissance de possibilité d'interruption à partir de l'état d'un registre mémoire données.
    Par contre des fonctions de l'UART sont gérables par interruption.

  3. #3
    invitef4f3971b

    Re : Interruption PIC18F

    Ok merci

    Citation Envoyé par antek Voir le message
    Par contre des fonctions de l'UART sont gérables par interruption.
    Je n'ai pas vraiment compris cette phrase ...

    Pour faire simple j'ai un programme qui tourne en boucle, et je veux que mon microcontrôleur gère la réception aléatoire de trames sur l'UART RX.
    Pour ça il faut bien utiliser les interruptions, qui se déclencheraient à la réception d'un start flag (0x7E mais peut importe) qui correspond au premier octet du message transmit sur l'UART et reçu sur le RX du microcontrôleur.
    Est-ce que c'est possible d'interrompre le programme principal de cette manière pour entrer dans un sous-programme de routine puis retourner dans le programme principal ?

  4. #4
    paulfjujo

    Re : Interruption PIC18F

    bonsoir,


    Est-ce que c'est possible d'interrompre le programme principal de cette manière pour entrer dans un sous-programme de routine puis retourner dans le programme principal ?
    je rejoins entierment l'avis d' ANTEK

    non, du moins pas à ma connaissance.

    meme si sur certain EUSART il existe
    Auto-wake-up on character reception ... il faut etre en mode sleep

    Dans le traitement d'IT RX, il faut tester si RCREG contient le caractere de depart 0x7E
    si ce n'est pas le cas ,on retourne directe au Main program
    si oui, entrer dans la phase de stockage des caracteres suivant constituant ladite Trame. dans un buffer.
    encore faut-il definir comment on en sort ..de ce stockage..
    sur un nombre de caracteres reçus ?
    ou sur un autre caractere bien definit ex: EOT ou CR ou ??
    Dernière modification par paulfjujo ; 10/03/2016 à 18h57.

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

    Re : Interruption PIC18F

    Citation Envoyé par paulfjujo Voir le message
    Dans le traitement d'IT RX, il faut tester si RCREG contient le caractere de depart 0x7E
    si ce n'est pas le cas ,on retourne directe au Main program.
    si oui, entrer dans la phase de stockage des caracteres suivant constituant ladite Trame. dans un buffer.
    Effectivement je dispose des registres suivants dans ma library hardware profile :

    Code:
    #define COM_UART_TXREG		(TXREG2)
    Code:
    #define COM_UART_RCREG		(RCREG2)
    Je vais creuser ce point merci

    Citation Envoyé par paulfjujo Voir le message
    encore faut-il definir comment on en sort ..de ce stockage..
    sur un nombre de caracteres reçus ?
    ou sur un autre caractere bien definit ex: EOT ou CR ou ??
    Oui probablement sur nombre de caractère reçu, c'est une donnée que je connais et que je pourrais utiliser.
    Sinon ma trame dispose d'un start flag, mais aussi d'un stop flag (même octet que le start), je suppose que ça peut aussi être une piste.

    En tout cas merci de m'avoir rassuré sur le fait que ce que je souhaite faire soit techniquement réalisable

  7. #6
    Seb.26

    Re : Interruption PIC18F

    Pour les IT de l'UART, tu vas avoir 2 IT :

    > IT Rx = une interruption quand un octet est reçu
    en général, on stocke cet octet dans un buffer que la boucle principal traitera plus tard

    > IT Tx = une interruption quand l'octet a été envoyé
    en général, on regarde si on a autre chose à envoyer, si c'est le cas, on l'envoie, sinon on coupe l'IT Tx

    /!\ Primordial : on reste le moins longtemps possible dans une IT !!!
    Dernière modification par Seb.26 ; 11/03/2016 à 09h48.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  8. #7
    invitef4f3971b

    Re : Interruption PIC18F

    Merci pour ces informations supplémentaires.
    Sur mon fichier "hardware profile" je vois :

    Code:
    #define COM_INT_TRIS		(TRISBbits.TRISB2)
    #define COM_INT_IO			(PORTBbits.RB2)
    #define COM_INT_IF        	(INTCON3bits.INT2IF)
    #define COM_INT_IE       	(INTCON3bits.INT2IE)
    Code:
    #define COM_UART			(2)
    #define COM_UART_TXSTA		(TXSTA2)
    #define COM_UART_TXSTAbits	(TXSTA2bits)
    #define COM_UART_RCSTA		(RCSTA2)
    #define COM_UART_RCSTAbits	(RCSTA2bits)
    #define COM_UART_RCIE		(PIE3bits.RC2IE)
    #define COM_UART_TXIE		(PIE3bits.TX2IE)
    #define COM_UART_RCIF		(PIR3bits.RC2IF)
    #define COM_UART_TXIF		(PIR3bits.TX2IF)
    #define COM_UART_TXREG		(TXREG2)
    #define COM_UART_RCREG		(RCREG2)
    Si j'ai bien compris, ces deux blocs correspondent à une gestion différentes des interruptions ? :
    • Le premier bloc pour générer des interruptions par l'intermédiaire de signaux sur les I/O configurées en entrées du PIC
    • Le second bloc pour générer des interruptions par l'intermédiaire d'octets reçu sur le port série UART

    Et l'utilisation de l'une ou l'autre des méthodes doit être configurés dans quels registres ?
    Autrement dit, comment (en gros) je configure le code pour dire au PIC d'aller taper dans les fonctions InterruptVectorHigh ou InterruptVectorLow sur telle ou telle interruption ?

    PS : J'ai bien compris le rôle des différents registres du genre TX/RCIE pour activer/désactiver la transmission/réception sur l'UART, TX/RCIF pour signaler une interruption, TX/RCREG pour récupérer/transmettre les bytes du port série.

  9. #8
    Seb.26

    Re : Interruption PIC18F

    en bref :

    tu as 2 niveaux d'IT : high et low, high, la nuance étant que high peut interrompre low mais pas l'inverse.

    tes 2 blocs correspondent à la gestion des interruptions pour des périphériques différents (un port IO et l'UART), lis ta datasheet pour les détails ... passage obligé ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

Discussions similaires

  1. Gestion Interruption PIC18F
    Par invite0e0d6f65 dans le forum Électronique
    Réponses: 5
    Dernier message: 22/08/2012, 16h47
  2. Problème timer1/interruption pic18f
    Par invite00cf8b8f dans le forum Électronique
    Réponses: 4
    Dernier message: 05/08/2011, 07h45
  3. PIC18F: Generation d'interruption à l'aide des broches KBI
    Par invite42fe2d4f dans le forum Électronique
    Réponses: 1
    Dernier message: 06/03/2011, 22h26
  4. Problème d'interruption avec Pic18f
    Par invite25df009a dans le forum Électronique
    Réponses: 3
    Dernier message: 19/03/2010, 09h37
  5. interruption PIC18F
    Par invite23732d21 dans le forum Électronique
    Réponses: 12
    Dernier message: 19/05/2006, 16h17
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...