probleme d'UART sur uC Atmel 8515 programme avec IccAvr
Répondre à la discussion
Affichage des résultats 1 à 24 sur 24

probleme d'UART sur uC Atmel 8515 programme avec IccAvr



  1. #1
    invite9332c513

    Pour faire court :
    Dans le cadre d'un TIPE, je dois realiser un systeme de controle d'acces base sur carte a puce. Apres etudes des differents systemes nous avons choisi les Funcard basee sur le uC Atmel AVR90S8515 + EEprom externe.
    Nous utilisons IccAvr pour la programmation(une des raisons de notre choix car nous connaissons (a peu pres) correctement le C).
    Nos premiers tests sont peu satisfaisants : l'initialisation de l'UART est visiblement correcte car la variable CTS est sur ON (constate avec LookRS 232, un moniteur de port COM).
    Notre probleme est que nous n'arrivons pas a transferrer les donnees.
    alors que le programme est sense envoyer les donnees, LookRSne les recoit pas.

    Il est fort probable que nous ayons oublie une ligne d'initialisation dans le programme embarque ou qu'il faille declencher l'emission des donnees par un signal cote ordinateur, mais nous avons tres peu de documentation sur les I/O d'IccAvr car la documentation fournie avec le compilo est tres succinte.
    Si il y'a parmi vous un habitue d'IccAvr et de l'UART, ce serait sympa de nous aider.
    Merci d'avance.

    -----

  2. #2
    monnoliv

    As-tu un oscillo pour voir directement sur les broches Tx/Rx ? Avec quel timer génères-tu le baud-rate? Autorises-tu bien les interruptions d'envoi et de réception?
    Bàt,
    Ne soldez pas grand mère, elle brosse encore.

  3. #3
    invite9332c513

    Pour l'oscillo ca peut s'arranger au bahut.
    Le Baud rate est genere avec un quartz externe et le registre UBRR, comme sur tous les 90S.Cette partie du code est de toutes facons generee par l'Application Builder de IccAvr. Enfi j'ai fait un test en autorisant les interruption et un autre en les desactivants.
    J'ajoute que ma connaissances des uC est tres imparfaite donc il est possible que j'ai fait une erreur tres bete et apparement infaisable.

  4. #4
    monnoliv

    Bon, essaie d'avoir un oscillo pour être sûr que sa vient de l'AVR. Il faut commencer par s'assurer que la broche RX reçoit bien quelque chose (en supposant que le dialogue est entamé par l'AVR dès qu'il reçoit un ordre du PC).
    Tant que t'as l'oscillo, vérifie que le quartz oscille bien. Si pas d'oscillo, écrire un programme pour faire clignoter une LED.
    Bàt,
    Ne soldez pas grand mère, elle brosse encore.

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

    Le probleme est le suivant : le package de mon uC n'est pas un standard a n pattes : il est incorpore a une carte a puce : il s'agit en fait d'une carte de type Funcard. J'ai recupere les schemas de cablage interne mais je n'ai pas acces a tous les pins.

  7. #6
    JP

    Salut Thorhck,

    Pourrais tu nous donner les liens de site avec le cablage de la puce, le schema interne, la fréquence du quartz et le programme que vous avez fais ?

    A+

  8. #7
    invite9332c513

    alors on peut trouver le schema ici : (l'EEPROM n'est pas une 24C64 mais une 24C256 mais le reste est identique, a part evidemment que chez moi tt est integre dans la puce)
    http://seeit.chez.tiscali.fr/UPDATE/...1_60-SEEIT.PDF
    tt a la fin du fichier.

    le quartz est un 6.00 MHz

    Le programme est le suivant :


    [code:1:17228c846f]//ICC-AVR application builder : 04/02/2004 19:04:16
    // Target : 8515
    // Crystal: 6.0000Mhz

    #include <io8515v.h>
    #include <macros.h>

    void port_init(void)
    {
    PORTA = 0xFF;
    DDRA = 0x00;
    PORTB = 0xFF;
    DDRB = 0x00;
    PORTC = 0xFF;
    DDRC = 0x00;
    PORTD = 0xFF;
    DDRD = 0x00;
    }

    //UART0 initialisation
    // desired baud rate: 9600
    // actual: baud rate:9615 (0,2%)
    void uart0_init(void)
    {
    UCR = 0x00; //disable wh setting baud rate[color=red]//en mettant 0 on desactive[/color]
    UBRR = 0x26; //set baud rate
    UCR = 0x00; //enable [color=red]//et la on active avec 0[/color]
    }

    //call this routine to initialise all peripherals
    void init_devices(void)
    {
    //stop errant interrupts until set up
    CLI(); //disable all interrupts
    port_init();
    uart0_init();

    MCUCR = 0x00;
    GIMSK = 0x00;
    TIMSK = 0x00;
    SEI(); //re-enable interrupts
    //all peripherals are now initialised
    }

    //
    void main(void)
    {
    init_devices();
    //autre essai en ajoutant :[color=red]UART_T RANSMIT_ON();[/color]
    putchar('a');
    }[/code:1:17228c846f]

    Les points qui me font douter sont inscrits en rouge.

  9. #8
    JP

    Alors au niveau du UBRR=0x26 c'est bon ça te fait bien du 9615 bauds
    Mais l'UCR, tu le mets a 0 pour le désactiver et après tu le remet a 0 pour les réactiver ... ça ça ne marche pas.

    Pour savoir comment fonctionne l'UCR va faire un tour sur http://www.atmicroprog.com/cours/Atmel/uart.htm

    Dans ton cas tu ne valides ni l'émission ni la réception

    Tiens nous au courant
    A+

  10. #9
    invite9332c513

    j'avais verifie UBRR, ca me donne 38 en b10 ca colle, j'en suis sur.
    Je m'en doutais mais cette partie du code a ete genere par application wizard d'IccAvr, c'est pour ca que je ny ai pas touche bien que j'ai trouve ca bizarre.
    J'ai une beta mais la c'est gros quand meme !
    Merci encore.

  11. #10
    JP

    Jai pas dis que l'UBRR c'était pas bon j'ai dis que c'était bon
    C'est l'UCR qui n'est pas bon.

    Autre chose tu recupere ton caractere 'a' dans le buffer de l'uart mais comment il s'y retrouve vu qu'aucun contact n'est relié au RX de l'atmel ?

  12. #11
    JP

    oups c'est l'inverse tu mets 'a' dans le buffer mais le probleme est le meme TX n'est relié à aucun contact ?

  13. #12
    invite9332c513

    ouaip, j'avais compris je voulais juste dire que j'avais deja verifie.
    j'ai mis lUCT a $F8, mais j'ai tjrs un probleme. peut etre cette histoire de broches, faut que je revoie le schema de cablage.

  14. #13
    invite9332c513

    a priori, le port D pourrait servir de RXD et TXD (marque comme alternate function dans la datasheet page 72 figure 23)

  15. #14
    invite9332c513

    je crois que j'ai trouve l'astuce :

    When the pins are used for the alternate function, the DDRD and PORTD registers have to be set according to the alternate function description
    toujours dans les datasheet.
    Voila pourquoi aucun programme ne marche : tous sont prevu pour le packaging standard.
    plus qu'a trouver les bonnes valeurs...

  16. #15
    invite9332c513

    Ok, j'ai rien dit : ce sont ces pins qui ne sont pas connectes.

  17. #16
    invite9332c513

    la programmation serie passe par le PIN 5 en entree et en PIN 6 en sortie. On peut peut etre les utiliser dans ce cas, non ?
    remplacer les registres ?

  18. #17
    invite9332c513

    Je ne vois que ca : Sur mes 8 contacts, j'ai :
    -Vcc
    -RESET
    -masse
    -XTAL1
    -un non relie

    reste : l'horloge SCK
    -Une entree
    -Une sortie


    Par consequent, ce sont elles qu'il faut utiliser.
    Ceci dit, j'ai du mal a comprendre la necessite de SCK puisqu'on fixe le debit en bauds a partir de XTAL, non ?

  19. #18
    JP

    PD0 et PD1 peuvent servir d'entrées sorties ou "alternate function" RX TX mais ce sont les même pattes du composant la 10 et 11.

    Faudrait que tu commences par le début, regardé quel sont les entrées sorties disponibles sur les contacts de ta puce et ensuite chercher un moyen de transfère.

  20. #19
    JP

    Alors

    [code:1:2fbe3452af]-Vcc
    -RESET
    -masse
    -XTAL1
    -un non relie

    reste : l'horloge SCK
    -Une entree
    -Une sortie [/code:1:2fbe3452af]

    Ca c'est les connexions qui serve a la programation du 8515 ca na rien a voir avec ton Uart. Apres la programmation les connexions prennent la fonction que tu leur donnes dans ton programme.

    Ex: SCK c'est la patte 8 donc PB7
    Miso PB6
    etc
    Donc tu peux deja utilisé ces pattes pour faire tes entrées sorties

  21. #20
    invite9332c513

    Un autre truc qui m'epatte :
    Si les contacts de la carte n'ont rien a voir avec l'UART, comment se fait il que l'activation de l'UART de l'uC soit detecte par l'ordinateur et que la propriete RTS du port serie passe sur On ?

  22. #21
    JP

    Déjà tu parles de quoi de la liaison entre le programmateur qui est branché sur le port COM et ta carte ?

    Ou alors d'un montage que tu as fait qui relit L'uart du PC à la carte pour le transfere de données ? Et si c'est ca, comme l'as tu cablé ?

  23. #22
    invite9332c513

    non, il s'agit du montage (en fait un programmateur xp02) qui relie le PC au programmateur.
    Le fait est que lorsque l'UART est activee sur la carte, la propriete RTS du port serie passe sur on, ce qu'elle ne fait pas lorsque la fonction n'est pas appellee.
    De plus si je retarde avec une boucle placee avant la fonction, j'observe un delai avant le changement de propriete RTS.
    Si j'arrive pas a faire mieux je code en binaire avec ca !

  24. #23
    invite9332c513

    Au fait : DSL de te prendre ton tps. Merci bcp de ton aide.

  25. #24
    JP

    Tu as le schema de ton programmateur xp02 ?

Discussions similaires

  1. Problème avec un programme en C
    Par invitee16bc403 dans le forum Logiciel - Software - Open Source
    Réponses: 14
    Dernier message: 15/05/2007, 23h26
  2. Debuter avec un ATMEL
    Par inviteff201acd dans le forum Électronique
    Réponses: 2
    Dernier message: 26/02/2007, 13h25
  3. Pb d'uart avec un PIC 18f452
    Par invitebe7485be dans le forum Électronique
    Réponses: 2
    Dernier message: 24/03/2006, 10h14
  4. Probleme avec les microcontroleurs Atmel! Help!!
    Par invitee957dc39 dans le forum Électronique
    Réponses: 2
    Dernier message: 23/02/2006, 19h15
  5. Programme LCD ATMEL
    Par JP dans le forum Électronique
    Réponses: 8
    Dernier message: 30/10/2003, 17h44
Découvrez nos comparatifs produits sur l'informatique et les technologies.