TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
01 de Noviembre de 2014, 00:07:01

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
350575 Mensajes en 39337 Temas por 41085 Usuarios
Último usuario: cmdtscorpion1177
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Lenguaje Basic para microcontroladores PIC (Moderadores: dogflu66, doppel, jansuini, Marioguillote, aitopes)
| | |-+  Comunicacion pic a pic y PBP
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] Marcar como favorito Imprimir
Autor Tema: Comunicacion pic a pic y PBP  (Leído 3962 veces)
xocas
Administrador
PIC24H
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 1733



« : 05 de Mayo de 2006, 20:45:41 »

Hola

necesito realizar una comunicacion entre pics via infrarrojos, para probar utilice un codigo que he visto en algun post del foro -que me perdone su autor por que no recuerdo su procedencia- y todo va perfecto. el problema surge cuando quiero ampliar las posibilidades del receptor mediante sensores ya que parece perderse en la instruccion SERIN...
para probarlo, utilizo dos pulsadores en el transmisor que encienden sendos leds en el receptor:
'*****************************
' Codigo del Transmisor
'*****************************
include "modedefs.bas"
define OSC 4

trisa = %00011
trisb = %00000000
porta = 0
portb = 0

bot_1 var porta.0
bot_2 var porta.1

loop:
if bot_1 = 0 then gosub led_on
if bot_2 = 0 then gosub led_off
goto loop

led_on: serout portb.1,n2400,[$FF,$FF,"OK","A"]
return

led_off: serout portb.1,n2400,[$FF,$FF,"OK","B"]
return
end

'**********************************
' Codigo del Receptor
'**********************************
include "modedefs.bas"
define OSC 4

trisa = %01001
trisb = %00000000
porta = 0
portb = 0

datos var byte
pulsa var porta.3
led_rojo var portb.1
led_verde var portb.2

Loop:
if pulsa = 0 then ambos
serin porta.0,n2400,["OK"],datos
If datos="A" then led_on
if datos="B" then led_off
goto Loop

led_on:
High led_rojo
low led_verde
goto Loop

led_off:
low led_rojo
high led_verde
goto Loop

ambos:
high led_rojo
high led_verde
goto Loop
end

ademas, en el caso del receptor, dispongo de un pulsador -var pulsa- que actua sobre porta.3 y que encenderia ambos leds a la vez pero que en relidad no hace nada...
revisando la ayuda de PBP sobre SERIN me encuentro esto: 'An optional Timeout and Label may be included to allow the program to continue if a character is not received within a certain amount of time. Timeout is specified in units of 1 millisecond.' y entiendo que el comando SERIN 'paraliza' el programa esperando que llegue algun dato. probe a indicarle un tiempo de Timeout pero el resultado fue el mismo y ya no se que mas probar. no se si lo tengo delante de las narices y no lo veo o que pasa... podeis darme una manito?

que vayan mis agradecimientos por anticipado y un saludo
En línea
patolinec
Colaborador
PIC16
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 206


Todo Ok


« Respuesta #1 : 06 de Mayo de 2006, 13:25:18 »

Mira lo primero que tienes que realizar y es muy facil es realizar una comnicacion serial pero con cable, es decir conecta el pin de Tx del primer micro al Rx del oro y viceversa, y realia toda la programacion que vayas a necesitar y cuentame si puedes hacer eso primero o si tienes algun problema en la trasmicion
En línea

Casi me maté pero ahora estoy de nuevo vivo
xocas
Administrador
PIC24H
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 1733



« Respuesta #2 : 06 de Mayo de 2006, 16:27:21 »

Hola y gracias por responder...

veras, la comunicacion se realiza bien, y si elimino la linea 'serin porta.0,n2400,["OK"],datos' responde al pulsador sin problemas. No he probado lo que me dices de unirlos mediante un hilo y ver que pasa, aunque si realice la simulacion en proteus uniendo ambos micros y el resultado fue el mismo. tratare de probarlo mañana en la proto y te cuento.
no lo dije antes: los pics son 16f84 en ambos casos -receptor y emisor- ademas de un 12c508 para crear la portadora de infrarrojos en el caso del emisor y una puerta nand para unir ambos, portadora y datos. los circuitos estan tomados de la web de rentron www.rentron.com.

un saludo
En línea
xocas
Administrador
PIC24H
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 1733



« Respuesta #3 : 06 de Mayo de 2006, 17:07:14 »

Hola de nuevo

he vuelto a leer lo que dice el manual sobre el comando SERIN y en especial esto: 'An optional Timeout and Label may be included to allow the program to continue if a character is not received within a certain amount of time. Timeout is specified in units of 1 millisecond.' y creo que ya lo tengo. cambie la linea:
'serin porta.0,n2400,50,pulsador,["OK"],datos'
de manera que ahora si no recibe datos en 50 milisegundos salta a la etiqueta 'pulsador' y ahi chequea el estado de 'var pulsa' :
pulsador:
if pulsa = 0 then ambos
pause 50
goto Loop
donde chequea el estado del pulsador y tras 50 ms vuelve a Loop. la simulacion en proteus funciona perfectamente, aunque tendre que precisar mas los tiempos. todo parece indicar que efectivamente el comando SERIN detiene el programa en espera de datos, mejor dicho en espera de recibir la palabra 'OK' en este caso y solo continua cuando esta condicion se da. me gustaria que alguien pudiera confirmarmelo...
lo probare en la protoboard y te contare si funciona bien, ademas necesito cambiar el codigo porque el receptor sera un 12f629 ya que quiero reducirlo al maximo y aun tengo que pelearme para tratar de evitar el cuarzo y sus correspondientes condensadores y usar oscilador interno, aunque tengo entendido que esta opcion no funciona bien -por falta de precision- en la comunicacion serie... es cierto eso?

un saludo y gracias
En línea
mblotta
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 12



WWW
« Respuesta #4 : 06 de Noviembre de 2006, 16:10:39 »

Holas !!  si es cierto que la comunicación serial no funciona bien con el clock interno. Te aconsejo que sigas usando un cristal y 2 condensadores o levantes la frecuencia a 20MHz si estas usando un 16f84A que soporte esa frec. De esa forma te evitas de poner los 2 condensadores y dejas solo el cristal.

con respecto al SERIN yo lo uso de la siguiente manera:

serin2 porta.0,n2400,500,nada,[wait("OK"),datos]

donde porta.0 es tu tx,  500 mS de espera para que lleguen los datos y nada es una subfunción para que ejecute si no recibe los datos en ese tiempo. De esta forma si no recibe "OK" y x en 500 mS ejecuta la subfuncion nada.

Espero que les sea de ayuda.

Salu2
En línea
xocas
Administrador
PIC24H
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 1733



« Respuesta #5 : 08 de Noviembre de 2006, 15:19:51 »

hola amigo mblotta y perdona que no he visto tu post antes...

bueno, este ya era un hilo un poco antiguo y finalmente solucione el tema. el problema que tenia es que efectivamente el comando serin espera que le llegue el caracter establecido y le asigna el valor a la variable que designemos a continuacion... y no abandona ese bucle hasta que esto se cumpla. para evitarlo podemos añadir una etiqueta que le indique que si este valor no se recibe en un tiempo x salte a una subrutina. que es en otras palabras lo que tu indicas...

en cuanto al oscilador interno te dire que si es posible utilizarlo para la comunicacion serie y de hecho en el proyecto se uso como receptor un 12f675 en el que se usan todos los pines como entradas/salidas y se evito el uso del cristal y condensadores

evidentemente esto se puede realizar con aquellos pics que tengan esta posibilidad, que no es el caso del 16f84.

si quieres mas informacion sobre como configurarlo en pbp no tienes mas que decirmelo

un saludo

pd: yo habia leido en mas de una ocasion que no funcionaba bien la comunicacion serie con el oscilador interno pero te puedo asegurar que no es asi, y que tengo bastantes circuitos que estan funcionando de esta forma y lo hacen perfectamente.

pd: aprovecho para darle las gracias a un compañero del foro, maunix, que en su momento me ayudo tanto en este tema. saludos
En línea
mblotta
PIC10
*
Desconectado Desconectado

Sexo: Masculino
Mensajes: 12



WWW
« Respuesta #6 : 08 de Noviembre de 2006, 15:22:12 »

OK. Salu2
En línea
feeldark
PIC10
*
Desconectado Desconectado

Mensajes: 1


« Respuesta #7 : 05 de Abril de 2007, 11:24:31 »

Xocas06, como estas? soy nuevo en esto, y en uno de tus post ofreces informacion de como configurar con PBP la posibilidad de usar un Micro con el clock interno, te pido por favor me convides esa info, te paso mi mail feelingdark@hotmail.com, pero de todos modos creo que a muchos les puede interesar este tema asi es que a lo mejor debas ponerlo en el foro.
te estoy muy agradecido desde ya rebotando
En línea
navaismo
Jubilado Todopic
PIC24H
****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 1973



« Respuesta #8 : 05 de Abril de 2007, 14:13:00 »

Si te refieres al oscilador interno pones

@ device intrc_osc

y listo
En línea

"Mi tercer deseo, que otra cosa podría ser, poner un final a todo el sufrimiento, que sólo con mi propia extinción el planeta podrá ser aliviado. Pobre de mí, Si tuviera tres deseos hoy, la elección no sería dificil para mí, Sólo tres deseos serían suficientes, No tendría uso para más."

"He sido un hombre que busca y aun lo sigo siendo, pero ya no busco en las estrellas y en los libros, sino en las enseñanzas de mi sangre."
xocas
Administrador
PIC24H
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 1733



« Respuesta #9 : 05 de Abril de 2007, 14:41:09 »

hola y bienvenido al foro feeldark

te has adelantado navaismo... no se esperaba menos de ti, jeje

yo en su dia me pelee bastante con este tema porque queria que un pequeño 12f675 estuviera pendiente de varias cosas a la vez y necesitaba ademas todos sus pines y en pbp no me fue bien hasta que descubri esto:

10. Lost Calibration code
In the last flash memory slot of a new 12F675 there is a calibration code that is placed during chip
manufacture. The code has a hex value of 34xx where the xx part varies from chip to chip. This code
is retrieved using the DEFINE OSCCAL_1K 1 statement. The last two hex digits, xx, of the code
are then placed in the OSCCAL register and the chip’s internal oscillator is adjusted to operate at
4 MHz.
If serial data, for example, is not being sent by the 12F675 then an exact 4 MHz may not be necessary
and the DEFINE statement can be omitted.

sin este DEFINE OSCCAL_1K 1 no iba bien la transmision de datos via infrarrojos.

y deberas usar tambien lo dicho por navaismo, claro esta

un saludo

edito: este ejemplo es para un 12f675 pero igualmente aplicable a otros pics
« Última modificación: 05 de Abril de 2007, 14:43:21 por xocas06 » En línea
TODOPIC
   

 En línea
Páginas: [1] Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.194 segundos con 23 consultas.
anything