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

Interruption Atmega328p



  1. #1
    Elzaidir

    Interruption Atmega328p

    Bonjour à tous,

    je suis en train de programmer un système de gestion pour une pièce. Ce système conçu par moi-même permet de gérer la température, l'humidité, l'éclairage, etc... et s'articule autour d'un Atmega328p.
    J'ai choisi ce microcontrôleur simplement parce qu'il y a de nombreuses bibliothèques disponibles.

    Je programme sur AtmelStudio en utilisant un plug-in pour Arduino et via un USBasp.

    Je suis électronicien en deuxième année de formation, et vu la relative simplicité du circuit je n'ai pas de problème pour le hardware. Cependant je ne suis pas très fort en programmation Nous avons déjà vu l'assembleur et je connais assez bien la structure interne du µC.

    Donc mon problème est le suivant:
    j'ai une interruption qui arrive de façon périodique qui incrémente un compteur et contrôle les valeurs des capteurs. J'aimerais que lorsque le compteur arrive à une certaine valeur et que l'interruption se termine le programme reprenne à une adresse autre (et constante) que celle où il a été interrompu. Je pensais modifier le registre où est stocké l’adresse mais je ne vois pas comment

    Si quelqu'un à une idée je suis prenneur

    Merci déjà pour vos réponses

    -----

    Dernière modification par Elzaidir ; 27/01/2015 à 14h39.

  2. Publicité
  3. #2
    jiherve

    Re : Interruption Atmega328p

    Bonjour,
    Cela doit être faisable en dépilant le stack juste avant le rti (2 octets) et en remplaçant la valeur par celle choisie, c'est très casse gueule,il faut un au moins un registre dédié à l'IT.
    si le debut d'IT c'est:

    IN reg_int,sreg
    PUSH reg_int

    alors peut être que si l'on fait çà en sortie cela fonctionne:
    POP reg_int
    OUT sreg, reg_int
    POP reg_int;on sort l'adrese du stack
    POP reg_int;
    LDI reg_int,HIGH(ad_return)
    PUSH reg_int;on force la nouvelle adresse
    LDI reg_int,LOW(ad_return)
    PUSH reg_int
    RTI
    je ne suis pas sur de l'ordre MSB,LSB
    mais encore une fois achtung!!!
    JR
    l'électronique c'est pas du vaudou!

  4. #3
    Elzaidir

    Re : Interruption Atmega328p

    Merci pour ta réponse
    j'ai résolu le problème en modifiant un peux le code et un enclenchant le watchdog et en faisant donc un reset. Comme il fallait simplement revenir au menu de démarrage je me suis rendu compte que je ne devais conserver aucune variable.

    Désolé pour le temps de réponse j'étais occupé et mon smartphone ne marchais plus donc je n'ai pas pu répondre plus tôt.

    EDIT: j'ai aussi testé ton idée en modifiant plusieurs fois le code mais ça ne voulait pas marcher
    Dernière modification par Elzaidir ; 25/02/2015 à 20h45.

  5. #4
    jiherve

    Re : Interruption Atmega328p

    Bonsoir,
    il faudra que j'essaye, c'est quelque chose que j'ai utilisé il y a 35 ans sur 6809, très casse gueule, mais je n'ai pas encore tenté sur Atmega.
    JR
    l'électronique c'est pas du vaudou!

  6. #5
    jiherve

    Re : Interruption Atmega328p

    Bonjour,
    j'ai essayé et ce code:
    Code:
        pop rmp0;
        pop rmp1;purge de l'adresse de retour d'origine
        ldi rmp0,HIGH(adresse retour souhaitée)
        ldi rmp1,LOW(adresse retour souhaitée)
        push rmp1;
        push rmp0;
        ret;
    rmp0,rmp1 = R16,R17
    fonctionne pour un niveau de sous programme et aucun autre mouvement du stack que celui lié à l'appel.
    JR
    l'électronique c'est pas du vaudou!

  7. A voir en vidéo sur Futura

Sur le même thème :

Discussions similaires

  1. Atmega328p
    Par mondherhammami dans le forum Électronique
    Réponses: 1
    Dernier message: 13/06/2014, 18h33
  2. ATmega328P et TLC5940
    Par Ephemeredesign dans le forum Électronique
    Réponses: 4
    Dernier message: 02/02/2014, 13h22
  3. Programmation µC AVR Atmega328P-AU
    Par comode dans le forum Électronique
    Réponses: 8
    Dernier message: 30/10/2013, 02h33
  4. PIC : interruption externe et interruption on change ?
    Par jlg_47 dans le forum Électronique
    Réponses: 10
    Dernier message: 09/04/2012, 12h41