TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: gabalfal en 29 de Mayo de 2009, 12:22:29

Título: Proteus y su hyperterminal
Publicado por: gabalfal en 29 de Mayo de 2009, 12:22:29

Hola: Estuve "Programando" en niple, y arme un pequeño programa que cuando apreto el boton que esta conectado a Ra0 se escribe en el virtual terminal del proteus "UNO" y si apreto el Ra1 se escribe "DOS" y asi con 4 botones. (Todo esto con el pic 16f627 con Usart)

Mi problema es cuando intento en vez de escribir un texto, escribir una variable o un valor fijo (o sea un numero), no pasa nada. no aparece nada en el terminal virtual, ni se inmuta.

Alguien sabe que esta mal? el terminal virtual imita un puerto serie no?

Saludos Gonzalo
Título: Re: Proteus y su hyperterminal
Publicado por: Suky en 29 de Mayo de 2009, 12:55:25
Creo que solo simula caracteres ASCII, por eso no recibe nada nada.
Título: Re: Proteus y su hyperterminal
Publicado por: gabalfal en 30 de Mayo de 2009, 13:46:15
y no se puede adaptar para que reciba numeros?
En todos lados leo que usan otros hyperterminales... pero se puede en una simulacion usar un hyperterminal externo al programa?

Saludos
Título: Re: Proteus y su hyperterminal
Publicado por: jhozate en 30 de Mayo de 2009, 13:57:08
tenes q pasar el numero a formato ASCII ,asi el hyperterminal te los muestra
Título: Re: Proteus y su hyperterminal
Publicado por: gabalfal en 30 de Mayo de 2009, 20:58:42
Es verdad, hice la prueba y funciono :) Ahora mi problema es, hay alguna manera de trasnformar automaticamente los numeros a ascci? Yo como comente uso niple, y la verdad no encontre forma alguna :S.

Si realizo el circuito fisico, y lo conecto a la pc, tampoco toma los numeros? o sea tambien tiene que ser ascci para mostrarlos?

Saludos
Título: Re: Proteus y su hyperterminal
Publicado por: jhozate en 30 de Mayo de 2009, 21:21:13
mmm si ...puedes montar el circuito y conetarlo al pc y en proteus por medio de  COMPIM y el hyperterminal puedes ver q es lo q envia el pic. Creo q para pasar a ascii solo debes sumar 30 al dato y listo. entonces puedes hacer un algoritmo para q antes de enviarlo al pc se le sume 30

saludos
Título: Re: Proteus y su hyperterminal
Publicado por: alexysar en 30 de Mayo de 2009, 21:23:04
Ahora mi problema es, hay alguna manera de trasnformar automaticamente los numeros a ascci? ?

probaste con la función de C:     atoi();
o con la operacion:                    entero=Variable_Char-'0';
Título: Re: Proteus y su hyperterminal
Publicado por: Suky en 30 de Mayo de 2009, 21:56:46
Si realizo el circuito fisico, y lo conecto a la pc, tampoco toma los numeros? o sea tambien tiene que ser ascci para mostrarlos?

Saludos
Puedes usar Siow (http://www.mediafire.com/file/jhrzmdnmozz/Siow.rar) y en este no tendrás problemas.
Título: Re: Proteus y su hyperterminal
Publicado por: gabalfal en 30 de Mayo de 2009, 22:11:10
mmm si ...puedes montar el circuito y conetarlo al pc y en proteus por medio de  COMPIM y el hyperterminal puedes ver q es lo q envia el pic. Creo q para pasar a ascii solo debes sumar 30 al dato y listo. entonces puedes hacer un algoritmo para q antes de enviarlo al pc se le sume 30

saludos

Pasa que eso sirve si le sumo 30 a un registro con 1 solo digito,

Pero si el registro es de 15 y le sumo 30, la pantalla muestra algun otro simbolo del codigo ascci.

Ahora mi problema es, hay alguna manera de trasnformar automaticamente los numeros a ascci? ?

probaste con la función de C:     atoi();
o con la operacion:                    entero=Variable_Char-'0';

No se usar C todavia :(
Pero para que sirve esa funcion?



Suki: El siow se puede configurar, para trabajar con el Isis proteus o me sirve solo si realizo el circuito "fisicamente"?

 Saludos
Título: Re: Proteus y su hyperterminal
Publicado por: jhozate en 30 de Mayo de 2009, 22:38:38
el siow solo te sirve si montas el circuito, tambien hay otro buen programa para experimentar con el puerto serie terminal de bray (http://hw-server.com/software/termv19b.html)
Título: Re: Proteus y su hyperterminal
Publicado por: alexysar en 31 de Mayo de 2009, 00:15:17
este algoritmo lo podes utilizar en varios lenguajes de programación:

entero=Variable_Char-'0';

vos pones en la Variable_char el byte que recibis del hiperterminal. Este es un caracter ASCII. Si a ese valor le restas el caracter AscII '0', el resultado es el número entero.

Ej. Por el hiperterminal llega el caracter '3' ( equivale al ASCII = 51). A esto le restas el ASCII '0' ( equivale al ASCII = 48)
Si restas 51 - 48  = 3, y lo tenes como un entero.
Título: Re: Proteus y su hyperterminal
Publicado por: gabalfal en 31 de Mayo de 2009, 21:39:57
pero si yo tengo un numero de 2 caracteres, seria muy complicado a nivel codigo usar un registro para cada uno, y asi poder hacer la funcion de restar el valor asci. O me estoy equivocando?
Título: Re: Proteus y su hyperterminal
Publicado por: alexysar en 31 de Mayo de 2009, 23:07:56
No se si te entendí bien. Cualquier cosa corregime.

Si vienen los dos caracteres por el hiperterminal, vos lees dos veces, uno para el primer carácter y una vez para el segundo (porque vos lo que lees en realidad son bytes codificados en ASCII).
Cada valor lo podes convertir de la forma:

decena = Variable_Char_2-‘0’         ó lo que es lo mismo: decena=Variable_Char_2-48;
unidad = Variable_Char_1-'0';         ó lo que es lo mismo: unidad=Variable_Char_1-48;

y después interpretas el valor del entero de dos dígitos asi:

Valor_Entero= decena*10+unidad;
Título: Re: Proteus y su hyperterminal
Publicado por: fjalex en 01 de Junio de 2009, 07:35:56
No sé si estás programando en ensamblador o en C, pero si utilizas C, puedes utilizar la función printf().

Un saludo.
Título: Re: Proteus y su hyperterminal
Publicado por: alexysar en 01 de Junio de 2009, 11:07:51
No sé si estás programando en ensamblador o en C, pero si utilizas C, puedes utilizar la función printf().

No se me ocurre cómo podes transformar caracteres que llegan por el puerto serie en enteros con la función que  decís. Podrías explicarte mejor?
Título: Re: Proteus y su hyperterminal
Publicado por: Suky en 01 de Junio de 2009, 12:26:34
No sé si estás programando en ensamblador o en C, pero si utilizas C, puedes utilizar la función printf().

No se me ocurre cómo podes transformar caracteres que llegan por el puerto serie en enteros con la función que  decís. Podrías explicarte mejor?

Esta función es para el uso contrario. Para enviar por el puerto variables convirtiéndolas a string.