Autor Tema: fprintf no me funciona!! Help me!!  (Leído 3411 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
fprintf no me funciona!! Help me!!
« en: 29 de Enero de 2007, 09:02:01 »
Hola a todos!!

Estoy tratando de utilizar el ejemplo de comunicacion ModBus que trae el CCS en la version 4.xxx

Hice un ejemplo para un esclavo, sobre la base de una placa testeada correctamente en comunicaciones pero en la cual al parecer no funciona la comunicacion con fprintf.

Pongo aqui el codigo (muy simple) del archivo que hice:
Código: [Seleccionar]
#include "C:\Archivos de programa\PICC V4\Projects\Modbus.h"
#include <LCD.C>
  #ZERO_RAM
#int_RDA
RDA_isr()
{

}

#int_CCP2
CCP2_isr()
{

}



#define MODBUS_BUS SERIAL
#define MODBUS_TYPE SLAVE
#define MODBUS_SERIAL_RX_BUFFER_SIZE 8
#define MODBUS_SERIAL_BAUD 9600
#define MODBUS_OUR_ADDRESS 10
#include "modbus.c"
void main()
{   modbus_init();
   fprintf(SLAVE_PC, "\n\rReady...");

   while(TRUE)
   {
      while(!modbus_serial_receive(FALSE));
      fprintf(SLAVE_PC, "\n\rBus Active");

      if((respond = (modbus_rx.address == MODBUS_OUR_ADDRESS)) ||modbus_rx.address == 0)))
      {
         fprintf(SLAVE_PC, "\n\rRequest for us");
         fprintf(SLAVE_PC, "\n\rFunction: %X", modbus_rx.func);
         switch(modbus_rx.func)
         {
            case 0x01:
               if(respond)
               {
                  //read the coils
               }
               break;
            case 0x02:
               if(respond)
               {
                  //read discrete inputs
               }
               break;
            case 0x03:
               if(respond)
               {
                  //read holding registers
               }
               break;
            case 0x04:
               if(respond)
               {
                  //read input registers
               }
               break;
            case 0x05:
               break;
            case 0x06:
               break;
            case 0x07:
               break;
            case 0x08:
               if(respond) {diagnostics_rsp(MODBUS_OUR_ADDRESS,
                              make16(modbus_rx.data[0],modbus_rx.data[1]),
                              make16(modbus_rx.data[2], modbus_rx.data[3]));}
               fprintf(SLAVE_PC, "\n\rResetting...");
               reset_cpu();
               break;
         }
      }
   }


   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(FALSE);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_ccp2(CCP_COMPARE_INT);
   lcd_init();
   enable_interrupts(INT_RDA);
   enable_interrupts(INT_CCP2);
   enable_interrupts(GLOBAL);
   setup_oscillator(False);

   // TODO: USER CODE!!

}

y el archivo .h aqui:

Código: [Seleccionar]
#include <18F252.h>
#device ICD=TRUE
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOOSCSEN                 //Oscillator switching is disabled, main oscillator is source
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV27                   //Brownout reset at 2.7V
#FUSES PUT                      //Power Up Timer
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOCPD                    //No EE protection
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=COMM1,enable=PIN_C5)

Mientras en el driver de CCS (es muy largo para ponerlo todo aqui) la declaracion del prot es asi:

Código: [Seleccionar]
   #use rs232(baud=MODBUS_SERIAL_BAUD, xmit=MODBUS_SERIAL_TX_PIN,
   rcv=MODBUS_SERIAL_RX_PIN, parity=N, force_sw, stream=MODBUS_SERIAL)

Si alguien me puede dar una pista lo agradeceria.
Para informacion les digo que usando printf la comunicacion anda OK, pero no asi con fprintf que todo el driver esta escrito con esa sentencia.... :( :( :( :(
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: fprintf no me funciona!! Help me!!
« Respuesta #1 en: 29 de Enero de 2007, 10:04:52 »
Tienes declarado dos puertos stream=MODBUS_SERIAL y stream=COMM1

¿porque para escribir usas fprintf(SLAVE_PC, "\n\rReady...");?

no tendrias que poner  fprintf(MODBUS_SERIAL, "\n\rReady...");  o fprintf(COMM1, "\n\rReady...");

BitPIC

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: fprintf no me funciona!! Help me!!
« Respuesta #2 en: 29 de Enero de 2007, 10:32:54 »
Si, perdon.
Hago la aclaracion, este ejemplo que postee aqui fue generado con el Wizard del CCS, pero en el que estoy utilizando ya tengo cambiados todos los fprintf al stream MODBUS_SERIAL, el SLAVE_PC ya no existe.... :mrgreen: :mrgreen: :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: fprintf no me funciona!! Help me!!
« Respuesta #3 en: 29 de Enero de 2007, 10:34:54 »
Sospecho que el fprintf no sabe a cual stream darle curso porque ambos estan apuntando al puerto USART, pines C6 y C7...

Puede ser eso??
Lo pruebo esta tarde... :lol: :lol:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado bitpic

  • PIC18
  • ****
  • Mensajes: 402
    • BitPIC
Re: fprintf no me funciona!! Help me!!
« Respuesta #4 en: 29 de Enero de 2007, 11:53:45 »
si los dos estan apuntando a los mismos pines si que puede ser. Lo que puedes hacer es utiliar dos puertos COM, uno por hardware y otro por software y asignarle distintos pines.

O no ponerle dos nombres, hacer la comunciacion con un solo puerto y un solo nombre.
BitPIC

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: fprintf no me funciona!! Help me!!
« Respuesta #5 en: 29 de Enero de 2007, 14:58:44 »
Hice esa prueba y comunica con ambos metodos, funciono el fprintf y el printf tambien !!!

Gracias !! :-/ :-/ :-/ :-/
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado CONTROL2

  • PIC10
  • *
  • Mensajes: 1
Re: fprintf no me funciona!! Help me!!
« Respuesta #6 en: 25 de Octubre de 2010, 10:58:14 »
Que bien que te haya funcionado
nos  podrias mostrarnos tus resultados
la modificacion en el codigo.