Comunicação serial entre o PIC18F4620 e o PIC16F913

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

Comunicação serial entre o PIC18F4620 e o PIC16F913

Mensagempor Daniel dos Santos Costa » 16 Abr 2012 19:24

Estou tentando comunicar via serial usando a lib. do C18 usart.h o pic18F4620 e o pic16F913.

Usando o 4620 envio o comando ASCII para o 913 usando o putcUSART();, para ler os dados uso a função getcUSART();

Estou usando o baud rate de 9600.

Já consegui comunicar o 4620 com o PC, além do 913 e esta funcionando corretamente no PC, entretanto os dois pics não recebo os dados.

Vou anexar o código espero que possam ajudar.
Daniel dos Santos Costa
Bit
 
Mensagens: 14
Registrado em: 20 Out 2011 16:11

Mensagempor Daniel dos Santos Costa » 16 Abr 2012 19:27

Código: Selecionar todos
void grava_cartao(void)
{
   FSFILE *MyFile1, *MyFile2, *MyFile3;
   char nome[20], mode[3];
   unsigned char err, k;
   char *Sc;
   int result, i, j;
   float mV, Temp, Temp_Bla;
   char Heart[3];

   k= 0;


   // Configure Timer. Start timer interrupts
   Config_Timer( );


   do
   {
      Delay10KTCYx(50);
      err = FSInit();
      k++;
   }
   while ((k<10) && (err==FALSE));

   if ((k==10) && (err==FALSE))
   {
      TRISDbits.TRISD0 = 0;
      PORTDbits.RD0 = 1;                    //Error...
      erro = 1;
    }
   else
   {
      //TRISDbits.TRISD1 = 0;
      //PORTDbits.RD1 = 1;
      sprintf(&nome[0],"Temp_Amb.txt");
      sprintf(&mode,"w+");
      MyFile1 = FSfopen(nome,mode);

      sprintf(&nome[0],"Temp_Bla.txt");
      sprintf(&mode,"w+");
      MyFile2 = FSfopen(nome,mode);

      sprintf(&nome[0],"Humi.txt");
      sprintf(&mode,"w+");
      MyFile3 = FSfopen(nome,mode);
      

      for(Sc=&MyBuffer[0];*Sc!=0;Sc++);

      k=Sc-&MyBuffer[0];
      Dia=02;Mes=02;Ano=2012;Hora=14;Minuto=29;Segundo=10;

      SetClockVars(Ano,Mes,Dia,Hora,Minuto,Segundo);
      FSfwrite(&MyBuffer[0],1,k,MyFile1);
      FSfwrite(&MyBuffer[0],1,k,MyFile2);
      FSfwrite(&MyBuffer[0],1,k,MyFile3);


      while(1)
      {
         result = Read_ADC_Chan(ADC_CH1);   // Get the data
         mV = (result * 500) / 1023;       // Convert to mV
         Temp = mV;                      // Calculate temperature
         i = (int)Temp;                   // Integer part
         j = (int)((Temp-i)*10);          // Fractional part

         // Write to SD card
         FSfprintf(MyFile1, "\n%d.%d", i, j);


         while(BusyUSART( ));
         putcUSART('G');
         while(BusyUSART( ));
         putcUSART('1');
         while(BusyUSART( ));
         putcUSART(0x0D);
         //putcUSART('\r');
         
           if (DataRdyUSART( ))
         {   
             for (i=0; i<3; i++)
               Heart[i] = getcUSART();
             //return(0);   
         }

         // Write to SD card
         FSfprintf(MyFile2, "\n%c", Heart);

         
//         sprintf(buff,"\fTemperature:%d.%d", i, j);
//         lcd_escreve(buff);
//         sprintf(buff,"\nHeart:      %d   ", Heart);
//         lcd_escreve(buff);
//         result = Read_ADC_Chan(ADC_CH2); // Get the data
//         mV = (result * 500) / 1023; // Convert to mV
//         Temp_Bla = mV; // Calculate temperature
//         i = (int)Temp_Bla; // Integer part
//         j = (int)((Temp_Bla-i)*10); // Fractional part
//
//         // Write to SD card
//         FSfprintf(MyFile2, "\n%d.%d", i, j);
//
//         
//         result = Read_ADC_Chan(ADC_CH3); // Get the data
//         mV = (result * 500) / 1023; // Convert to mV
//         Temp = mV; // Calculate temperature
//         i = (int)Temp; // Integer part
//         j = (int)((Temp-i)*10); // Fractional part
//
//         // Write to SD card
//         FSfprintf(MyFile3, "\n%d.%d", i, j);


         if(PORTAbits.RA4 == 0)
         {
            FSfclose(MyFile1);
            FSfclose(MyFile2);
            FSfclose(MyFile3);
            break;
         }


         // Wait for a second. Variable "flag" is set whevenever an interrupt occurs
         while(!One_Sec_Flag);
         One_Sec_Flag = 0;
      }   
   }
}


Esta a função que envia os dados e deveria receber os dados.


Código: Selecionar todos
// This function initializes the USART
void Init_USART(void)
{
   OpenUSART(USART_TX_INT_OFF &   // Interrupção de transmissão desabilitada
   USART_RX_INT_OFF &            // Interrução de recepção desabilitada
   USART_ASYNCH_MODE &            // Modo assíncrono
   USART_EIGHT_BIT &            // Dados de 8 bits
   USART_CONT_RX &               //
   USART_BRGH_LOW,               // Alta velocidade
   51);                     // Baud rate de 9600
}


Esta função é a de configuração, caso esteja faltando algo por favor dê uma luz.
Daniel dos Santos Costa
Bit
 
Mensagens: 14
Registrado em: 20 Out 2011 16:11

Mensagempor Daniel dos Santos Costa » 16 Abr 2012 19:29

o pic16F913 esta no modulo de batimento cardiaco vendido na Sparkfun, vou anexar o manual desse modulo

http://danjuliodesigns.com/sparkfun/hrmi_assets/hrmi.pdf
Daniel dos Santos Costa
Bit
 
Mensagens: 14
Registrado em: 20 Out 2011 16:11

Mensagempor Daniel dos Santos Costa » 02 Mai 2012 08:32

Ola pessoal

Consegui resolver o problema.

Obrigado pelo apoio.

Daniel
Daniel dos Santos Costa
Bit
 
Mensagens: 14
Registrado em: 20 Out 2011 16:11


Voltar para PIC

Quem está online

Usuários navegando neste fórum: Bing [Bot] e 1 visitante

x