TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: macedo en 14 de Noviembre de 2009, 15:07:57

Título: PIC con dos UART por Hardware
Publicado por: macedo en 14 de Noviembre de 2009, 15:07:57
Hola tengo que empezar con un proyecto y necesito un pic que tenga dos UARTS pero por hardware que es mas facil de programar, ya que tengo que recibir unos comandos por un canal y largarlo procesado o no por l segundo canal y este esta multiplexado para controlar ocho perifericos, asi que depende del comando yo me dirijo al periferico espesifico.
Tengo en mente usar el 1850 o 2550 pero queria evitar el esar programando un canal por soft, aparte me complicaria la vida ya que no se en que momento me transmiten los datos.
Si alguien tienen idea de que pic puedo usar por favor comentemelo
Gracias
Título: Re: PIC con dos UART por Hardware
Publicado por: migsantiago en 14 de Noviembre de 2009, 15:16:55
Hola, aquí puedes buscarlos...

http://www.microchip.com/maps/microcontroller.aspx
Título: Re: PIC con dos UART por Hardware
Publicado por: MLO__ en 14 de Noviembre de 2009, 16:15:30
Hola.

Pues, no es complicado usar la USART por soft. Las dos las puedes gestionar mediante interrupciones, una por la #int_RDA y la otra pues puedes usar el módulo CCPx o el RB0, de esa manera no importa cuando envien los datos.

Saludos
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo en 16 de Noviembre de 2009, 09:10:30
Hola ya las tengo configuradas por hard y por soft, pero no me decido cual es la que recive los datos de la red y cual es la que controla los dispositivos, ademas necesito manejar display con teclado, hora en tiempo real y guardart en memorio mediante I2C, me parece un poco demasiado para el PIC no?
Tengo que optimizar todo el soft para que ande a la perfeccion.
Gracias
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo en 16 de Noviembre de 2009, 11:06:03
Hola nuevamente, encontre este 18F46J50, sera lo mismo que programar un 18F4550?
Gracias
Título: Re: PIC con dos UART por Hardware
Publicado por: migsantiago en 16 de Noviembre de 2009, 11:28:27
Hola nuevamente, encontre este 18F46J50, sera lo mismo que programar un 18F4550?
Gracias

Sí, pero mejor.

Checa el adjunto.
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo en 16 de Noviembre de 2009, 11:53:17
Hola lo que pasa que el 4550 solo tiene una EUSART y el otro dos, solo necesito las EUSART y las I2C, tambien creo que me voy a probar uno de estos PIC18F46J50 o PIC18F26J50, uno tienen mas memoria para programa.
Que opinas?
Título: Re: PIC con dos UART por Hardware
Publicado por: migsantiago en 16 de Noviembre de 2009, 12:29:04
Pues el X6J50 parece una mejor opción que el 4550, checa cuál es el más económico y que traiga los periféricos que buscas... 46j50 vs 26j50.

El 4550 ya es viejito y talvez convengan más los J.
Título: Re: PIC con dos UART por Hardware
Publicado por: Suky en 16 de Noviembre de 2009, 12:33:21
Lo único, ten en cuenta que son PICs de 3.3V.


Saludos!
Título: Re: PIC con dos UART por Hardware
Publicado por: migsantiago en 16 de Noviembre de 2009, 13:03:12
uff sí es cierto, buena vista Suky  :mrgreen:
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo en 16 de Noviembre de 2009, 13:35:51
Hola la tension de trabajo (Vcc) es de 3,3v, y la de las entradas I/O soportan hasta los 5v.
Gracias
Título: Re: PIC con dos UART por Hardware
Publicado por: Suky en 16 de Noviembre de 2009, 15:36:43
Hola la tension de trabajo (Vcc) es de 3,3v, y la de las entradas I/O soportan hasta los 5v.
Gracias
Deberás revisar bien el datasheet del PIC elegido, hay ciertos pines que son compatibles con 5V, eso lo puedes ver en Caracteristicas Electricas/ DC/ IO Input, debe haber una lista de que pines toleran 5V.


Saludos!
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo en 17 de Noviembre de 2009, 11:10:47
Hola, te hago una pregunta sabes si hay algun IC driver que me pase de 3,3v a 5v para usorlo como I/O, es decir tengo que conectar LCD, COMM, teclado, I2c, etc, y casi todo labura con 5v, las señales van a ser de 5v, me entendes no?
Gracias ale
Título: Re: PIC con dos UART por Hardware
Publicado por: Nocturno en 17 de Noviembre de 2009, 12:30:35
Mira en esta tabla todas las opciones que tiene Texas Instruments:
http://focus.ti.com/download/aap/pdf/VLT_PF_Overview.pdf

Aquí puedes verlos con detalle:
http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?familyId=707&family=analog&uiTemplateId=NODE_STRY_PGE_T
Título: Re: PIC con dos UART por Hardware
Publicado por: migsantiago en 17 de Noviembre de 2009, 13:21:54
Creo que también puede servir éste:

Logic level converter
http://www.sparkfun.com/commerce/product_info.php?products_id=8745
Título: Re: PIC con dos UART por Hardware
Publicado por: Suky 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!
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo en 18 de Noviembre de 2009, 10:13:50
Gracias encontre el TXB0108PWR, vomos a ver que sale de todo esto.
Gracias a todos.
Título: Re: PIC con dos UART por Hardware
Publicado por: elektro_shock 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
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo 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
Título: Re: PIC con dos UART por Hardware
Publicado por: Suky 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 (http://www.todopic.com.ar/foros/index.php?topic=28397.msg234016#msg234016). Si haces correctamente el tratado de las interrupciones no tendrás problemas.


Saludos!
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo 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
Título: Re: PIC con dos UART por Hardware
Publicado por: Suky en 27 de Noviembre de 2009, 22:34:21
Es asincronica.


Saludos!
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo 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
Título: Re: PIC con dos UART por Hardware
Publicado por: Suky 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!
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo 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
Título: Re: PIC con dos UART por Hardware
Publicado por: macedo 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
Título: Re: PIC con dos UART por Hardware
Publicado por: sledgehammer 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.
Título: Re: PIC con dos UART por Hardware
Publicado por: aldoMO 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;
         }
     
   }
}