Utilisation du bus SPI au niveau de la programmation
Répondre à la discussion
Affichage des résultats 1 à 5 sur 5

Utilisation du bus SPI au niveau de la programmation



  1. #1
    Poseidon88

    Utilisation du bus SPI au niveau de la programmation


    ------

    Bonsoir à tous,

    En ce moment je développe un projet qui utilise le bus SPI d'un micro contrôleur ATMEL ref ATmega 8535.
    Les circuits de réception sont des 74HC164 montés à la chaine.

    L'horloge et le reset sont envoyés simultanément dans tous les CI.
    J'ai 5 CI sur le BUS.

    Tout fonctionne vraiment très bien, mais comme je me suis débrouillé pour programmer et faire fonctionner ce type de communication, j'ai programmé " comme je pensais " et donc je voudrais simplement que vous jetiez un oeuil sur mon bout de programme histoire de me dire :

    1) Si ma méthode générale est bonne.
    2) Si on peu améliorer mon écriture.
    3) Si je n'ai rien oublié.

    Donc voici mes sous programmes :

    Je précise que j'aurais besoin très souvent d'envoyer des données au cour du déroulement de mon programme.

    Code:
    void SPI_MasterTransmit(char cData)
            { 
    
            SPDR = cData;                 // écris dans le régistre SPDR la valeur de cData
    
            while(!(SPSR & (1<<SPIF)));   // attend la fin de la transmission
            
            };
    
    
    void trans (void)
          { 
    
          SPI_MasterTransmit(a);  
         
          SPI_MasterTransmit(b);
          
          };
    Dans ma boucle while principale, je donne une valeur à " a " et une à " b " et ensuite j'appel le sous programme avec " trans () "

    Bien évidement ce programme montre la transmission de seulement 2 valeurs 8 bits.

    Je ne connaissais absolument pas ce type de communication jusqu'à ce que quelqu'un de ce forum me l'apprenne et du coup j'ai cherché plusieurs semaines et j'y suis arrivé mais ... est-ce un carnage ?

    Merci pour vos futures réponses

    -----

  2. #2
    Poseidon88

    Re : Utilisation du bus SPI au niveau de la programmation

    Personne ?

  3. #3
    Jack
    Modérateur

    Re : Utilisation du bus SPI au niveau de la programmation

    En polling, je ne vois pas trop comment faire autrement. L'inconvénient est de monopoliser le µC à attendre pendant la transmission, mais selon l'application ça peut convenir.

    L'idéal est de travailler en interruption.

    A+

  4. #4
    invite74b5b8f7

    Re : Utilisation du bus SPI au niveau de la programmation

    Salut,

    Comme a dit Jack, avec des interruptions tu pourrais économiser du temps CPU.

    Sinon, on ne sait pas ce que fait ton programme en dehors de l´envoi mais tu pourrais:
    -transmettre à ta fonction SPI_Master_Transmit un pointeur vers une chaine de caracteres plutôt que de les envoyer un par un...

    -j´écrirais la fonction avec le test de fin d´envoi en premier car dans ta config, tu envois un char et attend la fin de son envoi (donc tu passes toujours l´envois de tes données á attendre) alors que si tu tests la fin de la transmission precedente, tu n´attendra pas la fin de transmission de ton dernier octet pour aller faire autre chose et si tu veux faire des choses entre deux envoi, ça ne te fera pas perdre de temps... (attention à l´initialisation du flag de fin de transmission )

    Code:
    void SPI_MasterTransmit(char cData)
            { 
    
            while(!(SPSR & (1<<SPIF)));   // attend la fin de la transmission précedente
    
            SPDR = cData;                 // écris dans le régistre SPDR la valeur de cData
            
            
            };
    PS: Pourquoi as tu des points virgules à la fin de tes fonctions?

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

    Re : Utilisation du bus SPI au niveau de la programmation

    Merci pour vos réponses

    Dans mon projet, le temps n'est absolument pas un inconvénient.

    Je vous explique le but principale :

    1) j'appuis sur un BP
    2) toutes les 5 secondes environ, un relais s'active jusqu'à arriver au onzième.
    3) je rappuis sur le BP
    4)toutes les 5 secondes environ, un relais se desactive jusqu'à arriver au premier.

    EDIT : le points virgules sont obligatoires dans CVAVR ...je programme un ATMEL

    Bien évidement, y'a énormément d'autres fonctions dans ce projet tel que 10 led bicolors, 12 BP , inters minidil etc,

    Mais une fois al séquence finie, le micro ne fera rien d'autre qu'attendre un nouvel appuis sur un des BP.
    Dernière modification par Poseidon88 ; 08/09/2010 à 12h13. Motif: oublie

Discussions similaires

  1. dsPIC et Bus SPI...
    Par invite8f8ffe44 dans le forum Électronique
    Réponses: 13
    Dernier message: 28/06/2013, 20h25
  2. Utilisation de mémoire SPI sur une ligne SPI utilisé
    Par VIIV dans le forum Électronique
    Réponses: 1
    Dernier message: 30/12/2009, 13h11
  3. Micro SD et bus SPI
    Par Toufinet dans le forum Électronique
    Réponses: 1
    Dernier message: 17/02/2009, 11h38
  4. Bus SPI en esclave...
    Par invite8f8ffe44 dans le forum Électronique
    Réponses: 8
    Dernier message: 30/04/2008, 10h17
  5. Bus SPI
    Par KHEOPS1982 dans le forum Électronique
    Réponses: 2
    Dernier message: 14/02/2008, 21h11
Découvrez nos comparatifs produits sur l'informatique et les technologies.