Autor Tema: PIC con dos UART por Hardware  (Leído 9136 veces)

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

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC con dos UART por Hardware
« Respuesta #15 en: 17 de Noviembre de 2009, 13:52:20 »
Fíjate lo pines que toleran 5V, porque por ejemplo USART podes usar sin ningún adaptador, después I2C se puede trabajar sin adaptador, el LCD creo que también funciona, el teclado no se como será, pero si es común no tienes problemas en implementarlo en 3.3V.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: PIC con dos UART por Hardware
« Respuesta #16 en: 18 de Noviembre de 2009, 10:13:50 »
Gracias encontre el TXB0108PWR, vomos a ver que sale de todo esto.
Gracias a todos.

Desconectado elektro_shock

  • PIC10
  • *
  • Mensajes: 5
Re: PIC con dos UART por Hardware
« Respuesta #17 en: 20 de Noviembre de 2009, 22:42:21 »
Saludos, puedes trabajar una entrada por hardware y la otra por software, la de software es bueno poner la entrada Rx en algun puerto B5...B7 y ahabilitar la interrupcion en Rb asi puedes preguntar si llegaron datos en tu puerto seria (claro habiendo definido un stream previamente), eso si debes tener mucho cuidado con lo que conecte en el resto de pines b5..b7 para discriminar tu interrupcion....   saludos

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: PIC con dos UART por Hardware
« Respuesta #18 en: 27 de Noviembre de 2009, 22:07:46 »
Hola electro shock, ya la estoy trabajando con la UART por soft y por hard pero cuando recibo por soft y justo hay una interupcion el dato se pierde o queda por la mitad y no sive, creo que por hard no pasara eso ya que la UART recpciona todo aunque este haciendo otra cosa.
Saludos

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC con dos UART por Hardware
« Respuesta #19 en: 27 de Noviembre de 2009, 22:14:55 »
Utiliza la recepción por interrupción por timers que a mostrado Nocturno en este post. Si haces correctamente el tratado de las interrupciones no tendrás problemas.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: PIC con dos UART por Hardware
« Respuesta #20 en: 27 de Noviembre de 2009, 22:27:47 »
Hola la estube biendo y pregunto es para recepcion sincronica no? porque lo que yo tengo es asincronica, despues de eso me voy a quemar el coco e implememtarla lo unico que tengo que pasarla a ASM ya que no se C, tengo que poner con eso!
Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC con dos UART por Hardware
« Respuesta #21 en: 27 de Noviembre de 2009, 22:34:21 »
Es asincronica.


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: PIC con dos UART por Hardware
« Respuesta #22 en: 27 de Noviembre de 2009, 22:38:02 »
Te puedo hacer una pregunta ya que no se C, hay alguna manera de pasarlo a ASM, sabes de algun programa
Gracias

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: PIC con dos UART por Hardware
« Respuesta #23 en: 27 de Noviembre de 2009, 23:54:27 »
Te puedo hacer una pregunta ya que no se C, hay alguna manera de pasarlo a ASM, sabes de algun programa
Gracias

Lo que hace el programa de Nocturno es sencillo. Por ejemplo para comunicación a 9600 tenemos que cada bit tiene un tiempo de 104us, entonces calculas para que el timers interrumpa a ese tiempo, determinas si es el bit Start y comienzas a recibir el Byte. 

Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: PIC con dos UART por Hardware
« Respuesta #24 en: 07 de Diciembre de 2009, 09:14:49 »
Hola, estaba por programar este PIC18F46J50, por supuestamente tener "dos UARTS", el caso es que las tiene pero comparten el mismo pin de TX y RX, son UARTS que se puden multiplexar y comparten los pines de Tx y RX asi que no me sirve, estoy necesitando uno que tenga los pines de comm separados, alguien sabe que puedo usar.
Gracias

Desconectado macedo

  • PIC18
  • ****
  • Mensajes: 270
Re: PIC con dos UART por Hardware
« Respuesta #25 en: 07 de Diciembre de 2009, 15:35:29 »
Hola que opinan de este: PIC18F67J50, ya que este si tiene las dos Tx y RX separadas.
Saludos

Desconectado sledgehammer

  • PIC10
  • *
  • Mensajes: 2
Re: PIC con dos UART por Hardware
« Respuesta #26 en: 07 de Febrero de 2012, 00:23:03 »
El pic 18F26J50 tiene 2 USARTs, una con pines fijos (EUSART1) y la otra con pines remapeables (EUSART2) ambas implementadas con hardware.

Desconectado aldoMO

  • PIC10
  • *
  • Mensajes: 18
Re: PIC con dos UART por Hardware
« Respuesta #27 en: 05 de Mayo de 2015, 21:03:33 »
hola a todos...
estoy trabajando con un pic 18f26j50, y un modulo sim900d...
pero tengo un problema en una parte del codigo...
Lo que quiero hacer es lo siguiente:
Con un pulsador enciendo el modulo sim900d, y realizo la rutina de inicializacion, hasta este punto anda bien,
pero ademas de eso necesito que cuando llegue un msj, o una llamada,  el sim900d muestra en el monitor serial una cadena de caracteres, por ende estaria enviando datos por el puerto serial, y yo necesito activar la interrupcion por puerto serial (RDA2).
Estoy usando 2 puertos seriales, uno para enviar comandos AT desde el pic al sim900, y otro para monitorear lo que hace el pic...
hasta ahora no en logrado que se active la interrupcion por puerto serie...
Espero puedan ayudarme, y decirme que puedo estar haciendo mal...
gracias de antemano..
les dejo el codigo...


#include <18F26J50.h>
#device adc=10

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES HSPLL                    //High Speed Crystal/Resonator with PLL enabled
#FUSES NODSBOR                  //BOR disabled in Deep Sleep
#FUSES NODSWDT                  //Deep Sleep Watchdog Timer disabled
#FUSES STVREN                   //Stack full/underflow will cause reset


#use delay(clock=20000000)

#pin_select U2TX=PIN_A1 
#pin_select U2RX=PIN_A0


#use rs232 (UART2, BAUD=9600, PARITY=N, BITS=8, stream=SIM900D)

#use rs232(baud=9600,parity=N,xmit=PIN_A3,rcv=PIN_A5,bits=8,stream=SERIALE)   


#use FIXED_IO( A_outputs=PIN_A3,PIN_A1 )
#use FIXED_IO( B_outputs=PIN_B7,PIN_B1 )


//--------------------------------------------------------------------------------------------------
//                                  Variables Globales
//--------------------------------------------------------------------------------------------------
#define POWERKEYGSM  PIN_B1
#define BUFFER_SIZE 20                                         // Buffer size you can adjust this size
#define PIN_ON  output_high
#define PIN_OFF output_low
#define LED  PIN_B7
#define ENTRADA PIN_B2

char  buffer[BUFFER_SIZE];                                     // buffer
char b=0x00;                                                   // Last characters recived
int  xbuff=0x00;
int bandera=0;

void encendergsm(void);
void inicializacionSIM900(void);
void inicbuff(void);

#INT_RDA2
//void  RDA2_isr(void)
RDA2_isr()
{
   if(kbhit(SIM900D))
   {
   b=0;
   b=fgetc();
   buffer[xbuff++]=b;
   }
return 0;
clear_interrupt(int_rda2);
bandera=1;
}



void encendergsm(void)
{
fprintf(SERIALE,"encendiendo modulo...... \r");
PIN_ON(LED);
PIN_ON(POWERKEYGSM);    //Enciendo modulo GSM
delay_ms(1200);
PIN_OFF(POWERKEYGSM);
PIN_OFF(LED);
}



void inicializacionSIM900(void)
   {
      int cont;
      delay_ms(1000);
      puts("A",SIM900D); //para sincronizar el baudrate del SIM 900
      delay_ms(300);
      putchar(0x0d,SIM900D);
      delay_ms(1000);
      for(cont=0;cont<5;cont++)              // mando varios AT para el autobauding
            {
            puts("AT",SIM900D);
            delay_ms(200);
            putchar(0x0d,SIM900D);
            delay_ms(200);
            PIN_ON(LED);
            delay_ms(200);
            PIN_OFF(LED);
            }
//-----------------------------------seteos de configuracion del SIM900------------------------         
   puts("AT+CMGF=1\r",SIM900D);                  // configuro para que trabaje en modo texto y no PDU
   delay_ms(100);
   putchar(0x0d,SIM900D);
   delay_ms(200);
   puts("AT+CNMI=2,2,0,0,0\r",SIM900D);                  // configuro para que en cuanto llegue un mensaje lo envie el modulo gsm por el puerto serie
   delay_ms(200);
   putchar(0x0d,SIM900D);
   delay_ms(100);
   return;
   }


void inicbuff(void)
{
int i;
for(i=0;i<buffer_size;i++)
   {
   buffer=0x00;
   //restart_wdt();
   }
xbuff=0x00;
return;
}




void main(void)
{
   PIN_OFF(POWERKEYGSM);
   PIN_OFF(LED);
   
   
   setup_timer_3(T3_DISABLED | T3_DIV_BY_1);
   setup_timer_4(T4_DISABLED,0,1);

   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   enable_interrupts(INT_RDA2);
   enable_interrupts(GLOBAL);
   
   
   fprintf(SERIALE,"PIC CONECTADO");
   
   inicbuff();
   while(true)
   {
      if(input(ENTRADA)==1)
         {
            encendergsm();
            delay_ms(300);
            inicializacionSIM900();
            delay_ms(300);
            inicbuff();
           
         }
      if(bandera==1)
         {
            fprintf(SERIALE,"INTERRUPCION RDA2 ACTIVADA");
            bandera=0;
         }
     
   }
}