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

Temas similares

17/01/2013 #1


Enviar entero por un pin - pic
Bueno tengo una consulta digamos que declaro esta variable:
int8 a = 92; // binario: 01011100

y pues me gustaria enviar esa variable (en binario) a travéz de 1 pin del pic,
digamos rb4.

En pocas palabras:
Enviar primero el 0 , despues de un tiempo X el 1 y asi hasta completar el envio
de los 8 bits, ojala me haya explicado bien, espero sugerencias y
gracias de antemano!

P.D.: me gustaría poder realizarlo en las menores lineas posibles, ya que lo
primero que se me ocurrio fue guardar los 8 bits en un array y luego enviarlos
a través de la funcion output_bit().
17/01/2013 #2


Así como lo planteas, claro que se debe de poder, es en forma serie.
Tal vez te convenga utilizar la función UART. Pero de que se puede, se puede.
Saludos.
17/01/2013 #3

Avatar de fdesergio

sencillo seria cargar el numero, generar un reloj por otro pin y rotar el reg donde guardas el dato e ir sacando el bit a bit sincronizado con el reloj, chauuuuuuuu
18/01/2013 #4

Avatar de Scooter

Usa una uart por software, tienen muchas desventajas pero son sencillas y conocidas. La segunda parte es que después lo tendrás que leer con algo y si usas un sistema raro tendrás que hacer un lector específico.
18/01/2013 #5


con PIC BASIC PRO es muy facil...


Enviar var byte
enviar = (Dato a enviar)
Inicio:
PORTB.4 = enviar.0
enviar = enviar >> 1
pause 1
goto inicio

el dato a enviar lo pones en el registro Enviar y la informacion saldra por el pin PORTB.4 en este ejemplo y hace una pausa de 1 Ms por cada Bit enviado

en este ejemplo la informacion se envia comenzando por el Bit 0 al 7 pero puedes escojer si comienzas por el Bit 7 al 0 cambiando la funcion ">>" por "<<"

tu escojes el pin de salida remplazando PORTB.4 en el ejemplo y la pausa entre cada Bit con intervalos en Ms con la funcion "pause" o en us con la funcion "pauseus"
18/01/2013 #6
Moderador

Avatar de D@rkbytes

aldaris565 dijo: Ver Mensaje
Bueno tengo una consulta digamos que declaro esta variable:
int8 a = 92; // binario: 01011100

y pues me gustaría enviar esa variable (en binario) a través de 1 pin del pic,
digamos rb4.

En pocas palabras:
Enviar primero el 0 , después de un tiempo X el 1 y así hasta completar el envió
de los 8 bits
Saludos.
Puedes hacerlo de esta forma, usando rs232 por software...
Código:
void ByteToBin(int8 Value,int16 TimeMs)
{
int8 i;

   for (i = 0; i < 8; i++)
   {
   if (Value & 0x80)    // Se comprueba el MSB (Bit mas significante "Bit7")
   putc('1');           // Si este es 1, la salida será un 1
   else
   putc('0');           // Si este es 0, la salida será un 0
   delay_ms(TimeMs);      // Esperar cierto tiempo (Time en milisegundos)
   Value <<= 1;         // Rotar los Bits a la izquierda 1 Bit
   }
   puts("\r");          // Enviar un Cr (Carriage Return)
}
Adjunto un ejemplo de como usar la función, y puedes usar el HyperTerminal para ver el resultado.

Nota:
En vez de usar putc(), puedes usar output_high/low()

Suerte.
Archivos Adjuntos
Tipo de Archivo: rar ByteToBin.rar (21,7 KB (Kilobytes), 22 visitas)
20/01/2013 #7


D@rkbytes dijo: Ver Mensaje
Saludos.
Puedes hacerlo de esta forma, usando rs232 por software...
Código:
void ByteToBin(int8 Value,int16 TimeMs)
{
int8 i;

   for (i = 0; i < 8; i++)
   {
   if (Value & 0x80)    // Se comprueba el MSB (Bit mas significante "Bit7")
   putc('1');           // Si este es 1, la salida será un 1
   else
   putc('0');           // Si este es 0, la salida será un 0
   delay_ms(TimeMs);      // Esperar cierto tiempo (Time en milisegundos)
   Value <<= 1;         // Rotar los Bits a la izquierda 1 Bit
   }
   puts("\r");          // Enviar un Cr (Carriage Return)
}
Adjunto un ejemplo de como usar la función, y puedes usar el HyperTerminal para ver el resultado.

Nota:
En vez de usar putc(), puedes usar output_high/low()

Suerte.
Gracias justo lo que necesitaba
20/03/2013 #8


Hola esta muy bueno la función para mandar bit por bit, supongamos que lo hacemos por un solo pin y lo queremos recibir por otro pin de otro pic, como lo debería recepcionar? se puede mandar un int16?
20/03/2013 #9


Betox1234, para que gastarse inventando cosas extrañas... ya existe, se llama I2C, esta implementado por hardware en muchos pic's y varios circuitos perisféricos....
Andan dando vuelta unas rutinas para hacerlo por soft, incluso en un 16F84.
Pegale una leida a:
http://robots-argentina.com.ar/Comunicacion_busI2C.htm
20/03/2013 #10


hola estoy usando un pic18f45k50 y ya tengo ocupado ese pin comunicando con un sim900.
Así que no me queda otra que inventar algo así jaja, estoy usando esta placa http://www.mcelectronics.com.ar/gsm/ y necesito enviar un int16 a otro pic por un solo pin.
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.