Autor Tema: A vueltas con Serout & Serout2  (Leído 3143 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
A vueltas con Serout & Serout2
« en: 01 de Octubre de 2005, 21:55:00 »
Los rollos de la comunicacion serie parecen los mas prolificos por aqui.
El caso es que queria usar una comunicacion serie 9600 y 8N1, usando SEROUT.

algo tipico como lo siguiente:

DEFINE OSC 3

rsio var PortB.7
datos var byte [10]
i var byte

dato[0]=0
dato[1]=1
dato[2]=2
dato[3]=3
dato[4]=4
dato[5]=5
dato[6]=6
dato[7]=7
dato[8]=8
dato[9]=9


for i=0 to 8
    serout rsio, 2, [dato[ i ]]
next i


Hasta ahora me habia limitado a enviar texto ASCII y siempre funciono correctamente. Pero ahora queria tratar datos tipo byte 0-255.
Se supone que el ejemplo anterior me enviaria 9 bytes (0,1,2....,9), pero al probarlo conectando el pic al PC los datos recibidos no son los correctos. Lo curioso es que si en el PC modifico la configuracion de la comunicacion y en lugar de 8 bits de datos indico 7 todo va a la perfeccion (claro que solo se pueden enviar/recibir datos de 7 bits  0-127)     ¿y eso a que se debe??? Si configuramos el PIC a 8bits de datos porque la comunicacion se efectua a 7 ???


Para solucionarlo he tenido que usar SEROUT2 que permite configurar los parametros y añadir
DEFINE SER2_BITS 9

Ahora al indicar una comunicacion de 9 bits si que me funciona correctamente a 8.

¿alguien sabe porque?


Un saludo

Saludos desde Logroño (España)

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
RE: A vueltas con Serout & Serout2
« Respuesta #1 en: 05 de Octubre de 2005, 17:09:00 »
Que tal mi pana!
Vamos a ver en tu programa

DEFINE OSC 3

rsio var PortB.7
datos var byte [10]
i var byte

datos[0]=0    
datos[1]=1
datos[2]=2
datos[3]=3
datos[4]=4
datos[5]=5
datos[6]=6
datos[7]=7
datos[8]=8
datos[9]=9


for i=0 to 8
serout rsio, 2, [dato[ i ]]
next i


Debes colocar datos[0]="1" , datos[2]="2", datos[3]="3" y asi sucesivamente, para que te envie la representacion ascci de cada numero, sino le colocas las comillas ("Giño entonces la computadora recibira los caracteres que de acuerdo a la tabla ascii son caracteres no imprimibles y se usan para darles ciertos comandos que la computadora debe ejecutar, por eso es que no te aparece nada en la computadora.
Si quieres enviarles a la computadoras datos que no esten en ascii debes utilizar los caracteres que estan en la tabla ascii para poderlos vizualizar en la pantalla por ejemplo:
dato[0]=72, dato[1]=79, dato[2]=76, dato[3]=65 y te mostrara en la pantalla de la pc la palabra HOLA, como vez es bastante sencillo.

Otra cosita en el lazo for i=0 to 8 deberia ser for i=0 to 9.
tabla ascii aqui:
http://www.lookuptables.com/

serin2 te permite enviar todos los datos de una manera mas rapida, por ejemplo:

serin2 portb.0,84,[str dato] envia por el puertob.0 a 9600 bps el contenido de la variable tipo arrays llama datos  ( datos[0]... datos[9] )

Saludos.

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: A vueltas con Serout & Serout2
« Respuesta #2 en: 05 de Octubre de 2005, 18:14:00 »
Lo primero muchas gracias por responder.

Puede que el fragmento de código que puse no fuese muy acertado, pero está bien así. (Se trata simplemente de SEROUT/SEROUT2 y su puesta en practica)

El array (datos) lo uso para almacenar unas muestras capturadas desde el ADC del PIC, y lo he inicializado con datos al azar, y para SEROUT uso ese bucle solo para pruebas, (así por ahora me ahorro configurar el retardo entre los datos enviados)


La idea es colocar una sonda de temperatura (analogica) a una entrada ADC del PIC, leer muestras y luego llevarlas al PC. Las muestras capturadas por ahora son de tipo byte y lo que quiero es pasarla tal cual al PC, ahí fue donde tuve el problema, en lugar de pasar los 8bits el PC solo recibia 7, y si lo modifico para que el protocolo sea de 9bits entonces si que recibo 8. (En el PC configuro como de 8bits, el problema es solo en el PIC)

Cuando se indica el protocolo de comunicaciones 8N1  yo asumo => 8bits de datos +bit de paridad+1bit de stop.  Pero algo falla ahí.

Cuando el trabajo me lo permita probaré con HSERIN y el hardware del PIC.


Un saludo.
Saludos desde Logroño (España)

Desconectado RALF2

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2060
RE: A vueltas con Serout & Serout2
« Respuesta #3 en: 06 de Octubre de 2005, 11:00:00 »
Que tal josemyzm!

Lo que te coloque en el post anterior fue con respecto al programita que colocaste, ya que, pense que era ese el problema. si tienes el computador utilizando en hiperterminal y lo tienes configurado como 8N1 no deberia a ver problema siempre y cuando como te dije no envies al pc los caracteres que no son imprimibles, me gustaria tener mas detalles con respecto al tipo de pic que estas utilizando, el programa que utilizas en el pc, etc a ver si te puedo ayudar.
Que tipo de sensor de temperatura estas utilizando?

saludos

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: A vueltas con Serout & Serout2
« Respuesta #4 en: 06 de Octubre de 2005, 16:49:00 »
Gracias RALF2.

La verdad es que ahora mismo todo funciona bien usando 9bits, preguntaba por curiosidad.

Todavia no se que sonda se usará, de esa parte se está ocupando un amigo (es para algo que quiere montar él y creo que se trata de un termopar, no se más, ami lo analogico como que no me tira mucho, je je), yo solo me limito al programa del PIC y para las pruebas uso el ADC con un potenciometro y voy leyendo tensiones (total viene a ser lo mismo).

El pic actual es el 16F877, pero creo que bajará al 16F819 o inferior si es posible. El 877 es demasiado para esto y solo hace falta el ADC, las comunicaciones si no hay Hardware interno pues por soft, en PicBasic hay poca diferencia. Así que el micro se reducirá a lo minimo posible.

En la parte de PC utilizo una libreria de comunicaciones en Delphi con la que nunca tuve problemas, todo comenzo al comunicar con el PIC. Lo curioso es que todo iba bien mientras se trataba de recibir unos textos para prueba. El fallo lo noté cuando al azar puse valores superiores a 127 (aqui ya se usa el bit 8). El programa de comunicaciones que suelo usar para las pruebas es el que viene con MicroCode Studio. De todas formas voy a comprobar la libreria o el compilador de Delphi haber si es alguna cosa rara.

Un saludo y gracias por tu interes.
Saludos desde Logroño (España)

Desconectado josemyzm

  • Colaborador
  • PIC18
  • *****
  • Mensajes: 309
RE: A vueltas con Serout & Serout2
« Respuesta #5 en: 23 de Octubre de 2005, 11:34:00 »
Pues ya está resuelto. Resulta que cuando usamos bit de paridad hay que definir un bit  de datos más.  8 btis de datos + 1 bit de paridad = Usar 9 bits en la comunicacion (y por defecto usa 8 por que no aplica paridad)

bueno es algo así.

Saludos desde Logroño (España)