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 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*********************************// 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:#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); } }
-----