Autor Tema: 16F876A y transmision de datos HSEROUT  (Leído 4212 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado Zero13

  • PIC12
  • **
  • Mensajes: 66
16F876A y transmision de datos HSEROUT
« en: 11 de Octubre de 2004, 14:15:00 »
Hola...me gustaria saber si alguien tiene algun ejemplo que funcione con el micro 16F876A para poder enviar desde un pic un texto ejemplo "13" por medio del mandato:

SEROUT
HSEROUT

Y por otro lado para el otro Micro que codigo basico debe de tener para poder comprobar si a traves del mandato:

SERIN
ó
HSERIN

Recibe ese texto "13"

He realizado mil pruebas y no lo consigo...please ayuda, ya que si lo consigo mi idea es utilizar dos placas de 433 Mhz de AUREL para pasar ese texto via RS232.

Gracias por adelantado a todos los que me podais ayudar.

Slds!
Zero13

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #1 en: 11 de Octubre de 2004, 14:59:00 »
Hola Zero13
Para transmision serout hay un ejemplo aqui pana
http://miarroba.com/foros/ver.php?foroid=8826&temaid=2682878&msgid=22128194#22128194
no es para el modelo de tu chip pero el func es el mismo.
Con el Hserout usarias la USART integrada , deja y te envio dos ejercicios para que los revises y simules en proteus
Salu2 pana

Desconectado Zero13

  • PIC12
  • **
  • Mensajes: 66
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #2 en: 11 de Octubre de 2004, 16:01:00 »
Mil Gracias!

Que hariamos sin los foros ...son...como dicen muchos foreros...nuestra fuente constante de conocimiento.

Slds!
Zero13

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #3 en: 11 de Octubre de 2004, 20:26:00 »
De nada pana, para eso estamos, si sabes la cantidad de informacion excata que vas atransmitir y recibir, no lo hagas omo en mis ejemplos, haslo con strings y arrays, por que eso del for quita un poco de tiempo, recuerda solo en direcciones consecutivas:
-----------------------------------------------------------------------------------
DEVICE 16F877
XTAL = 4
DECLARE LCD_DTPIN PORTA.0
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTA.4
DIM VAR1[11] AS BYTE
DIM VAR2[13] AS BYTE  <--ARRAY
STR VAR1="RESIVIENDO "
STR VAR2="TRANSMITIENDO" <--STR
HSERIAL_BAUD = 9600         
HSERIAL_RCSTA = %10010000      
HSERIAL_TXSTA = %00100100      
HSERIAL_CLEAR = ON         
   CLS
    PRINT STR VAR2
   HRSOUT STR VAR114 <---STR NO NECESARIA SI QUIERES LEER TODA LA STR
   END
---------------------------------------------------------------------------------
DEVICE 16F877
XTAL = 4
DECLARE LCD_DTPIN PORTA.0
DECLARE LCD_ENPIN PORTB.3
DECLARE LCD_RSPIN PORTA.4
DIM VAR1[11] AS BYTE
HSERIAL_BAUD = 9600         
HSERIAL_RCSTA = %10010000   "  10010000   
HSERIAL_TXSTA = %00100100   "  00100100
HSERIAL_CLEAR = ON         
   
   HRSIN STR VAR1   
   CLS
    PRINT STR VAR1
   DELAYMS 2000

   END

Salu2 pana

Desconectado Zero13

  • PIC12
  • **
  • Mensajes: 66
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #4 en: 12 de Octubre de 2004, 08:38:00 »
Hola Lager, mira me pasa una cosa rara...

A traves del ICD he conseguido ver realmente que saca por el pin de TX el 16F876A y en vez de sacar lo que yo le pongo "13"....

Saca esto "gf="



Este es el codigo que he compilado y tengo actualmente activo...como es normal...la placa receptora...no funciona, ya que no recibe el esperado numero "13"....

Codigo:  Software MicroCode Studio

include "modedefs.bas"
@ device HS_OSC
define osc 20
valor  var   byte

define hser_txsta 24h
define hser_baud 9600
define hser_spbrg 25

inicio:

valor=13

serout portc.6,N9600,[#valor,10]
pause 1000

goto inicio:

Este es el codigo de la placa emisora con un 16f876a con un cristal de 20 Mhz...que compilo en modo HighSpeed y que intento que transmita a 9600 baudios....

Veis algo raro...no lo entiendo...deberia de salir solo "13"

Slds!
Zero13

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #5 en: 12 de Octubre de 2004, 09:04:00 »
Escrito originalmente por Zero13
Hola Lager, mira me pasa una cosa rara...

@ device HS_OSC
define osc 20
valor  var   byte

--------------> aqui defines los registros de la usart...

define hser_txsta 24h
define hser_baud 9600
define hser_spbrg 25

inicio:

valor=13

----------> porque no utilizas hserout???
serout portc.6,N9600,[#valor,10]


yo lo pondría así.
hserout [bin(valor)]     -----> te sacará 1101
si mandas hserout[valor]  -----> te emitirá un CR, que es el código que corresponde al ascii 13

pause 1000

goto inicio:




espero solucionar algo con las correciones....
de momento, creo que lo mas importante, es que utilices la usart

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #6 en: 12 de Octubre de 2004, 12:14:00 »
Excelente observacion abago, ,
solo para complementar con info, no me acuerdo ya en pbpro, pero en proton+ serin, serout es usado igual pero SIN modulo usart!! ok? y Hrsout e hrsin, son comandos SOLO para chips con modulo usart . Por lo tanto no es necesairo(con el comando hrsout) definir el puerto, ya que dependiendo del micro, ya esta definido el usart.
p.ejemplo: el pic16f628 tiene su Tx en RB2 y su RX en RB1
Salu2 panas

Desconectado Zero13

  • PIC12
  • **
  • Mensajes: 66
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #7 en: 13 de Octubre de 2004, 09:31:00 »
Hola a los dos ....lager y abaro...

He conseguido algo...en el proceso de envio del texto que me interesa desde la placa transmisora a 9600 baudios...con el texto "13".....he comprobado...con una placa ICD de depuracion que sale el mensaje clarito y sin errores...tal cual asi:

13131313131313131313131313.....bla...bla

Pues bien en la placa receptora...esta con el mandato

inicio:
hserout 5000,inicio(wait("13")

" Se enciende Led
high portb.0
pause 250
low portb.0
pause 250

goto inicio:

Pues bien...me pasa algo muy raro....de vez en cuando se me enciende el led...pero no siempre...y eso que la placa emisora no para en enviar el 131313131313...etc..

Alguna idea...estoy perdiendo....los nervios..con el HSERIN...

Gracias por adelantado.

Zero13
Slds.

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #8 en: 13 de Octubre de 2004, 11:50:00 »
Hola Zero13,
inicio:  <--------Label de bucle
hserout 5000,inicio(wait("13"  <.. aqui tienes un inicio y un wait que no se que hacen ahi  ni estan definidas
" Se enciende Led
high portb.0
pause 250
low portb.0
pause 250

goto inicio: <---Vuelve al label de bucle "rutina que se repite siempre"
 
Por eso , no para de escribir tu pic, tu pic se enciende por solo 250 ms es muy poco ponle 1000 que es 1 segundo, no se si activaste o no las pullups, tienes que activarlas o en su defecto poner una resitencia de pullup (esto muchos no lo hacen y por eso no les trabaja bien este tipo de transmisiones...)en donde este conectado tu led, las puedes activar. no que tipo de dispositivo usas, pero acuerdate de poner a digital los pines con CMCON = 7. estos son solo unos consejos para evitar fluctuaciones de errores, pero de principio 250 ms de encendido de un led es MUY poco es 1/4 de segundo para que te des una idea, tambien es bueno que desde el principio se defina los puertos de salida y de entrada y se limpien los de salida,
para que solo prenda y apague el led puedes poner el label de bucle solo para los leds y asi obtienes parpadeos de led
MAsINFO;
HSEROUT Sólo puede ser usada en dispositivos que posean hardware USART , para habilitar tu modulo interno usa
DEFINE HSER_RCSTA 90h <--- recepcion
DEFINE HSER_TSTA 20h <--- transmision
DEFINE HSER_BAUD 2400 <---VELOCIDAD(esto te pudo haber presentado basura )

El formato(o protocolo como quieras llamarlo) por defecto de los datos seriales es 8N1 , 8 bits de datos ,sin paridad y 1 stop bit (asi debe etar configurado tu pc para recivir)7E1 ( 7 bits de datos , paridad par , 1 stop bit ) ó 7 O 1 ( 7 bits de datos , paridad impar ,1 stop bit ) pueden ser habilitados usando los siguientes declaraciones:

DEFINE HSER_EVEN 1 <-- paridad par

DEFINE HSER_ODD 1 <-- paridad impar

Dado que la recepción serial se realiza por hardware ,no es posible invertir los niveles para eliminar un driver RS - 232 .Por esto debe usarse un driver adecuado con HSEROUT .

Ejemplo:
´ enviar el valor decimal de B0 seguido por un linefeed a través del USART

HSEROUT [ dec B0 , 10 ]

En resumen, por favor leete el manual muy bien por que la verdad como lo declaras para pbpro , no se si funciona o no tu codigo pero te vendria bien leer el manual: http://www.todopic.com.ar/pbp_sp.html#ndp1

Salu2 pana

Desconectado Zero13

  • PIC12
  • **
  • Mensajes: 66
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #9 en: 13 de Octubre de 2004, 16:06:00 »
Mil gracias Lager por tu info...

Tengo una simple pregunta... como le pongo una resistencia
"pullup"...siento mi desconocimiento

Si es una resistencia....de que valor se debe poner ??

De nuevo gracias.

Slds!
Zero13

Desconectado lager

  • PIC18
  • ****
  • Mensajes: 258
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #10 en: 13 de Octubre de 2004, 17:05:00 »
Las resistencia de pullup, solo pones una rsistencia que no te quite mucha correinte(hasta antes de la mitad de voltaje total que llegue a ese nodo) puede ser una de 4k del nodo donde va el pin a voltaje(5v) pero el portb tiene pullups activables pana, mejor usa el registro OPTION_REG.7=1 con eso activas la resitencias de todos los pines del puerto B.
Espero te sirva,
Salu2

Desconectado Abago

  • PIC24F
  • *****
  • Mensajes: 792
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #11 en: 13 de Octubre de 2004, 21:24:00 »
Escrito originalmente por Zero13
Hola a los dos ....lager y abaro...



soy abago... no abaro....

ahora, sobre el tema del código.....
no sería el tema utilizar hserin???, porque creo recordar que el wait solo se usa en la recepción....


inicio:
hserin 5000,inicio(wait("13")
 ----> esperamos 5 segundos a recivir "13" si no es así, volvemos a la etiqueta inicio....
 ----> si recivimos el comando "13", pasamos a realizar la intermitencia el el led de portb.0

" Se enciende Led
high portb.0
pause 1000
low portb.0
pause 1000

goto inicio:

como dice lager, 250ms, es poco tiempo, como para poder apreciar el parpadeo.

Desconectado Zero13

  • PIC12
  • **
  • Mensajes: 66
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #12 en: 14 de Octubre de 2004, 04:14:00 »
Mil gracias a los dos

Desconectado MarquesSalsero

  • PIC18
  • ****
  • Mensajes: 467
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #13 en: 14 de Octubre de 2004, 05:46:00 »
Notas importantes sobre el wait:

a: el wait no espera a recibir exactamente lo que tu le has indicado que espere, sino que espera a recibir "algo" sea lo que sea, incluso el ruido que pueda haber en la linea lo activa. Por eso a veces parece que no  funciona correctamente.

b: si la linea de datos que llega al puerto se queda enclavada en el valor de activo, el wait se queda bloqueado para siempre. La gran "guru" del foro oficial del picbasicpro sugiere usar, para aplicaciones criticas,  un pequeño circuito con un multivibrador que desbloquee la entrada.

Hay 10 tipos de personas las que entienden binario y las que no

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: 16F876A y transmision de datos HSEROUT
« Respuesta #14 en: 14 de Octubre de 2004, 12:14:00 »
Chavales, ya consegui resolver el problema con el SEROUT del 16F88, los de picbasic.org me enseñaron la moraleja:

No uses oscilador interno si vas a usar comunicaciones seriales.

Pero no obstante , HRSOUT funciona, y SERIN tambien...

salu2