Un pic 16f877 puede leer numeros como 200, 300,265, etc con solo un pin?

Estoy realizando un proyecto con GPS y necesito que el PIC 16F877, que es el que uso me distinga el cambio de los segundos cada vez que la latitud o la longitud cambian, como podria hacer esto?, se que puedo provarlo a travez de visual con una caja de texto y un boton donde en la caja de texto escribo numeros como 183, 185, 54 ect... y que en el pic compara esto con un numero x, mi cuestion principal es como puedo realizar este progama...
Por favor necesito esto con urgencia...
Gracias de antemano.
 
En otras palabras como hago para saber si, por ejemplo tengo un numero digamos 300 si es menor que no haga nada si es mayor que me prenda una alamarma como un simple led
 
Dianiss_ca dijo:
En otras palabras como hago para saber si, por ejemplo tengo un numero digamos 300 si es menor que no haga nada si es mayor que me prenda una alamarma como un simple led

Te digo lo básico que interpreto:

Asumiendo que la información ya viene digitalizada del GPS, deberás saber qué protocolo
utiliza y adaptarte al caso. Las entradas RS232, I2C y SPI requieren al menos 2 pines + GND
(el SPI, 3 + GND). Ayer estaba viendo, no se dónde, un protocolo de 1 bit + GND).

Una vez dentro del pic, que trabaja con registros de 8 bits, la representación del número
deberá ser de 2 bytes para poder cubrir los valores como 300, 265, etc., (mayores a 255
y hasta 64k).

Luego, comparar valores y tomar una decisión es cosa del programa del pic, y necesitarás
rutinas de comparación de 2 bytes.

Finalmente, poner en 1 o en 0, un bit de alguno de los registros de salida para menejar el led.

Si resuelves eso, creo que tendrás cubierto el problema.
No me queda claro qué conocimientos tienes de programación de pics y de electrónica.
Ya has programado algo con el 877 ?
Acá en el foro hay un hilo abierto con un tutorial de ese micro.

Hasta luego.

Editado: Ojo que el PIC 16F877 ya es obsoleto! En proyectos nuevos Microchip sugiere usar
el 16F887.
 
Saludos, Tu post esta muy falto de información, pareciera que no sabes nada de programacion de PICs, por lo que te sugiero consigas un compilador de C para pics y bajes tutoriales, es muy facil en c encender un led si algo pasa, y comunicarse por serial rs232 igual es muy sencillo. Ejemplo.

Vamos a prender un led en C si un valor recibido de un byte es mayor a 20.

//----------------------------------------
#use rs232(baud=9600,rcv=PIN_C7) // Configuramos la comunicacion RS232

void main()
{
int X;

while( 1 ) // Creamos un ciclo infinito
{
X = getch(); // Recibimos un byte por RS232 (PIN_C6)
if( X > 20 ) // Si X es mayor a un umbral (20 por ejemplo)
output_high( PIN_A1 ); // Prendemos el led o alarma
else // o si no
output_low( PIN_A1 ); // Apagamos el led o alarma
}
}

Suerte..
 
El programa lo estoy realizando en mplab la verdad en c no he programado pics, si es posible que alquien tubiera un ejemplo de un programa similar seria excelente, se que necesito un max232 para la comunicacion del GPS con el pc y otro para la comunicacion entre el pc el PIC, ademas el dato no sale directamente de la targeta GPS sino de un programa realizado en java, del cual ya se como realizar la comunicacion serio, lo unico que necesito saber es como hago que el pic me compare un dato como 176 178 180 182, etec... que son posibles valores que mando desde el software, y dichos datos me los compare con otro que este en la memoria del pci, es decir un valor maximo, de tal forma que cuando se sobrepase dicho valor se encienda un led, yo se como hacer las salidas, solo necesito como hacer dicha comparacion y que me realice esto cada 2 segundos por ejemplo.

x= 190

y= 180; 182; 184; 186; 188; 190;

si y>=x
bit=1
si no
bit =0

pero esto como lo manejo en .asm, para el programa con 16f877
 
en el ejemplo pones x=190 si ese x esta fijo, no debe ser mucho problema hay varias formas por ejemplo una seria:


movlw 180 ;
movwf registro ; registro contiene el valor 180
movf portaa,0 ; copia el valor de la puerta a en en w
subwf registro; resta w a registro, si el numero que se ingreso a w es menor
que el 180 guardado en registro, el bits 0 de estatus queda en 1
si no es Asi se pondra un 0 en el bits cero de status
btfss status,0 ; salta si es uno por lo tanto salta si w es menor que 180
goto W_mayor;
goto W_menor;

con eso puedes ver una rutina bastante simple de preguntar si un valor es mayor o menor que otro, hay varias formas mas pero esta es bastante simple y practica.

el retardo lo puedes hacer con la ayuda del TMR0 si necesitas ayuda con el registro TMR0 lo publicas y vemos de cuanto es el retardo y lo publicamos.

saludos
 
El retardo es de 2s, y lo otro lo sabia pero mi pregunta es si se puede mandar numeros decimales?, por que segun tengo entendido solo el pto E es el que me recive estos digitos el resto trabaja en hexa o en binario
 
Dianiss, definitivamente te recomiendo C, de verdad te ahorras mucho tiempo y complicaciones.

Ahora, en cuanto a tu pregunta, de verdad se me hace falto de información, la comunicacion serial tu puedes enviar y recibir cualquier cadena de información. si son numeros decimales o hexa o no es lo mismo.
De verdad tienes que detallar lo que quieres porque no lo estas haciendo y se nos hace muy complicado el poder orientarte.
suerte con tu proyecto.
 
Dianiss_ca dijo:
El retardo es de 2s, y lo otro lo sabia pero mi pregunta es si se puede mandar numeros decimales?, por que segun tengo entendido solo el pto E es el que me recive estos digitos el resto trabaja en hexa o en binario

haber.. tu quieres ingresar un numero decimal al PIC?, recuerda que el pic es un dispositivo fisico y por lo tanto sus entradas tambien son del tipo fisicas, como pretendes ingresar un valor decimal osea que circuito te genera un valor decimal?.

no puedo ingresarle un 200 por ejemplo, lo que se le ingresan son valores en tension 5 volt corresponde a un 1 logico en la puerta que lo ingreses el pic.

lo que se puede hacer es usar el conversor A/D pero igual los valores que obtengas seran medidos de alguna tension, y eso los convierte en algun numero decimal, binario hexa.

en el fondo binario hexa decimal es lo mismo lo que si tienes q tener claro que el pic trabaja con unos y ceros lo cual es un codigo binario, el hex y decimal es una representacion grafica no mas del mismo numero para ahorrar espacio y tiempo.
 
puedes hacer un grafico de como esta conectado todo , has un grafico y publicalo para entender , como es el proyecto dianis.

Porque el pic solo te recibe datos en binario y por el conversor analogo digital solo valores en voltaje.
 
haber quiero entender que no estas tan perdido y nosotros no entendemos lo que nos quieres decir.

tu deseas leer los numeros d'200',d'180',d'190' por ejemplo, en forma serie por un solo pin?
si es asi en el fondo lo que tu lees es igual a un codigo binario de 8 bits en serie.

Es eso?
 
si es posible , pero debes conocer o la velocidad de recepcion del dato para poder calcular el tiempo a leer la cadena o stream que te llega por ese pin , si lo vas ha hacer con un 16f877 , este tiene una memoria (casi como una ram), o pudes ir directo y quemar una direccion del pic . aunque te recomiendo usar la memoria que trae el pic.

Tienes el datasheet del pic ? en ls primeras paginas sale manejo de memoria , paginacion y todo eso hay encuentras la forma .

o requieres la rutina completa?
 
Atrás
Arriba