IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Embarqué Discussion :

Problème avec le bus SPI


Sujet :

Embarqué

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Problème avec le bus SPI
    bonjour a tous , voila j'ai un problème avec le bus spi car j'utilise 2 pic 16f877a un en Maitre et l’autre en Esclave , j'ai écrit le programme en Micro-Pascal , je décrit le programme , qu'on j’appuie sur le bouton de l'entre RB4 le Maitre lit la valeur envoyé par l'esclave qui est de la température et il l'affiche sur le portd , et qu'on je lance la simulation sur proteus l'esclave envoie les valeur mai le maitre ne lit pas la valeur correctement
    voici le programme du maitre :

    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    program in_out;
     
    var
     
      bIntRB4 , bIntRB5: boolean ;            // variable boolean pour interruption
     
      lec_temp : byte;                              // variable a lire du PORTB
     
      Chip_Select : sbit at RC6_bit;                  // selection de l'esclave
     
      Chip_Select_Direction : sbit at TRISC6_bit;     // direction de la pin SS de selection de l'esclave
     
      temp : byte ;                                   //
     
      buffer : byte ;                                 //
     
    procedure Interrupt ;
     
    begin
     
     //interruption liée a l'etat logique de RB4 a RB7
     
     if INTCON.RBIF = 1 then
        begin
     
        INTCON.RBIF := 0; // remise a  zero du bit d'état de l'interuption RB4 a RB7
     
        lec_temp := PORTB ; // il faut lire  du PORTB
     
        bIntRB4 := true ;
     
     
       end;
     
    end;
     
     
    begin
     
     CMCON := 7 ;
     TRISA:=%00000000; // toutes ligne du port A en sortie
     TRISB:=%01111111; // toute ligne du  port B en entrée sauf RB7
     TRISC:=%00010000; // toutes ligne du port c en sortie sauf RC4
     trisd :=$00 ;
     portd :=$00 ;
     INTCON := $00 ;
     INTCON.RBIE:= 1 ;              // activation de l'interruption RB4 a RB7
     INTCON.RBIF:= 0 ;             // effacement du flag RBIF
     INTCON.GIE := 1 ;             // autorisation des interruption global
     OPTION_REG := $00 ;           //
     OPTION_REG.NOT_RBPU := 1 ;   // désactivation pull_up portB
     OPTION_REG.INTEDG := 1 ;    // interruption RB0 sur front montant
     
     PORTA := $00;               // effacer PORTA
     
     PORTB := $00;              // effacer PORTB
     
     PORTC := $00 ;             // effacer portc
     
     bIntRB4:= false ;                                   //
     
     bIntRB5:= false ;                                   //
     
     Chip_Select := 1;                                   // Deselect DAC
     
     Chip_Select_Direction := 0;                         // Set CS#  pin as Output
     
     SPI1_Init() ;
     
     while  true  do
     
                                    if  PORTB.4 = 1 then
     
                                         begin
     
                                            Chip_Select := 0 ;       // selectionner l'esclave
     
                                            portd := SPI1_Read(buffer);  // lire la valeur contenue dan le buffer
     
                                            Delay_ms (50) ;       //
     
                                            Chip_Select := 1 ;  //   deselectionner l'esclave
     
     
                                         end;
     
     
    end.


    voici le programme de l'esclave :

    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    program Spi_Slave2;
     
    var
     
    b: word ;
     
    begin
     
     CMCON := 7 ;                             // desactivation des comparateur
     
     TRISA :=$FF ;                            // toute les ligne du PORTA   sont en entrée
     
     TRISD :=$00 ;                           //
     
     PORTD :=$00 ;                           //
     
     trisc :=%00011000 ;                     // SCLK en entrée et SDI en entrée SDO en sortie
     
     ADC_Init ;                              //  initialisation convertisseur
     
     SPI1_init();  // Initialize SPI module
     
     
      while true do
             begin
     
               b := ADC_Read (0) ;   // lecture du canal 0
     
               SPI1_Write(b) ;       // envoyer la valeur
     
               portd := b ;          //
     
             end ;
     
     
    end.

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 189
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 189
    Points : 11 571
    Points
    11 571
    Par défaut
    Salut,
    Je n'y connais rien du tout en Micro-Pascal mais dans le programme de l'esclave ne manque t-il pas des parenthèses à la ligne 19 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ADC_Init ;                              //  initialisation convertisseur
    On ne met pas de parenthèses comme ça ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ADC_Init() ;                              //  initialisation convertisseur
    Non ?
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2018
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2018
    Messages : 2
    Points : 1
    Points
    1
    Par défaut réponse
    merci beaucoup pour ta réponse je vais corriger le programme et il ya pas quelqu'un qui connait le Micro-Pascal merci

Discussions similaires

  1. problème avec le bus Creator
    Par m_lamba dans le forum Simulink
    Réponses: 0
    Dernier message: 11/07/2018, 11h31
  2. [AVR] ATmega644 : problème avec SPI
    Par fred7 dans le forum Embarqué
    Réponses: 8
    Dernier message: 11/12/2016, 19h31
  3. problème avec le bus PCI
    Par tenderstoune dans le forum Composants
    Réponses: 3
    Dernier message: 28/08/2007, 18h53
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo