Foros de Electrónica

Comunidad de discusión sobre Automatización, Electrónica industrial, Microcontroladores y electrónica digital, Robótica, Domótica, Telemática, Tecnologías móviles, y muchos temas más.




Transmitir datos por el puerto serie


       



#1  Transmitir datos por el puerto serie
neutron0607

Registrado: 07 Sep 2006
Mensajes: 34
Ubicación: mexico
citar
hola si alguien podria ayudarme pues soy un mar de dudas, necesito transmitir datos mediante un pic a traves del puerto serie a la computadora, con los datos y toda la parte del pic no tengo problema. Lo que me confunde es que en C solo he encontrado que se utiliza inport(0x3F8) pero el sentido común me dice que despues de recibir el primer dato debo tener una especie de interrupcion para mandar mi dato a un arreglo al mismo tiempo que le digo al pic por alguna linea que esta ocupada la pc y cuando mi dato este en el lugar debido mandar una señal al pic para que este me mande el segundo. Alguien puede ayudarme pues esto es lo que no he podido hacer gracias uso un pic 16f876 y como lenguaje necesito usar C,C++ o ensamblador unicamente gracias. Question

#2  Re: ¡AYUDA NO DOY CON EL PUERTO SERIE¡ :!
maunix
Colaborador
Registrado: 22 Oct 2005
Mensajes: 652
Ubicación: Cordoba, Argentina
citar
neutron0607 escribió:
hola si alguien podria ayudarme pues soy un mar de dudas, necesito transmitir datos mediante un pic a traves del puerto serie a la computadora, con los datos y toda la parte del pic no tengo problema. Lo que me confunde es que en C solo he encontrado que se utiliza inport(0x3F8) pero el sentido común me dice que despues de recibir el primer dato debo tener una especie de interrupcion para mandar mi dato a un arreglo al mismo tiempo que le digo al pic por alguna linea que esta ocupada la pc y cuando mi dato este en el lugar debido mandar una señal al pic para que este me mande el segundo. Alguien puede ayudarme pues esto es lo que no he podido hacer gracias uso un pic 16f876 y como lenguaje necesito usar C,C++ o ensamblador unicamente gracias. Question


El tema de si es una "interrupción" o "un evento" depende del sistema operativo que estés usando.

Siempre es la interrupción la que ocurre pero lo que sucede es que si tienes un sistema operativo que encapsule el hardware (w2000, windows xp, linux, etc) no tendrás acceso directo a la interrupción.

Si usas un lenguaje C o C++ o ensamblador... ¿bajo que sistema operativo lo haces?

#3  
neutron0607

Registrado: 07 Sep 2006
Mensajes: 34
Ubicación: mexico
citar
Uso Windows 98 tambien me gustaria saber como se configura el puerto para controlar la velocidad y como hacer para poder mandar las señales "de listo para leer datos" y "la que le dice al pic que espere"

#4  
leo_programer

Registrado: 01 Ago 2006
Mensajes: 56
Ubicación: Colombia
citar
no se si le sirva, pero aqui: http://c.conclase.net/preguntas.php hay unas funciones para manejar el puerto serie en c++, no las he podido probar del todo puesto que se me dañó el quemador de pics, pero al menos el programa me compila, revisalas y mira a ver si le sirve, cuidense...

#5  
maunix
Colaborador
Registrado: 22 Oct 2005
Mensajes: 652
Ubicación: Cordoba, Argentina
citar
neutron0607 escribió:
Uso Windows 98 tambien me gustaria saber como se configura el puerto para controlar la velocidad y como hacer para poder mandar las señales "de listo para leer datos" y "la que le dice al pic que espere"


Lo último que programé de puerto serie bajo W98 fue hace aññños, pero te hablo de al menos 6 o 7 años.

Lo que hice fue leerme el datasheet del IC 16550 (en principio traian este IC, luego ya lo incorporaban en el chipset o bien tenian un IC que era 100% compatible con él)

Te dejo el siguiente link: Wikipedia 16550

Leyendo el datasheet y usando outport e inport fui programando los registros del mismo. La escritura y lectura la hacia por "polling" ya que en su momento no sabía como resolver el tema de interrupciones por hardware/software, ya que hay que armar un handler y es todo un tema!


Saludos

#6  
neutron0607

Registrado: 07 Sep 2006
Mensajes: 34
Ubicación: mexico
citar
trato de mandar datos por el puerto serie pero no puedo aun, uso win98 trabajo con un pic16f876 escribi el siguiente codigo para mandar los datos:


LIST P=16F876
RADIX=HEX
PROCESSOR 16F876
INCLUDE "P16F876.INC"
__CONFIG _XT_OSC &_WDT_OFF &_PWRTE_ON &_LVP_OFF

ORG 0X00
GOTO INI

ORG 0X05


INI MOVLW 0X00
bsf STATUS,RP0
BCF STATUS,RP1
MOVLW b'1011111'
MOVWF TRISC
BCF STATUS,RP0
BSF RCSTA,SPEN
BSF STATUS,RP0
MOVLW b'00100100'
MOVWF TXSTA
MOVLW .25
MOVWF SPBRG
BSF TXSTA,TXEN
BCF STATUS,RP0
MOVLW 48
MOVWF TXREG


END


luego el programa de la compu es este:

#include<stdlib.h>
#include<dos.h>
#include<stdio.h>
#include<conio.h>
int c,d,i;
main()
{

clrscr();
c=inportb(0x3F8);
printf("%d",c);
d=inportb(0x3Fd);
printf("\t\n%d",d);

getch();
return 0;
}
pero la cochinada no me lee el dato no se que esta mal
ayudenme pliss

#7  
maunix
Colaborador
Registrado: 22 Oct 2005
Mensajes: 652
Ubicación: Cordoba, Argentina
citar
neutron0607, vayamos por partes

Te propongo que pruebes primero con el hyperterminal y no con un programa hecho por tí. El hyperterminal viene con windows, seteas el baudeaje, sin control de flujo y listo.

En cuanto a tu software, me parece qeu estas liado en 2 cosas.

1) Tu pic no termina la ejecución al llegar al END! El END solamente le dice al ensamblador que termine su tarea.

Debes hacer un bucle infinito.

Por ej: , cambia
Código: Seleccionar todo

 MOVLW 48
MOVWF TXREG


por

Código: Seleccionar todo

BUCLE:
   btfss   PIR1,TXIF      ;nos fijamos si está vacío el buffer de usart
   goto   BUCLE
   MOVLW   'A'
   MOVWF   TXREG
   goto   BUCLE


2) Estas configurando mal el TRISC, si te fijas en el datasheet de los 16F, el trisc<6> y trisc<7> ambos deben estar en 1.

#8  
neutron0607

Registrado: 07 Sep 2006
Mensajes: 34
Ubicación: mexico
citar
hice lo que me dijiste estoy usando el hiperterminal y mande 52 hex que es 'R' en ascii veo lo siguiente:

RRRRRÿRRRRRRRRRRRRRRRRRRRRRRRRÿRRRRRRRRÿRRRRRRRRÿRRRRRRRRÿRRRRRRRRþRRRRRR

lo cual ya es consolador, solo una duda? esos caracteres que no son R son algun tipo de errrores o indicadores de otro tipo? gracias ahora voy por lo de la programacion en c++ pero no se si debe ser dentro de este foro Smile

#9  
maunix
Colaborador
Registrado: 22 Oct 2005
Mensajes: 652
Ubicación: Cordoba, Argentina
citar
neutron0607 escribió:

lo cual ya es consolador, solo una duda? esos caracteres que no son R son algun tipo de errrores o indicadores de otro tipo?


¿A qué baudeaje estas trabajando?

¿Tienes deshabilitado el WatchDog?

¿Has modificado el TRISC<6> como te indiqué?

#10  
neutron0607

Registrado: 07 Sep 2006
Mensajes: 34
Ubicación: mexico
citar
Hola ya avance en mi programa de C++ pero independiente de que use si mi programa o la hyperterminal de todos modos veo esto:

RRRRRRRòRRRRRRR²RRRRRRRÒRRRRRRR²HIIIIIIéRRRRRRRòRRRRRRRÒR
RRRRRRRÒRRRRRRRÒRRRRRRRÒRRRRRRR’RRRRRRR’RRRRRRRÂ

Como podras notar de cada 8 caracteres el octavo esta mal, esto si me tiene desconcertado ya hice lo que dijiste mira te mando mi nueva compilacion

LIST P=16F876
RADIX=HEX
PROCESSOR 16F876
INCLUDE "P16F876.INC"
__CONFIG _XT_OSC &_WDT_OFF &_PWRTE_ON &_LVP_OFF

ORG 0X00
GOTO INI

ORG 0X05


INI MOVLW 0X00
bsf STATUS,RP0
BCF STATUS,RP1
MOVLW b'1111111'
MOVWF TRISC
BCF STATUS,RP0
BSF RCSTA,SPEN
BSF STATUS,RP0
MOVLW b'00100100'
MOVWF TXSTA
MOVLW 0x1F
MOVWF SPBRG
BSF TXSTA,TXEN
BCF STATUS,RP0
BUCLE:
btfss PIR1,TXIF ;nos fijamos si está vacío el buffer de usart
goto BUCLE
MOVLW 0x52
MOVWF TXREG
goto BUCLE



END


A este punto ya estoy seguro que el problema es mi programa, por cierto compre proto nueva y un cristal de 4.9152 para que al usar el numero 0x1F me dé un baudaje de 9600 bauds exacto. Embarassed estoy seguro que el Wdt esta apagado esta en la palabra de configuracion ¿tendras alguna idea de por que tan raro comportamiento?

 Responder



Google
 


 Temas de interés 
No hay mensajes nuevos Ayuda con modulos TLP434 y RLP434
No hay mensajes nuevos Transmitir codigo
No hay mensajes nuevos transmitir videos en vivo por internet
No hay mensajes nuevos transmitir por el sci
No hay mensajes nuevos Acople y Filtrado para transmitir datos por la red electrica

Foros de Electronica
|| Cuestiones Elementales de Electrónica || Fuentes de alimentacion || Circuitos de radio || Diseño de circuitos en general ||
|| Sistemas de Audio: Preamplificadores, Ecualizadores || Amplificadores || Reparación || Discusión ||
|| Microcontroladores y sistemas embebidos || Circuitos logicos combinacionales y secuenciales || Interfaces y Programacion || Dudas en general || Sistemas de Video || PC Hardware || Telematica y comunicaciones || Tecnologias moviles || Software Electronico || Robotica, Domotica y Mecatronica || Autotrónica || Automatizacion, Electronica industrial y de Potencia || Documentacion, circuitos y esquemas || Donde Las Ideas Convergen... || Tutoriales y Manuales || Proyectos Prácticos ||