Programme qui ne fonctionne plus après le passage de Codevision à Winavr...
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Programme qui ne fonctionne plus après le passage de Codevision à Winavr...



  1. #1
    Canaillou2k5

    Programme qui ne fonctionne plus après le passage de Codevision à Winavr...


    ------

    Bonjour, j'ai atteint la limite de la version d'évaluation de Codevision AVR. Je suis donc passé à Win AVR, et je rencontre un problème avec un programme qui fonctionnait sous AVR Codevision et ne fonctionne plus sous Win AVR.

    Voici le programme en question:

    Code:
    #include <avr/io.h>
    #include <util/delay.h>
    
    int A,B,C,var=0;
    
    void init(void)
    {  
    SREG= 0b10000000;
    DDRA = 0b01111111;
    ADMUX= 0b01100111;
    ADCSRA=0b11101000;
    
    }
    
    void ISR(int _VECTOR(14))
     {            
    
    var = ADCH/0.5;
    A = (int)(var/100);
    B = (int)((var/10)-(10*A));
    C = (int)((var)-(10*B)-(100*A));
     }
    
    
    int main(void)
    {
    
    init();  
    
    while(1)
    {
    PORTA = 0b01110000;
    _delay_ms(0.001);
    PORTA = 0b01100000 + A;
    _delay_ms(0.001);
    PORTA = 0b01010000 + B;
    _delay_ms(0.001);
    PORTA = 0b00110000 + C;
    _delay_ms(0.001);
    } 
    }
    Donc c'est justement un programme que j'ai fait pour tester et pour commencer à développer sous WinAVR.

    C'est simplement un voltmètre qui affiche la tension sur 3 digits.

    J'ai tester l'affichage séparément en injectant une valeur dans la variable "var" et ça fonctionne, c'est au niveau de l'ADC que ça bloque.

    Merci de votre aide.

    -----

  2. #2
    invite98765423456
    Invité

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    D'abord, cela serait bien :
    - de donner le modèle d'avr
    - de faire une copie des messages d'erreur

    Chez moi, ce bout de code ne génère pas d'erreur avec avrstudio/winavr sur un mega644.

    th

  3. #3
    invite98765423456
    Invité

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    et puis ce genre de chose est tout à fait incorrect :
    var = ADCH/0.5;

    var est un int et ADCH n'est sûrement pas un float

    écris var=ADCH*2

    th

  4. #4
    ftorama

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    le "_delay_ms(0.001)" n'est pas folichon non plus....

    une fonction delay_us existe aussi, mais je ne sais plus si c'est en codevision ou en Gcc
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

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

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    En GCC ça existe : _delay_ms() et _delay_µs() chacun ayant bien sûr ses propres limites.

  7. #6
    invite65c8a3eb

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    A priori c'est un gros AVR puisqu'il y a un port A (DDRA).

    J'ai testé dans AVR-GCC et j'obtiens l'erreur suivante : "error: two or more data types in declaration specifiers"
    à cause de la déclaration de l'ISR.

    Quand j'utilise une interruption, j'écris directement la variable associée, du type "ISR(PCINT0_vect)". Essaie de faire ce changement et dis nous quoi.

  8. #7
    Canaillou2k5

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    Merci pour vos réponses.

    @thm, pour le coups du ADCH*2 je m'en suis rendu compte en effet je l'ai corrigé avant de lire ton message...
    @ftorama, merci pour l'info, je vient également par hazard de voir que us existe dans delay.h

    @Luj, Oui en effet c'est gros (mega8535) et je n'ai pas d'erreur à la compilation, j'ai continuer à chercher avant de lire vos réponses et j'ai remplacer le ligne comme tu me l'a dit par: "ISR(ADC_vect)"

    Je pense que c'est correcte car déja il m'affiche 000, donc il fait cette étape:

    var = ADCH*0.5;
    A = (int)(var/100);
    B = (int)((var/10)-(10*A));
    C = (int)((var)-(10*B)-(100*A));
    Donc l'ADC fonctionne bien, mais je récupère la valeur 0 d'ou ACDH=0 ?, comme j'ai changer le micro entre temps j'ai re-tester avec code vision et ca fonctionne bien (pour vérifier le cablâge...)

  9. #8
    ftorama

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    Les problèmes restants sont dans la déclaration de l'interruption.

    ISR est un type à part entière, pas besoin de void devant. Ensuite, la valeur de l'int fournie est un paramètre, donc pas de déclaration de type non plus.

    Ca donne donc "ISR (ADC_Vect)"

    Et il faut rajouter un "#include <avr/interrupt.h>"

    le petit tuto qui va bien: http://winavr.scienceprog.com/avr-gc...ng-winavr.html

    Gcc ça fait mal au début, mais on s'y fait vite
    Quand un homme a faim, mieux vaut lui aprendre à pecher que de lui donner un poisson.

  10. #9
    Canaillou2k5

    Re : Programme qui ne fonctionne plus après le passage de Codevision à Winavr...

    Pourtant c'est bien ce que j'ai fait, voici mon programme:

    Code:
    #include <avr/io.h>
    #include <avr/interrupt.h>
    #include <util/delay.h>
    
    int A,B,C;
    
    void init(void)
    {  
    SREG=0b10000000;
    DDRA = 0b01111111;
    ADMUX= 0b01100111;
    ADCSRA=0b11101000;
    }
    
    ISR(ADC_vect)
     {            
    A = (int)(ADCH*0.02);
    B = (int)((ADCH*0.2)-(10*A));
    C = (int)((ADCH*2)-(10*B)-(100*A));
     }
    
    int main(void)
    {
    
    init();  
    
    while(1)
    {
    PORTA = 0b01110000;
    _delay_us(1);
    PORTA = 0b01100000 + A;
    _delay_us(1);
    PORTA = 0b01010000 + B;
    _delay_us(1);
    PORTA = 0b00110000 + C;
    _delay_us(1);
    } 
    }
    Dernière modification par Canaillou2k5 ; 14/11/2010 à 16h56.

Discussions similaires

  1. [Blanc] chaudière mazout qui fume toujours noire après passage du chauffagiste +....
    Par invite3222fb69 dans le forum Dépannage
    Réponses: 8
    Dernier message: 23/10/2010, 13h56
  2. Passage d'un Programme de Flowcode V3 sous Isis Proteus 7
    Par invite27c900d3 dans le forum Électronique
    Réponses: 1
    Dernier message: 26/02/2010, 14h53
  3. [Blanc] Congelateur qui a fait disjoncté, puis qui fonctionne
    Par Olive30 dans le forum Dépannage
    Réponses: 2
    Dernier message: 03/03/2009, 16h14
  4. ampli qui ne fonctionne plus et qui chauffe a vide
    Par invite90c820fb dans le forum Électronique
    Réponses: 12
    Dernier message: 04/05/2008, 12h32
  5. Programme avec PIC16F505 ne fonctionne pas
    Par michel5002 dans le forum Électronique
    Réponses: 18
    Dernier message: 02/02/2008, 10h31
Découvrez nos comparatifs produits sur l'informatique et les technologies.