Simulation ATmega168
Répondre à la discussion
Affichage des résultats 1 à 4 sur 4

Simulation ATmega168



  1. #1
    mortaurat

    Simulation ATmega168


    ------

    Bonjour,
    je suis entrain de me mettre à la famille atmel, et j'en profite pour coder mes propres librairie.
    Cependant je bute sur un petit probléme avec la liaison serie.

    unsigned char data=0xf0;//variable globale data

    //interrupt when reception complete
    ISR(USART_RX_vect)
    {
    data = UDR0; // put the recieved byte value into the variable
    UDR0 = data; // Echo back the received byte back to the computer
    }

    void main()
    {
    usart_init();
    sei();//enable interrupts
    DDRB=0xff;//portC en sortie
    PORTB=0xff;
    _delay_ms(2000);
    while(1)
    {
    PORTB=data;
    }
    }
    Ma fonction usart_init(); est definie comme tel:
    void usart_init( )
    {
    //Set baud rate
    UBRR0 = 25;//9600bauds avec F_CPU = 4MHz
    UCSR0B = (1<<RXEN0)|(1<<TXEN0);//Enable receiver, transmitter
    UCSR0B |= (1 << RXCIE0); //Enable interrupt receiver
    // Set frame format: 8data, 1 stop bit, no parity
    UCSR0C = (3<<UCSZ00);
    }
    Ce programme trés simple genére une interruption lorsque le µc reçoit une donnée sur la ligne. Il stocke la donnée dans une variable data, et l'affiche sur le portB.

    Je travail en simulation sous isis (proteus) en attendant de recevoir mon materiel.

    L'interruption se génére parfaitement car on voit le retour de la lettre saisie au clavier dans l'hyper terminal virtuel.
    Par contre impossible d'afficher le code ASCII de la lettre saisie sur le portB !
    Cependant, lorsque je saisie une lettre dans l'hyper terminal avant la tempo _delay_ms(2000);, le code ASCII s'affiche sans probléme sur le port. Une fois la tempo passée, je n'arrive pas à changer la valeur ecrite sur le port.

    edit: par contre lorsque la tempo est passé et qu'on n'a pas saisie de lettre dans l'hyper terminal, le PORTB recopie bien la valeur d'initialisation de data (0xf0).
    C'est comme si mon while(1) ne s'executé qu'une seule fois...

    D'où peut venir le probléme à votre avis ?

    Merci

    -----
    Images attachées Images attachées  

  2. #2
    ftorama

    Re : Simulation ATmega168

    Je crois que c'est l'optimisation de code de Gcc qui te pose problème.

    En effet, le programme voyant que data n'est pas modifiée dans le while(), il reste figé sur la première valeur. Pour résoudre ça, il faut stipuler au compilo que la variable est modifiée par une fonction externe en ajoutant volatile.

    ce qui donne, DTC (Dans Ton Code bien sur ):
    Code:
    volatile unsigned char data=0xf0;//variable globale data
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  3. #3
    mortaurat

    Re : Simulation ATmega168

    Ca marche !

    Merci ftorama. C'est vraiment une "erreur" de dingue !
    Je commencé à devenir fous =)

  4. #4
    ftorama

    Re : Simulation ATmega168

    Citation Envoyé par mortaurat Voir le message
    Ca marche !

    Merci ftorama. C'est vraiment une "erreur" de dingue !
    Je commencé à devenir fous =)
    M'en parle pas, j'ai eu la même à une époque
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  5. A voir en vidéo sur Futura

Discussions similaires

  1. Réponses: 11
    Dernier message: 24/03/2010, 18h30
  2. la simulation
    Par invitef06b6daf dans le forum Électronique
    Réponses: 18
    Dernier message: 26/11/2009, 22h37
  3. simulation
    Par equation dans le forum Archives
    Réponses: 1
    Dernier message: 05/10/2005, 15h29
  4. pH et simulation
    Par invited61fc047 dans le forum Chimie
    Réponses: 7
    Dernier message: 29/06/2005, 14h43
  5. la simulation
    Par inviteb035d656 dans le forum Chimie
    Réponses: 0
    Dernier message: 14/06/2004, 10h47
Découvrez nos comparatifs produits sur l'informatique et les technologies.