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

Temas similares

03/08/2008 #1


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.
03/08/2008 #2


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
04/08/2008 #3

Avatar de asherar

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.
04/08/2008 #4


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..
04/08/2008 #5


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
05/08/2008 #6


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
06/08/2008 #7


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
06/08/2008 #8


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.
06/08/2008 #9


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.
06/08/2008 #10


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.
06/08/2008 #11


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?
06/08/2008 #12


si eso es, es posible? y ademas como guardo el valor fijo en la memoria del pic ya que este no va a estar programado previamente?
08/08/2008 #13


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?
08/08/2008 #14


pues me gustaria la rutina completa
08/08/2008 #15
Moderador general

Avatar de Andres Cuenca

Dianiss_ca dijo:
pues me gustaria la rutina completa
Reglas generales de uso del foro

6. En nuestra comunidad NO se aplica la ley del mínimo esfuerzo: "no hacer nada y conseguirlo todo".

Tenlo en cuenta.
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.