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

Interruption



  1. #1
    galou32

    Interruption


    ------

    Bonjour,

    sur atmega 328 (arduino nano), je voulais savoir s'il était possible qu'une interruption matérielle (appui sur un bouton) déclenche une interruption logicielle (création d'une trame avec un timer).

    ou dis différemment: tant que j’appuie sur le bouton 1 j' émet la trame correspondant au bouton 1.

    et ainsi de suite avec 3 autre boutons.

    en fait j'ai lu pas mal de site qui décrivent les interruptions avec timer et d'autres site qui décrivent les interruptions par appui sur bouton. mais aucun exemple qui associe les deux.

    comme je suis débutant en programmation, j'aimerais savoir comment dois je aborder cette question.
    Merci

    -----

  2. #2
    Murayama

    Re : Interruption

    Bonjour!


    Un bouton peut très bien déclencher un timer, c'est d'ailleurs un moyen
    classique de filtrer les rebonds.
    1. Appui bouton -> interruption -> fonction d'interruption
    2. Dans la fonction d'interruption, on interdit les interruptions du bouton
    pour ne pas avoir une 2ème interruption avec le même appui. Et on démarre un
    timer.
    3. Quand le timer est fini, une interruption timer est appelée, dans laquelle
    on réautorise le bouton.


    NB: je n'ai jamais fait ça sur Arduino mais ça doit être possible.


    Par contre, il faudrait expliquer ce qu'est une trame. En général, on utilise
    ce mot pour les transmissions sérielles, UART, SPI, USB, Ethernet, etc...


    Pascal

  3. #3
    galou32

    Re : Interruption

    Ok merci pour les renseignements.

    j'abuse peut être du mot " trame". en fait lorsque j'appui sur un bouton je veux créer une succession de signaux carrés du genre :

    signal radiocommande 27MhZ.odt

    comme le fait une télécommande.

    mais il faut que j'étudie un peu mieux les interruptions associé aux timers ...

    Cordialement

  4. #4
    galou32

    Re : Interruption

    au cas ou la pièces jointe ne soit pas passée :
    signal radiocommande 27MhZ.odt

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

    Re : Interruption

    Bonjour!


    En bref, à vue de nez, c'est pour faire un genre de télécommande infrarouge.
    Je ne vois pas vraiment le problème. Il y a en gros 2 solutions. Les trames de télécommande
    reposent toutes (toutes celles que j'ai vues) sur 4 délais différents.


    * 2 délais pour début et fin de tram (pas forcément égaux, donc 2).
    * 2 délais pour signal A (1 pour dire que c'est un 1, l'autre pour dire que
    c'est un 0)
    * 1 délai pour signal B (en général, le même que le signal court du point 2 ci-dessus),
    donc en gros on a besoin de 4 délais. Le signal B ne sert à rien sinon à séparer les
    bits du signal A.


    La première solution, peut-être la plus simple, consiste à faire des délais "en dur", sans
    timer. Par contre, le processeur ne peut rien faire d'autre quand vous transmettez la trame,
    et passera la plupart du temps à compter dans le vide. En plus, c'est assez fastidieux pour
    faire un timing précis.


    La 2 ème solution est plus élégante, mais un peu plus compliquée. Il faut générer un "tick",
    une interruption fixe qui vous permet de faire une petite machine d'états. C'est un très bon
    exercice, et en plus le timing sera précis puisque les "ticks" ont en principe tous la même taille.
    Sur STM32, je génère des ticks à 1 ms. Comme la fréquence porteuse d'une télécommande
    est aux alentours de 40 kHz, ça fait des compteurs de taille raisonnable. 25 ticks pour un bit
    court, 50 pour un bit long (c'est souvent un rapport de 1 à 2).


    Donc si c'est bien une télécommande:
    - Interruption bouton
    - Interdiction des interruptions bouton, démarrage de la machine d'états
    - Tant que le bouton reste appuyé, on envoie des trames
    - On teste le bouton en fin de trame pour être sûr de n'envoyer que des trames complètes.
    - Quand le bouton a été relâché, on ré autorise les interruptions du bouton.


    En gros, c'est ça...


    Pascal


    NB: Il aurait été bien plus productif de dire dès le départ, je veux faire une télécommande
    infrarouge à 3 boutons. Parce que même là, je ne suis pas certain que ça en soit une,
    et puis les 3 trames de votre document me semblent identiques....

  7. #6
    galou32

    Re : Interruption

    Merci pour toutes ces info,

    les trames présentées précédemment sont issue d'une télécommande RF de 27Mhz de jouet. Le problème étant que sur 4 jouets différents ils utilisent tous le même système. donc toutes les télecommandes commande tous les jouets. impossible de jouet à deux ou trois ou 4...
    Mon but étant de régler ce problème en utilisant toujours une porteuse de 27Mhz, mais en changeant les trames...

    Nota : je me suis lancé dans la RF y'a pas très longtemps. j'arrive tous de même à émettre et recevoir un signal BF 500Hz 1KHz... (tous cela avec uniquement des composants simples: transistor, self...).

    mais le filtrage à la réception est trés lourd (1 AOP en passe bande / fréquence).

    A force de lecture j'ai découvert la modulation numérique. Donc je me dis qu'avec un microcontrôleur je pourrais faire beaucoup plus avec moins de composant. surtout à la réception

    j'avance petit à petit au fur et à mesure des info que je grappille sur le net ou sur les forum. (interruption, timer...)

    je vais donc me pencher maintenant sur le terme "machine d'état" .
    merci

  8. #7
    galou32

    Re : Interruption

    Oups je n'ai pas répondu à vos questions désolé, du coup :

    oui je veux faire une télécommande.

    2ème info : les 3 trames présentées sur le schéma sont la commande marche avant; droite et gauche. je n'est pas mis la marche arrière.

    merci encore pour votre message précédent il me donne des pistes...

  9. #8
    Murayama

    Re : Interruption

    Bonjour!


    les trames présentées précédemment sont issue d'une télécommande RF de 27Mhz de jouet.
    Le problème étant que sur 4 jouets différents ils utilisent tous le même système. donc
    toutes les télecommandes commande tous les jouets. impossible de jouet à deux ou trois ou 4...

    L'idée est bonne, mais si tous les jouets attendent le même type de trame,
    quoi que vous fassiez, si vous recréez une télécommande, elle va forcément les
    commander tous. À moins de refaire aussi le récepteur de chaque jouet pour que
    chaque jouet obéisse à une trame différente.


    je vais donc me pencher maintenant sur le terme "machine d'état" .

    En fait, machine d'état, c'est un bien grand mot pour pas grand chose. L'idée est
    qu'un système a un état bien défini qui répond à des événements extérieurs qui font
    changer cet état. Mais c'est à vous de définir ces états. Apparemmment la télécommande
    est assez basique, la seule différence entre les trames étant le nombre de 0 entre les 1.
    Ceci dit, réfléchissez bien avant de vous lancer, parce qu'en l'état, je ne vois pas
    comment vous allez différencier les signaux pour les différents jouets.


    Pascal

  10. #9
    galou32

    Re : Interruption

    Bonjour.
    Oui mon but étant de recréer complètement une télécommande. Émetteur récepteur. Basic pour ma première. Avance recul... Etc avec 4 boutons
    Puis par la suite M attaquer au PWM pour le moteur et le servo. Mais ce sera bien plus tard. Je dois dabord bien assimiler l atmenga 328p. Et la logique de programmation. cordialement

  11. #10
    Murayama

    Re : Interruption

    Bonjour!


    L'avantage si vous faites tout, c'est que vous avez une grande liberté pour
    l'implémentation. À votre place, j'essaierais donc de transmettre des codes
    et de les recevoir. Faire quelque chose d'entièrement digital.
    Idées en vrac:
    1. Créer un système d'adressage. Par exemple, tous les codes que vous envoyez
    comporteraient une partie adresse et une partie code. Exemple: les 4 premiers
    bits forment une adresse (vous pouvez avoir 16 jouets différents, à vous d'adapter
    le nombre avec plus ou moins de bits).
    2. Les bits suivants forment la commande. Vous parliez d'avancer et reculer,
    qui pourraient être soit 2 commandes, soit une commande avec ensuite un paramètre.
    Si le paramètre est positif, ça avance, s'il est négatif, ça recule.
    3. Je parlais de paramètres, donc une partie paramètres, ce serait bien aussi.
    4. Cerise sur le gâteau, une checksum (CRC), pour vérifier que le message envoyé a
    été reçu sans erreur.


    A première vue, ça peut sembler compliqué, mais le plus difficile sera de transmettre
    un nombre de x bits correctement. Le reste, c'est du gâteau, d'où la cerise du (4).


    Après, vous pouvez ajouter un dip switch sur chaque récepteur pour configurer
    l'adresse.


    Pascal

  12. #11
    galou32

    Re : Interruption

    Merci beaucoup pour toutes ces précisions

Discussions similaires

  1. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41
  2. interruption I2C pic 18F
    Par jum0034 dans le forum Électronique
    Réponses: 11
    Dernier message: 05/04/2012, 14h46
  3. Interruption PIC
    Par warior31 dans le forum Électronique
    Réponses: 1
    Dernier message: 01/06/2011, 19h34
  4. Interruption
    Par scls19fr dans le forum Électronique
    Réponses: 1
    Dernier message: 22/06/2008, 14h05
  5. Interruption RB0
    Par invite91a05f0b dans le forum Électronique
    Réponses: 5
    Dernier message: 12/04/2007, 10h45
Découvrez nos comparatifs produits sur l'informatique et les technologies.