Bonjour,

Depuis deux semaines je tente de faire fonctionner deux modules MRF89XAM8A-I (http://ww1.microchip.com/downloads/e...Doc/70622B.pdf).

Mon but étant de communiquer entre les deux pour pouvoir faire un petit projet d'un côté, puis une commande de base qui allumera des LEDs en fonction de l'état de mon projet (ouverture, fermeture, stand-by, etc.).

J'ai déjà deux petits codes, le code de l'émetteur me semble pas mal car j'arrive à avoir des signaux sur IRQ1, ainsi que les pates SDK et SDI.

Je suis preneur de toute information, merci d'avance !

Code émetteur :
Code:
#include <18f26j50.h>           //Bibliothèque du PIC
#device ADC=8                   //ADC sur 8 bits si ADC=8
#fuses INTRC, WDT256            //Fuses nécessaires au fonctionnement du PIC
#use delay (clock=8000000)      //Clock du PIC

#use spi(MASTER, DO = PIN_C7 , CLK = PIN_B4, BITS=8, MODE=0)

#define RESET       PIN_C6
#define CSCON       PIN_B0
#define IRQ0        PIN_B1
#define CSDATA      PIN_B2
#define IRQ1        PIN_B3


//**********************************VARIABLES*********************************//
int16 rec_ms=0, vanne_open_rec=0, vanne_open=0, tps_open=0, selection=0;
int etat=0;
int etat_bouton=1, ancien_etat=0, anti_rebond=0;
int etat_bouton2=0, ancien_etat2=0, anti_rebond2=0;
int16 ms=0;

//**********************************FONCTIONS*********************************//
void init();                //Fonction d'initialisation
void timer0_interrupt();    //Interruption timer 0
void radio();               //Fonction d'envoie des données

//**********************************PROGRAMME*********************************//
void main()  //Fonction principale
{
    init();     //Appel de init pour faire les premières initialisations
    
    while(1)    //Boucle principle du programme
    {   

        if(ms>=500)
        {
        radio();
        ms=0;
        }
    }
}

void init()
{
    enable_interrupts(GLOBAL);            //Active les interruptions globales
    enable_interrupts(INT_TIMER0);        //Active l'interruption du timer 0

    setup_timer_0(T0_DIV_32 | T0_INTERNAL | T0_8_BIT);  //Init du timer0
    set_timer0(193);    //set le timer pour début à 1 ms
    
    output_low(CSCON);
    spi_xfer(0x01<<1);
    spi_xfer(0b10101000);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x05<<1);
    spi_xfer(0b00001111);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x0D<<1);
    spi_xfer(0b00001000);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x0E<<1);
    spi_xfer(0b00010001);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x00<<1);
    spi_xfer(0b10010000);
    output_high(CSCON);
    
    delay_ms(5);
}

void radio()
{
    
    output_low(CSDATA);
    spi_xfer(0x00);
    output_high(CSDATA);
    delay_us(5);
    output_low(CSDATA);
    spi_xfer(0x00);
    output_high(CSDATA);
    delay_us(5);
    output_low(CSDATA);
    spi_xfer(0x00);
    output_high(CSDATA);
    delay_us(5);
    output_low(CSDATA);
    spi_xfer(0x00);
    output_high(CSDATA);
    delay_us(5);
    
    output_low(CSDATA);
    spi_xfer(0x29);
    output_high(CSDATA);
    delay_us(5);
    output_low(CSDATA);
    spi_xfer(0x54);
    output_high(CSDATA);
   
}

#INT_TIMER0
void timer0_interrupt()
{
    set_timer0(193);    //remet à 1 ms lors d'un débordement
    rec_ms++;           //incr. variable
    tps_open++;         //incr. variable
    anti_rebond++;      //incr. variable
    anti_rebond2++;     //incr. variable
    selection++;        //incr. variable
    ms++;
}
Code récepteur :
Code:
#include <18f26j50.h>           //Bibliothèque du PIC
#device ADC=8                   //ADC sur 8 bits si ADC=8
#fuses INTRC, WDT256            //Fuses nécessaires au fonctionnement du PIC
#use delay (clock=8000000)      //Clock du PIC

#use spi(MASTER, DO = PIN_C7 , CLK = PIN_B4, BITS=8, MODE=0)

#define RESET       PIN_C6
#define CSCON       PIN_B0
#define IRQ0        PIN_B1
#define CSDATA      PIN_B2
#define IRQ1        PIN_B3

//**********************************VARIABLES*********************************//
int valeurtest;

//**********************************FONCTIONS*********************************//
void init();
void reception();
void microchip();

//**********************************PROGRAMME*********************************//
void main()
{
    init();
    
    while(1)
    {
        output_toggle(PIN_A0);  //Changement LED pour test
        delay_ms(200);          //petit délai de test
        

        microchip();            //Appel de la fonction microchip
    }
}


void init()
{
   
    
    output_low(CSCON);
    spi_xfer(0x01<<1);
    spi_xfer(0b10101000);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x05<<1);
    spi_xfer(0b00001111);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x0D<<1);
    spi_xfer(0b10111000);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x0E<<1);
    spi_xfer(0b01100001);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x012<<1);
    spi_xfer(0b00111000);
    output_high(CSCON);
    
    output_low(CSCON);
    spi_xfer(0x00<<1);
    spi_xfer(0b01110000);
    output_high(CSCON);
    
    delay_ms(5);

}

void microchip()
{
    if(input(IRQ1)==1)
    {
    output_low(CSDATA);
    valeurtest=spi_xfer(0x46);
    output_high(CSDATA);
    delay_us(100);
    output_low(CSDATA);
    valeurtest=spi_xfer(0x72);
    output_high(CSDATA);
    }
}