la primera que tengo es que en el circuito del optoacoplador, al haber un 1 lógico en la entrada MIDI, sale un 0 hacia el PIC, es esto correcto?
Por lo que veo es una UART, si del otro extremo ( receptor ) tambien existe un opto como en el transmisor, la señal se invertiria nuevamente quedando como la original.
Es correcto, al activarse el led del optoacoplador el transistor se satura pasando a una tension de su colector cercana a 0V, al momento de poner un 0 en el led del optoacoplador, el transistor no conduce y la resistencia de pull-up lo pone en 1.
Respecto al MIDI, yo jamas lo use, ni tampoco lei como es que se transmite, no sabia que era por UART. Tenes que asegurarte si o si que el optoacoplador pueda llegar a la velocidad que estas buscando.
Mirando el codigo no puedo extenderme demasiado sin saber el PIC que estas usando. Pero si vas a tener recepcion por UART, lo mejor es utilizar interrupciones. Sino lo mas seguro es que tengas problemas.
Esto no hace falta:Código: ASM
CLRF RCREG ;SE VACIA RCREG Y RCIF=0
Al hacer el MOVF de RCREG, ya estas sacando el dato y borrando el RCIF ( si es que no hay nada ), no es que queda alli y tenes que borrarlo.
Otro posible problema esta aca:Código: ASM
BTFSS STATUS,Z ;SI SON IGUALES, SALTA Y ESPERA BYTE DE DATOS. SI NO, VUELVE AL LOOP GOTO LOOP BSF PORTB,0 BTFSS PIR1,RCIF ;SE ESPERA BYTE DE DATOS GOTO LOOP
Recibiste un dato, pasaron 11 ciclos ( algunas instrucciones consumen 2 cuando saltan ) y estas preguntando por si llego otro, es un gran problema por que realmente tenes que esperar que llegue!, no llegan instantaneamente al micro, y el micro va mucho mas rapido que la UART, tal ves iba recibiendo el 2do bit ahi entonces no puso en 1 el RCIF.
No entendi bien que quisiste hacer, el codigo pide que si o si se reciban los 2 datos seguidos ( 0x99 y 0x24 ) o son 2 codigos distintos y segun lo que se reciba actuas acorde al mismo?
No debería pasar eso cuando el transistor está en corte? De todas formas, me tiene confundido que se invierta la señal de entrada.
Tienes razón con lo de los 11 ciclos, lo corregiré. De todas formas, si el circuito de recepción estuviera funcionando, se debería activar el bit 0 del puerto B al recibir el primer byte.
Cuando se satura el transistor, deja pasar la corriente, es decir su Vce cae a lo que es el Vce(sat) especificado en el datasheet, esto es cuando en la base hay una señal lo suficientemente fuerte que en este caso va a ser provista por el led (cuando circule una corriente por el mismo),
Cuando esta en Corte, es decir no circula corriente por el transistor ( Ic ) Vce va a ser proxima a la cual alimenta a la resistencia de pull-up, al no conducir y la Vce es "alta" termina siendo un 1 como salida del opto, y esto ocurre cuando no hay exitacion en la base, es decir no hay corriente circulando por el diodo.
Si el primero deberia activarse, el tema es que no se como se maneja el MIDI, apesar que siempre lo escuche como nunca tuve necesidad de hacer algo con este, siempre quedo de lado, asi que en esa parte no te puedo ayudar tal como habia dicho al comienzo de mi otro post, en el caso de programacion del micro o funcionamiento si podria.
En resumen, cuando la señal MIDI que se va a recibir está en 1, se activa el led del optoacoplador, se satura el transistor y a la salida va a haber un voltaje bajo, cercano a 0V. Por otro lado, cuando se recibe una señal en 0, no circula corriente, el transistor estará en corte y la salida será cercana a 5V debido a la resistencia de pull-up. De acuerdo a esto, se invierte la señal MIDI al entrar al PIC... esto es lo que me complica.
alguna sugerencia? Gracias.