Port partage sur Atmega8
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

Port partage sur Atmega8



  1. #1
    bertrandbd

    Question Port partage sur Atmega8


    ------

    Bonsoir

    J'essaye d'utiliser sur un atmaga8, les lignes 6&7 du port D qui est partagé avec un comparateur analogique (AIN0 et AIN1). J'aimerai utiliser les lignes 6&7 du Port en entrée discrète et c'est là que j'ai un problème de configuration. D'après ce que j'ai compris de la datasheet, pour utiliser le comparateur analogique, il faut configurer D6 et D7 comme une entrée sans pull up. En fait, je n'arrive pas à savoir s'il est possible d'utiliser D6 et D7 en entrée discrète, comment faire pour passiver le comparateur (positionner ADC suffit-il ) rendre passif le comparateur?)

    Merci

    ps: j'utilise proteus pour simuler un interrupteur sur D7 pour commander une ligne sur D6. Quelle que soit la valeur de D7, la led est toujours allumer. Sur simulateur AVRstudio4, il me semble que le programme fonctionne

    -----

  2. #2
    invite7a49d0d5

    Cool Re : Port partage sur Atmega8

    Citation Envoyé par bertrandbd Voir le message
    (...) Sur simulateur AVRstudio4, il me semble que le programme fonctionne
    Bonjour,

    ben on est pas rendus...

    tu reviens si t'es sur que ça fonctionne pas ;O]

    après la simu... tu sais ce que j'en pense...

    mais bonn'semaine za toutes zé tous,
    vede
    ;O]
    ____________
    ...

  3. #3
    invite29971eb1

    Re : Port partage sur Atmega8

    Salut,

    alors si j'ai bien compris tu ne souhaites pas utiliser le comparateur mais utiliser les I/O classiques.

    Si c'est bien le cas, tu n'as rien à faire, configure ton port comme bon te semble (entrée, sortie, pull-up ou non) avec DDRD et PORTD.

    Sur les AVR, les fonctions alternatives sont toujours désactivées. Il faut activer ce dont on a besoin (et non désactiver tout ce qui est inutile, contrairement à d'autres familles)

    Edit: petite exception à ce que je viens de dire, les ports de programmation sont configurés par défaut. Par exemple, sur un Atmega32, il faut décocher le fusible JTAGEN pour pouvoir utiliser le port C en I/O. Mais ça ne rentre pas dans le cadre du programme à proprement parler puisque ça passe par les fuse bits

  4. #4
    mortaurat

    Re : Port partage sur Atmega8

    Citation Envoyé par ftorama Voir le message
    Sur les AVR, les fonctions alternatives sont toujours désactivées. Il faut activer ce dont on a besoin (et non désactiver tout ce qui est inutile, contrairement à d'autres familles)
    Ah bon, quels familles ? =)

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

    Re : Port partage sur Atmega8

    Merci Ftorama pour ta réponse Cela tend à confirmer que le logiciel qui tourne sur le simulateur d'avr studio est correcte. Il faut plutôt que je m'oriente vers la configuration de proteus

    Je vais de nouveau regarder cela de plus près

    Merci à tous

  7. #6
    bertrandbd

    Unhappy Re : Port partage sur Atmega8

    Bonsoir

    Cette fois, le doute n'est plus permis, je n'ai rien compris.

    Sur le montage joint, j'ai :
    - la diode D1 (la plus à droite) est allumée lorsque le switch est
    ouvert (masse) et s'éteint lorsque le switch est fermé.

    - la diode D2 (à gauche de D1) est éteinte lorsque le switch est
    ouvert (+Vcc) et s'allume lorsque le switch est fermé.

    - la diode D3 (à gauche de D2) est éteinte lorsque le switch est
    ouvert (+Vcc par le pull up) et s'allume lorsque le switch est fermé.

    - la diode D7 (la plus à gauche) est éteinte lorsque le switch est
    ouvert (+Vcc par le pull up) et s'éteint lorsque le switch est fermé
    (masse)

    J'avoue que je dois avoir fait une bourde mais à force d'avoir le nez collé dessus je ne la vois pas

    Merci pour votre aide
    Dernière modification par gienas ; 29/06/2010 à 07h12. Motif: Supprimé image et texte en mode pdf

  8. #7
    invite29971eb1

    Re : Port partage sur Atmega8

    Tes pièces ne sont pas encore validées donc je ne donnerai pas mon avis dessus, par contre.....un AVR, une led, un inter......tu me fermes ce simulateur à la c.. et tu montes ça sur une platine d'essai.

    A force d'utiliser ces usines à erreur, on ne voit plus les vrais problèmes, mais seulement ceux du logiciel, quand ce n'est pas l'inverse avec le simulateur qui oublie quelques paramètres pour te montrer un fonctionnement idéalisé.

    Autre solution, pour un test aussi simple, tu utilises le simulateur intégré dans AVR studio

  9. #8
    gienas
    Modérateur

    Re : Port partage sur Atmega8

    Bonjour bertrandbd et tout le groupe

    Pour être conforme à l'épinglé

    http://forums.futura-sciences.com/el...ointes-pj.html

    l'image pdf a été supprimée. Elle doit être présentée à nouveau, en extension jpg, gif ou png.

    Les listings peuvent être mis dans le corps des messages avec la balise code, outil #.

    .

  10. #9
    bertrandbd

    Re : Port partage sur Atmega8

    Désolé Gienas pour les pièces jointes donc pour le code:

    Code:
    #include <AVR/IO.H>
    
    /****************************************************************************/
    /*																			*/
    /*						PROGRAMME PRINCIPAL									*/				
    /*																			*/
    /****************************************************************************/
    
    int  main ()
    {
       
       DDRB = 0x00 ;				/* port B entièrement en entrée 	*/
       PORTB = 0b00000100 ;			/* pull up pour PB2					*/
    
       DDRD = 0b01111111 ;			/* initialisation sortie pour LED sauf pour D7 		*/
       PORTD |= 0x80 ;				/* pull up pour D7									*/
     /*  ACSR |= (1<<ADC) ;*/			/* suppression alimentation du comparateur (option)	*/
    
    
    
     while (1) 
    {   
       
    	if ((PINB & (1<< PINB0))== 0)  PORTD |= (1<< PD0) ; else PORTD &= (~(1<< PD0));
      
    	if ((PINB & (1<< PINB1))== 0)  PORTD |= (1<< PD1) ; else PORTD &= (~(1<< PD1));
    
    	if ((PINB & (1<< PINB2))== 0)  PORTD |= (1<< PD2) ; else PORTD &= (~(1<< PD2));
    
        if ((PIND & (1<< PIND7))== 0)  PORTD |= (1<< PD6); else PORTD &= (~(1<< PD6));
    	 
    
    /* ==============================  */
    }
    
     return (0) ;
    }
    Après, je débute en micro-contrôleur et je ne suis pas un expert en électronique donc je pense que le problème vient de ce que j'ai fait plutôt que du simulateur.

    Merci
    Images attachées Images attachées  

  11. #10
    invite29971eb1

    Re : Port partage sur Atmega8

    Seule D1 ne semble pas répondre comme prévu donc....bizarre autant qu'étrange...

    Je me demande quand même si tu ne devrais pas remplacer:
    Code:
    PORTD |= (1<< PD0)
    par :
    Code:
    PORTD=PIND|(1<<PD0)
    Une autre idée est de regarder le code compilé. Gcc a parfois une fâcheuse tendance à virer des choses qui devraient rester. L'assembleur ne devrait pas être compliqué à suivre.

    En dernier recours, il faut s'inquiéter du bon fonctionnement du simulateur.

    Dernière remarque, pense tout de suite à mettre tes résistances sur les leds. Si la simulation tolère leur absence, la réalité sera bien moins patiente.

  12. #11
    bertrandbd

    Re : Port partage sur Atmega8

    Merci pour tes réponses

    Citation Envoyé par ftorama Voir le message
    Seule D1 ne semble pas répondre comme prévu donc....bizarre autant qu'étrange...
    Pas tout à fait car D7 ne s'allume jamais


    Citation Envoyé par ftorama Voir le message
    Je me demande quand même si tu ne devrais pas remplacer:
    Code:
    PORTD |= (1<< PD0)
    par :
    Code:
    PORTD=PIND|(1<<PD0)
    Lorsque je fais cette modification rien se passe pour D1 mais D7 s'allume lorsque l'interrupteur se ferme et reste allumée lorsqu'il s'ouvre. A noter que l'entrée positive passe en haute impédance après la fermeture du switch malgré le résistance de pull up

    Citation Envoyé par ftorama Voir le message
    Une autre idée est de regarder le code compilé. Gcc a parfois une fâcheuse tendance à virer des choses qui devraient rester. L'assembleur ne devrait pas être compliqué à suivre.
    => Oui il va falloir que je regarde cela de plus près

    En dernier recours, il faut s'inquiéter du bon fonctionnement du simulateur.

    Citation Envoyé par ftorama Voir le message
    Dernière remarque, pense tout de suite à mettre tes résistances sur les leds. Si la simulation tolère leur absence, la réalité sera bien moins patiente.
    Oui entièrement d'accord; je ne l'avais pas fait car c'est plus le fonctionnement des ports que je voulais étudier pour résoudre mon problème

    Merci encore

  13. #12
    invite29971eb1

    Re : Port partage sur Atmega8

    Pour D7, la résistance R8 crée un diviseur de tension. Tu risques donc de te retrouver avec une tension intermédiaire sur PD7....vire R8

  14. #13
    bertrandbd

    Re : Port partage sur Atmega8

    Citation Envoyé par ftorama Voir le message
    Pour D7, la résistance R8 crée un diviseur de tension. Tu risques donc de te retrouver avec une tension intermédiaire sur PD7....vire R8
    Je l'ai fait mais cela ne change rien De plus, quand le switch est ouvert, R8 est déconnectée donc pas de diviseur de tension.

    A+

  15. #14
    invite29971eb1

    Re : Port partage sur Atmega8

    Citation Envoyé par bertrandbd Voir le message
    Je l'ai fait mais cela ne change rien De plus, quand le switch est ouvert, R8 est déconnectée donc pas de diviseur de tension.

    A+
    Elle est en trop de toutes façons

    Si tu remplaçais tes PIND0, PINB2 par les valeurs correspondantes.....tu n'as pas de warnings à la compilation?

  16. #15
    invite29971eb1

    Re : Port partage sur Atmega8

    Trop tard pour éditer....la suite:

    D'ailleurs, R1, R2, R9 et R10 ne servent à rien non plus et au contraire perturbent le fonctionnement. Regarde la tension sur PB0....tu as 100/110 Vcc soit quasiment Vcc si tu appuies sur le bouton auquel le pull-up vient remettre une couche. Si le bouton est relaché, tu as entre 100/120 Vcc et 100/180 Vcc (résistance de pull-up entre 20 et 80k). Bref, tu ne descends jamais sous la tension de 0 logique (0,2x Vcc).

    Retire toutes tes résistances sur les BP, raccorde ceux-ci entre chaque entrée et la masse et basta...ça devrait déja aller beaucoup mieux

  17. #16
    bertrandbd

    Re : Port partage sur Atmega8

    J'ai enlevé R1 et R2 mais cela revient au même

    La tension switch ouvert sur PB0 = 0V et sur PB1 = 4.99V
    La tension switch fermé sur PB0 = 5V et sur PB1 = 0V

    Il n'y a pas de pull up sur PB0 ni PB1 seulement sur PB2

    Les résistances R9 et R10 polarisent la tension d'entrée qui est en haute impédance par 0v pour PB0 et +5v pour PB1

  18. #17
    invite29971eb1

    Re : Port partage sur Atmega8

    Quel bazar.....l'intérêt des pull-ups, c'est de t'affranchir de toutes ces résistances externes. Ton inter entre la masse et l'entrée, des pull-ups internes sur chacune et ça marche (testé sur le simulateur d'AVR Studio).

    Ton programme est bon, mais ton montage et ta gestion des pull-ups est mauvaise

  19. #18
    bertrandbd

    Re : Port partage sur Atmega8

    J'ai un peu de mal avec les pull up

    R9 ou un pull up font le même fonction et donne une sortie avec le même comportement. Ce que je ne comprend pas c'est pouquoi avec une tension de 5 v (switch ouvert) la led est éteinte et pourquoi avec une masse elle s'allume

    R10 est un pull down car il ramène une masse à l'entrée. Switch ouvert la ked est allumée avec une masse à l'entrée et sxitch fermé le led s'éteint. C'est à l"opposé des 2 cas précédents.

    Faut-il en conclure qu'au reset la tension présente sur l'entrée détermine sur l'entrée vaut 1 logique pour une masse ou une tension de 5v?

  20. #19
    invite29971eb1

    Re : Port partage sur Atmega8

    Reprenons calmement.....un pull-up seulement sur PB2, pas sur les deux autres.....

    R9 est un pull-up sur PB1, donc elle pourrait être remplacée
    par la pull-up interne. R2 est inutile puisqu'on peut mettre directement la masse sur l'entrée.

    R10 est une pull-down.....soit....R1 reste inutile.

    Dans ton programme, tu testes si l'entrée est à 0: if ((PINB & (1<<PINB0)== 0)

    donc, ta sortie sera activée quand ton entrée est à 0. Inversement la led est éteinte quand l'entrée est à 1 (au Vcc). C'est ce qui est décrit dans ton programme, ni plus, ni moins.

    Si tu veux allumer ta led quand l'entrée est à 0, il faut plutot écrire if ((PINB & (1<<PINB0)== 1)

    ou inverser les deux opérations conditionnelles


    Citation Envoyé par bertrandbd Voir le message
    J'ai un peu de mal avec les pull up

    R9 ou un pull up font le même fonction et donne une sortie avec le même comportement. Ce que je ne comprend pas c'est pouquoi avec une tension de 5 v (switch ouvert) la led est éteinte et pourquoi avec une masse elle s'allume

    R10 est un pull down car il ramène une masse à l'entrée. Switch ouvert la ked est allumée avec une masse à l'entrée et sxitch fermé le led s'éteint. C'est à l"opposé des 2 cas précédents.

    Faut-il en conclure qu'au reset la tension présente sur l'entrée détermine sur l'entrée vaut 1 logique pour une masse ou une tension de 5v?

  21. #20
    bertrandbd

    Re : Port partage sur Atmega8

    Bonsoir

    ftorama tu as raison pour les pull up. J'ai simplifié mon exemple et cela fonction pour les LEDs pilotées par le port B. Cependant, cela ne fonctionne pas pour une LED pilotée par PD7 qui active une sortie sur PD6. Je vais regarder l'assembleur pour voir s'il y a quelque chose qui cloche


    Merci

  22. #21
    invite29971eb1

    Re : Port partage sur Atmega8

    tu as bien viré R8 aussi?

    Vire aussi ce qui ressemble à un voltmètre. Je sais pas ce que c'est, j'ai pas confiance

  23. #22
    bertrandbd

    Re : Port partage sur Atmega8

    Bonsoir

    J'ai supprimer tout ce qu eje pouvais mais rien n'y fait. Cela fonctionne avec des entrées et des sorties sur des ports différents mais cela ne donne rien sur le portD. En revanche cela marche sur le simulateur avr studio donc je commence à croire à un problème sur Isis

    A+

  24. #23
    invite29971eb1

    Re : Port partage sur Atmega8

    Citation Envoyé par bertrandbd Voir le message
    Bonsoir

    J'ai supprimer tout ce qu eje pouvais mais rien n'y fait. Cela fonctionne avec des entrées et des sorties sur des ports différents mais cela ne donne rien sur le portD. En revanche cela marche sur le simulateur avr studio donc je commence à croire à un problème sur Isis

    A+
    RRROOOOHHHH et pourtant j'avais prévenu

    Ces simulateurs ne sont que des sources de problèmes, pas des solutions....un AVR sur platine à trous avec les 3-4 composants autour et tu seras fixé

  25. #24
    bertrandbd

    Re : Port partage sur Atmega8

    Bonsoir


    J'ai ajouté une variable pour lire le portD et maintenant cela fonctionne Il doit y avori un problème de timing sur le simulateur ou bien le modèle a des bugs

    A+

Discussions similaires

  1. CAN Atmega8
    Par invite45724da5 dans le forum Électronique
    Réponses: 1
    Dernier message: 10/12/2009, 11h35
  2. Watchdog Atmega8
    Par invited60b6f1f dans le forum Électronique
    Réponses: 0
    Dernier message: 19/08/2008, 01h33
  3. CAN Atmega8
    Par invite73c4066c dans le forum Électronique
    Réponses: 0
    Dernier message: 13/07/2008, 22h56
  4. ATmega8
    Par invitec85fb8ec dans le forum Électronique
    Réponses: 0
    Dernier message: 05/08/2006, 15h21
  5. réseau: partage de port série
    Par invitebf62768c dans le forum Internet - Réseau - Sécurité générale
    Réponses: 0
    Dernier message: 30/07/2005, 19h12
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...