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

Programmation ATmega



  1. #1
    azizAVR

    Programmation ATmega


    ------

    Bonjour.
    je suis actuellement en stage PFE, mon Stage consiste à
    développer une carte électronique à base d'un Atmega 8515 pour la
    gestion et la commande des équipements (ventilateur,
    Alarme,compresseur....), j'ai développé un programme en C en utilisant
    le logiciel MicroC Pro for Avr, j'ai fait en 1er temps un ptit
    programme de Test c'est un progrm de clignotement est ça marche sur la
    simulation par ISIS,et méme sur la maquette d'essai ,mais mon Problème
    c'est que quand je fait un programme de Test qui contient des
    conditions sur l'etats des Port d'entrer comme Par Exp (if(PORTA.B0=0)
    PORTB.B1=1} le prog ça marche tjr sur ISIS mais quand j'ai fait le
    test sur une maquette d'essai les résultats ne correspond pas à ce que
    j'attende,volià l'exemple de Prg :

    void main() {
    DDRB = 0x00; //port B en entrée
    DDRC = 0xFF;//Port C en sortie
    DDRD=0xFF;
    DDRA=0xFF; // Set PORTC as output
    while(1){
    if(PINB=0x01)
    {
    PORTC=0xFF;
    PORTA=0x01;
    PORTD=0xFF;
    Delay_ms(300);
    PORTD=0x00;
    Delay_ms(300);
    }
    else {

    PORTC=0x00;
    PORTA=0x00;
    PORTD=0x00;

    }
    }
    }
    normalement ça marche la simulation sur ISIS, mais la maquette j'ai fait un schéma sur la maquette,mais le résultat ne correspond pas à ce je cherche , le résultat qui je trouve c'est comme j'ai le progr suivant:

    PORTC=0xFF;
    PORTA=0x01;
    PORTD=0xFF;
    Delay_ms(300);
    PORTD=0x00;
    Delay_ms(300);
    c'àd c'est comme j'ai aucune condition sur le Test des Ports , je crois que le problème c'est au niveau de câblage ou quoi exactement ??!!!
    Merci d'avance

    -----

  2. Publicité
  3. #2
    Tropique

    Re : Programmation ATmega

    Bonjour, et bienvenue sur Futura,

    Pour une nouvelle question, il convient d'ouvrir un nouveau sujet. Le déterrage d'une ancienne discussion n'est pas permis.
    Ton message a donc été déplacé dans une nouvelle discussion, munie d'un titre adéquat.
    Pas de complexes: je suis comme toi. Juste mieux.

  4. #3
    tayak

    Re : Programmation ATmega

    Bonjour,

    Il suffit peut-être de remplacer l'expression if(PINB=0x01) qui est incorrecte par if(PINB==0x01). En effet en C on teste une condition d'égalité par un double signe =.
    Le signe = unique représente l'affectation d'une valeur à une variable.

    Cordialement.

  5. #4
    azizAVR

    Re : Programmation ATmega

    et voilààà ça marche merciii , mais dmg j'ai un autre prb
    quand je connecte la pin B0 avec la masse pour réaliser PINB.B==0 je trouve comme résultat portA=0; PORTC=0;PORTD=0; pour c'est bien mais dès que j'enlève la masse sans connecter la pinB0 à la source 5v càd je laisse à l'air le µC considérer la pinb0 égal PIB.B0==1.
    maintenant le problème je crois c'est au niveau de porgr c bien ça ?!!

  6. #5
    tayak

    Re : Programmation ATmega

    Voir datasheet du 8515: résistances de pull-up sur tous les bits du port B.

  7. A voir en vidéo sur Futura
  8. #6
    azizAVR

    Re : Programmation ATmega

    bjr
    oui je sais que lorsque :
    DDRx=0, et PORTx=0 => PINx :in ; entrée sans résistance de rappel
    DDRx=0, et PORTx=1 => PINx :in ;entrée avec résistance de rappel
    DDRx=1, et PORTx=0 => PINx ut; sortie à zéro
    DDRx=1, et PORTx=1 => PINx ut; sortie à un
    et alors comment je peux éviter ce probleme en faite moi ce que je cherche c'est que le changement des états de PINB.B0 effectuée que lorsque le PINB.B0 est relié à la masse pour réaliser PINB.B0=0 ou bien lorsque est relié à la source 5V pour réaliser PIB.B0=1 et lorsque PINB.B0 à l'air normalement Haute impédance Z
    mercii

  9. Publicité
  10. #7
    azizAVR

    Cnvertisseur CAD d'un µC

    Bonjour,
    actuellement je suis en Stage PFA, j'ai un µC qui possède un Convertisseur CAN et 8 entrées analogique(PORTC) pour converti les données analogiques en numérique codé sur 10bits ,et j'ai trouvé qu'on peut écrire l'équation suivante :
    Résultat numérique = (Tension d'entrée / tension de référence AREF) x 1024 - 1
    Par exemple, pour avoir le résultat d'une tension d'entrée de 2,5 V avec une tension de référence de 5 V
    (AREF) nous aurons :
    Rn = (2,5/5) x 1024 = 511;
    bon j'ai pas compris la signification de 511?!!
    je veux réaliser un programme avec l'outil MicroC for Avr (langage C) qui va converti 3 entrées analogique (Température interne+externe+ humidité) et ensuite l'afficher ces données en temps réel sur un LCD . comme information j'ai utilise un capteur CTN qui délivre une tension entre (5v-0) mon problème si que je veux connaitre la relation exacte entre la valeur d'entrée analogique par EXP 2,5 correspond quoi en numérique (exp en HEXA ou BINAIRE) pour que je puisse faire des testes par exp si ADC=0x1FF alors PORTB=0xFF
    mais je sais pas comment avoir la correspondance mathématique entre la valeur analgique et numerique(HEXA)???
    merci d'avance

  11. #8
    azizAVR

    Re : Cnvertisseur CAD d'un µC

    Salut tous le monde,
    j'ai un projet de fin d'étude, dans ce PFE j'ai réalisé une carte électronique sur logiciel ISIS et j'ai réalisé un circuit imprimé avec Ares,mon problème c'est que la société qui va fabriquer le PCB a travers une machine qui demande un fichier Gerber, j'ai essayé par converti le schéma de Ares de circuit imprimé en fichier gerber mais ça ne marche pas, donc si qlq un qui connait la façon la plus simple pour passer d'un schéma de Ares à un fichier gerber soit par le mm logiciel Ares ou bien aveec un autre logiciel
    svp c'est urgenttttt
    merci d'avance

  12. #9
    jeandedieu

    Re : Cnvertisseur CAD d'un µC

    Salut tout le monde j'ai trouvé un programme écrite
    c'est le programme d'un mesureur de niveau de tension
    aider moi quel est le logiciel qui utilise ce langage car j'ai essayé avec MICKRO C ET ANDRUINO sa ne marche pas: voici le programme en question
    // Declare your global variables here
    #include <stdio.h>
    #include <delay.h>
    #include <math.h>
    #define ADC_VREF_TYPE 0x00
    //Déclaration des entrées
    #define MesureBatterie PINA.0
    //Déclaration des sorties
    #define led_vert1 PORTC.5
    #define led_vert2 PORTC.6
    #define led_vert3 PORTC.7
    #define led_jaune1 PORTC.3
    #define led_jaune2 PORTC.4
    #define led_rouge1 PORTC.0
    #define led_rouge2 PORTC.1
    #define led_rouge3 PORTC.2
    // Read the AD conversion result
    unsigned int read_adc(unsigned char adc_input)
    {
    ADMUX=(adc_input | (ADC_VREF_TYPE && 0xff));
    // Delay needed for the stabilization of the ADC input voltage
    // Start the AD conversion
    ADCSRA=0x40;
    // Wait for the AD conversion to complete
    while ((ADCSRA && 0x10)==0);
    ADCSRA=0x10;
    return ADCW;
    // ADC initialization
    // ADC Clock frequency: 1000,000 kHz
    // ADC Voltage Reference: AREF pin
    // ADC High Speed Mode: Off
    // ADC Auto Trigger Source: None
    ADMUX=(ADC_VREF_TYPE && 0xff);
    ADCSRA=0x84;
    SFIOR=0xEF;
    }
    void main(void)
    {/
    / Declare your local variables here
    float V_Batterie;
    float Tens_Bat_equi;
    unsigned int Bat_equi;
    // Input/Output Ports initialization
    // Port A initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTA=0x00;
    DDRA=0x00;
    // Port B initialization
    // Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In
    // State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T
    PORTB=0x00;
    DDRB=0x00;
    // Port C initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTC=0x00;
    DDRC=0xFF;
    // Port D initialization
    // Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out
    // State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0
    PORTD=0x00;
    DDRD=0xFF;
    // Timer/Counter 0 initialization
    // Clock source: System Clock
    // Clock value: Timer 0 Stopped
    // Mode: Normal top=FFh
    // OC0 output: Disconnected
    TCCR0=0x01;
    TCNT0=0x00;
    OCR0=0x00;
    // Timer/Counter 1 initialization
    // Clock source: System Clock
    // Clock value: Timer 1 Stopped
    // Mode: Normal top=FFFFh
    // OC1A output: Discon.
    // OC1B output: Discon.
    // Noise Canceler: Off
    20
    // Input Capture on Falling Edge
    // Timer 1 Overflow Interrupt: Off
    // Input Capture Interrupt: Off
    // Compare A Match Interrupt: Off
    // Compare B Match Interrupt: Off
    TCCR1A=0x00;
    TCCR1B=0x02;
    TCNT1H=0x00;
    TCNT1L=0x00;
    ICR1H=0x00;
    ICR1L=0x00;
    OCR1AH=0x00;
    OCR1AL=0x00;
    OCR1BH=0x00;
    OCR1BL=0x00;
    // Timer/Counter 2 initialization
    // Clock source: System Clock
    // Clock value: Timer 2 Stopped
    // Mode: Normal top=FFh
    // OC2 output: Disconnected
    ASSR=0x00;
    TCCR2=0x00;
    TCNT2=0x00;
    OCR2=0x00;
    // External Interrupt(s) initialization
    // INT0: Off
    // INT1: Off
    // INT2: Off
    MCUCR=0x00;
    MCUCSR=0x00;
    // Timer(s)/Counter(s) Interrupt(s) initialization
    TIMSK=0x00;
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    while (1)
    {
    //MESURE DE LA TENSION DE LA BATTERIE
    Bat_equi = read_adc(MesureBatterie); //récupère la tension MesureBatterie
    Tens_Bat_equi = (5*(float)Bat_equi)/1024 ; //conversion de la tension batterie (8-14V) en
    valeur numérique (0-5V)
    V_Batterie = Tens_Bat_equi*218/68; //recalcule la vraie tension batterie
    delay_ms (50); //attente de 50 ms
    //LEDS EN FONCTION DE LA TENSION DE LA BATTERIE
    21
    if (Bat_equi <=8) //Si tension de batterie inférieure ÃÂ* 8V
    {
    led_rouge1=1; //Allume led rouge1
    }
    else
    {
    if (Bat_equi <=10) //Si tension de batterie inférieure ÃÂ* 10V
    {
    led_rouge1=1; //Allume led rouge1
    led_rouge2=1; //Allume led rouge2
    }
    else
    {
    if (V_Batterie <=10.3) //Si tension de batterie inférieure ÃÂ* 10.3V
    {
    led_rouge1=1; //Allume led rouge1
    led_rouge2=1; //Allume led rouge2
    led_rouge3=1; //Allume led rouge3
    }
    else
    {
    if (V_Batterie <=10.5) //Si tension de batterie inférieure ÃÂ* 10.5V
    {
    led_rouge1=1; //Allume led rouge1
    led_rouge2=1; //Allume led rouge2
    led_rouge3=1; //Allume led rouge3
    led_jaune1=1; //Allume led orange1
    }
    else
    {
    if (V_Batterie<=10.8) //Si tension de batterie inférieure ÃÂ* 10.8V
    {
    led_rouge1=1; //Allume led rouge1
    led_rouge2=1; //Allume led rouge2
    led_rouge3=1; //Allume led rouge3
    led_jaune1=1; //Allume led orange1
    led_jaune2=1; //Allume led orange2
    }
    else
    {
    if (V_Batterie<=11) //Si tension de batterie inférieure ÃÂ* 11V
    {
    led_rouge1=1; //Allume led rouge1
    led_rouge2=1; //Allume led rouge2
    led_rouge3=1; //Allume led rouge3
    led_jaune1=1; //Allume led orange1
    led_jaune2=1; //Allume led orange2
    led_vert1=1; //Allume led verte1
    }
    else
    {
    22
    if (V_Batterie <=11.5) //Si tension de batterie inférieure ÃÂ* 11.5V
    {
    led_rouge1=1; //Allume led rouge1
    led_rouge2=1; //Allume led rouge2
    led_rouge3=1; //Allume led rouge3
    led_jaune1=1; //Allume led orange1
    led_jaune2=1; //Allume led orange2
    led_vert1=1; //Allume led verte1
    led_vert2=1; //Allume led verte2
    }
    else
    {
    if(V_Batterie<=12) //Si tension de batterie inférieure ÃÂ* 12V
    {
    led_rouge1=1; //Allume led rouge1
    led_rouge2=1; //Allume led rouge2
    led_rouge3=1; //Allume led rouge3
    led_jaune1=1; //Allume led orange1
    led_jaune2=1; //Allume led orange2
    led_vert1=1; //Allume led verte1
    led_vert2=1; //Allume led verte2
    led_vert3=1; //Allume led verte3
    }
    }
    }
    }
    }
    }
    }
    }
    }
    }
    23
    }

    }


    void loop() {
    // put your main code here, to run repeatedly:

    }

  13. #10
    Yoruk

    Re : Cnvertisseur CAD d'un µC

    Salut et bienvenue,

    Déterrage de sujet, tu vas te faire taper sur les doigts par les modos...

    J'ai tendance à dire qu'il s'agit de code arduino, je reconnais le template... Après, c'est peut-être aussi du code C atmel, à lire avec AVR Studio.

    Faut voir aussi où tu as pompé le code... qui est d'ailleurs bourré de fautes de syntaxe.

    EDIT : le code est un poil lourd pour une telle application...
    La robotique, c'est fantastique !

Sur le même thème :

Discussions similaires

  1. [help]Programmation atmega et DAPA
    Par rastakile dans le forum Électronique
    Réponses: 0
    Dernier message: 26/06/2011, 21h29
  2. programmation ATmega
    Par gcortex dans le forum Électronique
    Réponses: 2
    Dernier message: 24/05/2010, 10h37
  3. besoin cour programmation microncontroleur avr atmega 16!!!help plz
    Par lampofdrog dans le forum Électronique
    Réponses: 3
    Dernier message: 16/05/2010, 16h43
  4. Programmation ISP ATmega
    Par Kilhian dans le forum Électronique
    Réponses: 12
    Dernier message: 16/10/2008, 20h25
  5. atmega 8
    Par lampard123 dans le forum Électronique
    Réponses: 1
    Dernier message: 11/02/2008, 12h04
Découvrez nos comparatifs produits sur l'informatique et les technologies.