Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

22/07/2012 #1


CCS PIC comunicación serial por software
Estoy trabajando con un GPS y un modulo WISMO, y una variable Analoga la idea es medir el consumo de combustible de un vehículo (Variable Análoga) con respecto a la altura (para eso es el GPS) y enviar esa información a un servidor mediante modulo GPRS (WISMOS), todo funciona de maravilla por etapas, pero ya tengo una problema, cuando integro todo, me surge un problema, el GPS genera interrupciones por puerto serial, y el modulo wismo también genera interrupciones por puerto serial, el problema es que no he podido trabajar con interrupciones por software. cuando digo que interrupciones por software me refiero a un puerto diferente al que trae el micro, estoy trabajando en un PIC16F887 en lenguaje C, en el CCS.

Dejo el código de lo que estoy haciendo hasta el momento como son las interrupciones al micro por software. muchas gracias a quien me pueda orientar.

Código:
#include <16F887.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOPROTECT
#fuses INTRC_IO                 //oscilador intero
#FUSES PUT                      //Power Up Timer
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O

#use delay(clock=8000000)
#use rs232(baud=4800,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8,stream=GPS) //PUERTO DE HARDWARE
#use rs232(baud=9600,parity=N,xmit=PIN_B1,rcv=PIN_B0,bits=8,stream=WISMO) //PUERTO DE SOFTWARE
#use fast_io(b)

//DEFINICION DE VARIABLES
int1 x=0;
char dato_serial;


#int_EXT
void  EXT_isr(void) 
{
if(kbhit())
{
x=1; //bandera de interrupciones 
dato_serial=getchar();
}
}



void main()
{
   set_tris_b(0b11111010);
   setup_comparator(NC_NC_NC_NC);// This device COMP currently not supported by the PICWizard
   enable_interrupts(INT_EXT);
   enable_interrupts(GLOBAL);
   setup_oscillator(OSC_8MHZ);

 while(true) 
  {
   if((x==1)&&(dato_serial=='O')) //PREGUNTO SI LLEGO LA VOCAL O
   {
   x=0;
   output_toggle(pin_b2);
   }
   }
}
22/07/2012 #2

Avatar de arrivaellobo

El problema de utilizar un puerto serie por software es que no tienes la ventaja de la interrupción RDA en ese puerto... podrías utilizar la técnica de "polling" o algo parecido.

Un saludo
22/07/2012 #3


arrivaellobo dijo: Ver Mensaje
El problema de utilizar un puerto serie por software es que no tienes la ventaja de la interrupción RDA en ese puerto... podrías utilizar la técnica de "polling" o algo parecido.

Un saludo
gracias por tu respuesta, tienes algun ejemplo que me pueda utilizar para resolver mi inquietud
22/07/2012 #4

Avatar de arrivaellobo

Una pregunta, ¿Las interrupciones que generan tanto el GPS como el módem, qué es lo que te indican? Es decir, para qué las utilizan?
22/07/2012 #5


arrivaellobo dijo: Ver Mensaje
Una pregunta, ¿Las interrupciones que generan tanto el GPS como el módem, qué es lo que te indican? Es decir, para qué las utilizan?
El GPS entrea una trama que permite identificar posicion en la sup terrestre, hora, altitud con respecto al nivel de mar entre otras cosas lo hace a 4800 baudios, el modulo WISMO al momento de establecer conexion es necesario enviarle algunas instruciones y el va dando respuestas a dichas instrucciones como por ejemplo OK, ERROR, CONNECT etc, el wismo opera a 9600 Baudios
23/07/2012 #6

Avatar de arrivaellobo

Se me ocurre que podrías utilizar la interrupción RDA para el GPS, y vas guardando en variables los datos relevantes que te va entregando, así siempre los tienes actualizados.
#INT_RDA
void recibo (void){
trama=getc();
etc...
}


Y el WISMO en el puerto serie software. Como éste sólo te responde cuando le das comandos, podrías hacer algo del tipo:
printf(wismo, "lo que sea");
estado=getc();
23/07/2012 #7

Avatar de Moyano Jonathan

Si tenés problemas con las interrupciones, podrías usar un PIC18F26J50 que tiene 2 UART.
23/07/2012 #8

Avatar de Scooter

Si, las uart soft tienen muchísimos inconvenientes.
También hay circuitos con varias uart para bus spi
25/07/2012 #9


muchas gracias a todos, creo que mejor comprare un micro con 2 UART
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.