spi sur ATmega - Page 2
Répondre à la discussion
Page 2 sur 2 PremièrePremière 2
Affichage des résultats 31 à 35 sur 35

spi sur ATmega



  1. #31
    invite3570b5f7

    Re : spi sur ATmega


    ------

    Euuuh bah c'est bon ca fonctionne nickel

    Voir la photo et le programme.

    Effectivement j'ai envoyé 4 octets comme tu me l'as dit.

    Bon maintenant j'ai plus qu'a mettre à zero les registres au départ parce que ca affiche n'importe quoi avant que j'ai appuyé sur le BP.

    Une question : est ce que je peux faire pareil avec des entrées ?

    Je m'explique : j'ai 16 BP à gérer donc faudrait que j'aille lire des valeurs lol.

    J'ai l'impression que ca va etre une usine à gaz mon système

    Code:
    /*****************************************************
    This program was produced by the
    CodeWizardAVR V2.04.6 Evaluation
    Automatic Program Generator
    © Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
    http://www.hpinfotech.com
    
    Project : 
    Version : 
    Date    : 16/08/2010
    Author  : Freeware, for evaluation and non-commercial use only
    Company : 
    Comments: 
    
    
    Chip type               : ATmega8535
    Program type            : Application
    AVR Core Clock frequency: 8,000000 MHz
    Memory model            : Small
    External RAM size       : 0
    Data Stack size         : 128
    *****************************************************/
    
    #include <mega8535.h>
    #include <delay.h>
    
    // SPI functions
    #include <spi.h>
    
    
    char a=0, b=0, c=0, d=0;
    
    
    
    void SPI_MasterTransmit(char cData)
            {
            PORTB.4 = 0;
    
            SPDR = cData;                 // écris dans le régistre SPDR la valeur de cData
    
            while(!(SPSR & (1<<SPIF)));   // attend la fin de la transmission
    
            PORTB.4 = 1;
    
            };
    
    
    
    
    void trans (void)
          { 
    
          SPI_MasterTransmit(a);  
         
          SPI_MasterTransmit(b);
         
          SPI_MasterTransmit(c);
    
          SPI_MasterTransmit(d);
          
          //delay_ms(500);
          
          PORTB.4 = 0; 
          
          };
          
    
    
    
    void main(void)
    {
    // Declare your local variables here
    
    // 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=P 
    PORTA=0x01;
    DDRA=0x00;
    
    // Port B initialization
    // Func7=Out Func6=In Func5=Out Func4=Out Func3=In Func2=In Func1=In Func0=In 
    // State7=0 State6=T State5=0 State4=0 State3=T State2=T State1=T State0=T 
    PORTB=0x00;
    DDRB=0xB0;
    
    // Port C 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 
    PORTC=0x00;
    DDRC=0x00;
    
    // Port D 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 
    PORTD=0x00;
    DDRD=0x00;
    
    
    // Analog Comparator initialization
    // Analog Comparator: Off
    // Analog Comparator Input Capture by Timer/Counter 1: Off
    ACSR=0x80;
    SFIOR=0x00;
    
    // SPI initialization
    // SPI Type: Master
    // SPI Clock Rate: 62,500 kHz
    // SPI Clock Phase: Cycle Start
    // SPI Clock Polarity: Low
    // SPI Data Order: MSB First
    SPCR=0x73;
    SPSR=0x00;
    
    while (1)
          { 
          
          if ( PINA.0 == 0)
          {
          PORTB.0 = 1;
          delay_ms(500);
           a=0xF4;
           b=0xAF; 
           c=0x81; 
           d=0x55;
          trans (); 
          PORTB.0 = 0;
          };
          };
          
    }
    Voilà et j'éspère que ce programme va aider des gents parce que j'ai vu sur le net que je suis pas le seul à avoir eu du mal à configurer le SPI.

    Sur la photo, les diodes allumées ne correspondent pas avec la photo...j'ai fait mumuse avec.

    -----
    Images attachées Images attachées  

  2. #32
    Jack
    Modérateur

    Re : spi sur ATmega

    Euuuh bah c'est bon ca fonctionne nickel



    Une question : est ce que je peux faire pareil avec des entrées ?

    Je m'explique : j'ai 16 BP à gérer donc faudrait que j'aille lire des valeurs lol.
    Oui, mais avec un circuit doté d'entrées.

    C'est du bon boulot. Quel courage pendant ces vacances ...

    A+

  3. #33
    invite3570b5f7

    Re : spi sur ATmega

    C'est du bon boulot. Quel courage pendant ces vacances ...
    Oui je sais mais vu le temps qu'il fait je préfère rester chez moi et bidouiller.

    L'appareil que je fait va être utilisé par pas mal de gents.

  4. #34
    invite3570b5f7

    Re : spi sur ATmega

    C'est du bon boulot. Quel courage pendant ces vacances ...
    Oui je sais mais vu le temps qu'il fait je préfère rester chez moi et bidouiller.

    L'appareil que je fait va être utilisé par pas mal de gents.

    Je crois que je vais utiliser un 74HC165 pour les interrupteurs mini dils et en fait je vais me contenter de 10 relais ca sera suffisants.

    10 relais
    10 LEDs bicolors
    10 inter mini dils
    10 BP poussoirs

    Par contre petites questions :

    - 1 ) Là poru mes test j'ai pas relier DATA OUT du dernier CI à MISO du µC et ca fonctionne. 0 quoi ca servirait que je le connecte ?

    - 2 ) Si je met des CI 74HC165, je fait comment ? J'utilise la même horloge que pour les MIC5821 ? Et je raccorde MISO que aux 74HC165 ?

  5. #35
    Jack
    Modérateur

    Re : spi sur ATmega

    - 1 ) Là poru mes test j'ai pas relier DATA OUT du dernier CI à MISO du µC et ca fonctionne. 0 quoi ca servirait que je le connecte ?
    L'intérêt de refermer la boucle, c'est de pouvoir contrôler que les données envoyées sont les bonnes en les relisant lorsqu'elle reviennent vers le maitre. C'est déjà un bon système de contrôle d'erreur. De plus, certain µC ne permettent de savoir lorsqu'une donnée a été intégralement délivrée et qu'on peut en renvoyer une autre. dans ce cas, on teste si le registre de réception est plein.

    - 2 ) Si je met des CI 74HC165, je fait comment ? J'utilise la même horloge que pour les MIC5821 ? Et je raccorde MISO que aux 74HC165 ?
    Je pense que c'est jouable. Il faudra bien vérifier que la polarité des signaux est conforme.

    A+

Page 2 sur 2 PremièrePremière 2

Discussions similaires

  1. Utilisation de mémoire SPI sur une ligne SPI utilisé
    Par invite4671370c dans le forum Électronique
    Réponses: 1
    Dernier message: 30/12/2009, 13h11
  2. Compteur sur ATMEGA (en C), ports différents
    Par invite7e815baa dans le forum Électronique
    Réponses: 3
    Dernier message: 08/10/2009, 09h50
  3. MLI sur Atmega !
    Par invite0ab4261e dans le forum Électronique
    Réponses: 1
    Dernier message: 19/12/2008, 10h06
  4. [AVRStudio4 + Atmega128 + SPI] Probleme sur le port SPI
    Par inviteff7a2099 dans le forum Électronique
    Réponses: 1
    Dernier message: 03/12/2008, 03h05
  5. Atmega => SBI et CBI sur des registres > à 0x1F
    Par Toufinet dans le forum Électronique
    Réponses: 0
    Dernier message: 17/04/2008, 15h39
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...