TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado 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
-
Hola, aquí puedes buscarlos...
http://www.microchip.com/maps/microcontroller.aspx
-
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
-
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
-
Hola nuevamente, encontre este 18F46J50, sera lo mismo que programar un 18F4550?
Gracias
-
Hola nuevamente, encontre este 18F46J50, sera lo mismo que programar un 18F4550?
Gracias
Sí, pero mejor.
Checa el adjunto.
-
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?
-
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.
-
Lo único, ten en cuenta que son PICs de 3.3V.
Saludos!
-
uff sí es cierto, buena vista Suky :mrgreen:
-
Hola la tension de trabajo (Vcc) es de 3,3v, y la de las entradas I/O soportan hasta los 5v.
Gracias
-
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!
-
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
-
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
-
Creo que también puede servir éste:
Logic level converter
http://www.sparkfun.com/commerce/product_info.php?products_id=8745
-
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!
-
Gracias encontre el TXB0108PWR, vomos a ver que sale de todo esto.
Gracias a todos.
-
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
-
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
-
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!
-
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
-
Es asincronica.
Saludos!
-
Te puedo hacer una pregunta ya que no se C, hay alguna manera de pasarlo a ASM, sabes de algun programa
Gracias
-
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!
-
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
-
Hola que opinan de este: PIC18F67J50, ya que este si tiene las dos Tx y RX separadas.
Saludos
-
El pic 18F26J50 tiene 2 USARTs, una con pines fijos (EUSART1) y la otra con pines remapeables (EUSART2) ambas implementadas con hardware.
-
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;
}
}
}