Leer datos con Puerto Paralelo (SOLUCIONADO)

Iniciado por BrusAngel, 29 Mayo 2008, 22:37 PM

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

BrusAngel

Que honda como estàn, tengo un problema grande, necesito lograr que un juego de carritos lo pueda mover(dirigir) con el puerto paralelo, para lo cual necesito que la computadora reciba datos enviados desde un circuito, usando el puerto bidireccionalmente, el problema es que no rebibe los datos, les muestro el prog para recoger la info:
#define DATA 0x378
void main()
{
int a=0,b=0;
clrscr();
outport(DATA, 0x00);
delay(1000);
a=inport(DATA);
printf("el valor de %x es: %x",DATA,a);
b=a;
while(a==b){
delay(1000);
b=inport(DATA);
delay(900);
}
printf("\nel nuevo valor es: %x",b);
getch();
}


el circuito utilizado es simple es solamente un linea sacada del pin 25 (tierra), redirigida hacia el pin 9 (D7), utilizado como de entrada, utilizando un pushbutton, en el que el puerto supuestamente tendria que recibir algun cambio pero no lo hace. al recibir un valor distinto como deberia de serlo ya podria direccionar mi juego a voluntad pero no puedo.

Pido de su ayuda porfavor!!!!
Gracias

BrusAngel

skapunky

#1
Mmmmm yo por mi experiencia, utilizo los puertos Comm en C con la interrupción del COMM estableciendo una cierta velocidad por ejemplo 9600 bps con 8 bits de envio y uno de stop...de hecho he configurado de mas..pero és solo un ejemplo.

Una cosa que me llama la atención, has definido la dirección base del comm, pero juraría que te faltan cosas por definir.

Mira en C, simplemente deberias configurar el IMR,LCR y MCR...y con las funciónes OutportB y InputB los envios y tal. Como ayuda te dire que el "buffer" es el flag THR el qual has de cargar el caràcter a enviar y el BRB és el carácter que recibes.


1 saludo.
Killtrojan Syslog v1.44: ENTRAR

BrusAngel

h
Cita de: skapunky en 30 Mayo 2008, 00:56 AM
Mmmmm yo por mi experiencia, utilizo los puertos Comm en C con la interrupción del COMM estableciendo una cierta velocidad por ejemplo 9600 bps con 8 bits de envio y uno de stop...de hecho he configurado de mas..pero és solo un ejemplo.

Una cosa que me llama la atención, has definido la dirección base del comm, pero juraría que te faltan cosas por definir.

Mira en C, simplemente deberias configurar el IMR,LCR y MCR...y con las funciónes OutportB y InputB los envios y tal. Como ayuda te dire que el "buffer" es el flag THR el qual has de cargar el caràcter a enviar y el BRB és el carácter que recibes.


1 saludo.

ay compa, la verdad es que con tantos terminos nuevos me quedo :o :o :o talves me podrias explicar que son los MCR, IMR, LCR y el BRB Y THR porque ni encuenta yo :xD :xD :laugh: :laugh:, y si me faltan cosas por definir ayudame porfa que en trato con puertos soy muy nuevo, no he podido hacer nada más.

Y si de mala pata tengo que usar el paralelo para este proyecto, si fuera con el serial talves en algo seria mucho más facil como vos lo decis, muchas gracias por tu ayuda skapunky. ;D ;D

skapunky

IMR --> Interrupt mask register (0x21),registro de control que permite indicar las interrupciónes que deben ser atendidas y las que no.
------------------------------------------------------------------------------------------------

COMM1 --> Dir base 0x3F8
COMM2 --> DIr base 0x2F8
------------------------------------------------------------------------------------------------
THR --> Registro de transmisión de datos
RBR  --> Registro de recepción de datos
----------------------------------------------------------------------------------------------

Registro LCR

Este registro tiene varios flags, entr ellos thr,rbr, dll,dlm y otros para seleccionar la paridad deseada, la longitud del dato.

Aclaro que DLL y DLM es para configurar la velocidad de transmisión..hay una formula para calcularla, pero por internet hay tablas que te dicen el valor directamente para cierta velocidad.
-----------------------------------------------------------------------------------------------

Registro LSR

Este registro és el LINE Status registrer que basicamente controla si hay valores o no o si estos se han leido en THR y RBR.
--------------------------------------------------------------------------------------------

Registro IER

Interupt enable registrer, registro que seleccionalos eventos que se genera desde una IRQ.
---------------------------------------------------------------------------------------------

Registro MCR/MSR

Estos registros son para controlar el modem...no creo que te haga falta.
----------------------------------------------------------------------------------------------

Por último te dejo un link, con todo esto mejor explicado con cada registro y sus flags. Vale la pena que le hagas una ojeada, te lo recomiendo.

Apuntes comunicaciónes Puerto en C

Si a partir de aqui te surjen dudas o cualquier problema postealo.

1 saludo.

Killtrojan Syslog v1.44: ENTRAR

BrusAngel

#4
Gracias skapunky por tu respuesta, ahora si se lo que significan esos terminos jejeje :xD :xD :laugh: :laugh:, y ya le pegué una leida al docto que me referis, lo malo es que ahora no puedo utilizar el puerto serial, (el proyecto sobre ese ya lo entregué), ahora lo que me piden es sobre el puerto paralelo y ayer estuve batallando bastante pero no  he podido todavia hacer funcionar mi programa. ayer lei que apesar de todas las contras que puedan existir es mejor utlizar el puerto de estado que es nativo para leer que el puerto de datos, y lei algo interesante que el pin ack al estar activo le avisa a la computadora que va a recibir datos, entonces pos no se, voy a intentar activarlo con algun pulso para ver si asi me abre comunicacion, tengo una imagen de un pequeño circuito que supuestamente se adecua a lo que necesito pero como en electrónica estoy recien nacido no se muy bien lo que significa, te pido que me ayudes a explicarmelo porfavor ;D ;D

en esta imagen dice que hay que utlizar resistencias de 10k (son 10 kiloOHMs?), del S1-S5 que son?, son Switches? (Pushbuttons?). ante todo eso es mi pregunta, ojalá podás ayudarme un poco con esto, Gracias man

Orale's

BrusAngel ::) ;D :D

skapunky

Las resistencias son de 10 kiloohms como bien indicaS JEJEJE, su finalidad no la se, pero tiene toda la pinta de ser quiza resistencias de polarización..pero no les acabo de ver el sentido ya que la corriente que pueda circular es demasiado pequeña y los 5 volts es decir el "1" enviado a los pines quiza no llegue a ser un 1 lógico.

La otra pregunta, de s1 a s5, por el dibujo parecen ser pulsadores donde si los apretas envias una señal de "1" al pin del que apretes su pulsador. Por ejemplo si apretas S1 enviaras un "1" al pin E3.
Killtrojan Syslog v1.44: ENTRAR

BrusAngel

Skapunky, te agradezco muchisimo por tu ayuda, ya se resolviò el problema, ya estoy listo para entregar mi proyecto, denuevo te agradezco mucho a vos y ante todo al ALTISIMO que me iluminò ;D ;D ;D ;D

Orale's

BrusAngel :D ::) ;D