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

Spi + Uart



  1. #1
    noisyboxes

    Spi + Uart


    ------

    Bonjour à tous,
    je me pose une petite question,
    est-ce qu'il est possible d'utiliser l'uart d'un pic 16F876A et son interface SPI en même temps?
    en fait je voudrais envoyer un octet sur l'UART en utilisant une interruption, et en attendant la mise à un du flag, commander un composant externe par l'interface SPI.
    Comme le SPI tourne à environ 3MHz et mon UART à 921600 bauds, cela ne devrai pas poser de problème, dans le sens où j'aurais le temps d'envoyer mon octet de commande en SPI avant la mise à un du flag de fin de transmission sur l'UART.
    Voilà, qu'est-ce que vous en pensez, est-ce que c'est possible, où est-ce que çaa risque de générer des conflits ou tout simplement un non fonctionnement...

    bonne journée à tous!

    -----

  2. Publicité
  3. #2
    RISC

    Re : Spi + Uart

    Salut,

    Ca va être très très chaud, sauf si tes 921kbits/s ne sont pas en continu...

    Un petit calcul : 1Mbits/s (pour simplifier)
    Environ 10bits par octet recu / envoyé --> 100Ko /s
    Interruptions à 100KHz voire 200kHz (RX + TX)
    Donc (potentiellement) une interruption toute les 5us...
    Le processeur tourne au max à 20MHz (tosc) --> 5MHz (tcycl) donc une instruction = 200ns (au mieux).
    Tu as donc au pire 5 x 5 = 25 cycles instruction pour traiter RX et TX !!!!!

    Je prends le cas extreme qui montre donc que :
    1/ c'est pratiquement impossible d'utiliser le langage C
    2/ Meme en assembleur c'est pratiquement pas jouable.

    Les solutions :
    1/ utiliser un UART avec controle de flux (RTS /CTS)
    2/ travailler en half duplex (si c'est possible)
    3/ utiliser un micro plus puissant (plus rapide) comme un PIC18 ou un PIC24F

    Le SPI et l'UART peuvent tourner simultanément. La seule limitation est combien d'octets tu envoies et quel est le temps "inter-octet". Tout cela bien sur en fonction des contraintes temps réel de ton système (réponse due avant...us, ms)

    a+
    Dernière modification par RISC ; 08/03/2008 à 15h16. Motif: correction

  4. #3
    noisyboxes

    Re : Spi + Uart

    j'avoue que je n'ai pas tout compris dans ton calcul...
    J'ai pas compris non plus quand tu dis si les 921600 seront en continu ou pas...
    je suppose que tu voulais dire si l'envoi des données est en continu ou pas! si c'est ça, non, l'envoi des données n'est pas en continu.

    j'utilise un quartz de 14,7456MHz (nécessaire pour avoir 921600 bauds sur le 16F876A), à cette vitesse il me faut environ 6µs pour envoyer un octet en SPI (envoi + les quelques lignes de commande nécessaires).
    Et à 921600 bauds, il faut 10,8 µs juste pour l'envoi. Donc il me semble que ça devrait être possible.

    Ma question à la base était surtout de savoir si c'était possible de faire ces deux communications en parallèle.
    Bon après il va falloir que j'optimise mon prog au mieux pour que se soit gérable!!

  5. #4
    RISC

    Re : Spi + Uart

    Salut,

    N'oublie pas que pour chaque octet sur l'UART il faut ajouter 1 start bit et 1 ou 2 stop bits donc :
    1 start + 8 bits (ta data) + 1stop = 10 bits par octet utile "ton caratère".

    D'après ton dernier message je comprends que c'est surtout toi qui émet donc effectivement pas de PB. Si jamais tu recois en meme temps à 921600 et que tu programmes en C, il se peut très fortement que ton programme ne tourne pas assez vite pour lire les caractères et que tu finisses par les louper.
    Pour éviter cela, il faut alors faire du contrôle de flux (logiciel ou matériel). Dans ce cas ton micro envoie un message (ou un signal électrique) au PC pour lui dire d'arrêter d'envoyer pour éviter de perdre des octets.

    Les 2 unités dans ton système semble fonctionner surtout en émission. Est-ce correct ?
    Si c'est le cas pas de PB car elles sont totalement indépendantes.
    As-tu prévu de programmer en C ?

    a+
    Dernière modification par RISC ; 08/03/2008 à 17h20. Motif: correction

  6. #5
    noisyboxes

    Re : Spi + Uart

    salut,
    je sais qu'il faut ajouter les bits de stop et de start et éventuellement de parité.
    y a pas de problème de ce côté là.

    Et en effet, je ne fais quasiment qu'emettre, je ne reçoit que de façon aléatoire et plutôt rare (enfin par rapport à l'envoi de données).
    Pour ce qui est du SPI, en effet je l'utilise sutout en emmision, pour commander un potar, mais également en reception avec un CAN.

    Et enfn, pas de soucis je ne programme pas en C, mais en assembleur. C'est vrai que c'est un peu lourd et l'apprentissage assez long, mais ça permet d'avoir des programmes optimisés.

    merci et à +

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

    Re : Spi + Uart

    Bonsoir,

    Pour apprendre, je te recommande les excellents cours en français de Bigonoff si tu ne les connais pas déjà. De plus, ils sont en assembleur ;=)

    a+

  9. Publicité
  10. #7
    noisyboxes

    Re : Spi + Uart

    merci pour l'info,
    mais j'ai déjà parcouru plus d'un chapitre de ces formidables "livres".
    J'ai téléchargé récemment les cours sur les 18F, je vais peut-être mis mettre dans peu de temps!!
    tchao!

Discussions similaires

  1. Pic/uart
    Par ABN84 dans le forum Électronique
    Réponses: 5
    Dernier message: 06/03/2008, 09h46
  2. Uart
    Par souma29 dans le forum Électronique
    Réponses: 1
    Dernier message: 17/04/2007, 00h03
  3. Dspic30f6014 - Uart
    Par fab04 dans le forum Électronique
    Réponses: 1
    Dernier message: 31/01/2007, 00h23
  4. UART avr
    Par McFly dans le forum Électronique
    Réponses: 8
    Dernier message: 18/05/2006, 18h07
  5. carte UART
    Par sana dans le forum Électronique
    Réponses: 0
    Dernier message: 09/03/2005, 22h48
Découvrez nos comparatifs produits sur l'informatique et les technologies.