Autor Tema: Problemas con Proteus y MAX487  (Leído 3384 veces)

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

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Problemas con Proteus y MAX487
« en: 17 de Agosto de 2016, 07:16:56 »
Hola a todos.

Empezando a utilizar el USART, he intentado comunicar dos pic16f877a conectandolos directamente mediante 2 cables:

- El PIC transmisor aumentar un registro cada cierto tiempo (200ms) y lo saca por su puerto D. Ademas envia ese registro al PIC receptor.
- El receptor recibe ese registro y lo saca por su puerto D. Al final el puerto D de los dos pics tiene el mismo resultado en binario.

Despues de varios dias de sudor y lagrimas, y gracias a la informacion sacada de este foro, he conseguido que funcione (en proteus, en realidad todavia no lo he probado) lo arriba descrito, asi que he intentado ir un paso mas alla intentando conectarlos, no directamente, sino por medio de un MAX487.... y ha dejado de funcionar.

Os adjunto el archivo de Proteus y los archivos .hex para que lo comprobeis. El caso es que:

- La comunicacion no funciona
- Salen errores "logic contention detected on net", pero por mucho que los he estudiado, no logro dar con la razon. Al principio puse resistencias en diferentes puntos del 487, como vi en varias webs y en la hoja de datos, pero el resultado no cambia en absoluto.

La dudas que me surjen:

1) De verdad es problema de Proteus?
2) Al incluir el max487, es necesario cambiar en algo el programa? (yo lo he dejado tal cual)
3) Los pines 2,3 del max487 se deben poner en estado alto o bajo para que el chip funcione? Como no me quedaba muy claro este punto, lo he intentado de las dos maneras, pero tampoco cambia...

Gracias a todos por sus respuestas

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5490
    • Electrónica Didacta
Re:Problemas con Proteus y MAX487
« Respuesta #1 en: 17 de Agosto de 2016, 14:17:40 »
cuando el proteus arroja el warning logic contention detected on net es porque hay una inconsistencia con la asignación del estado de los tris, es decir, el port actúa como entrada cuando debe enviar un dato y visceversa.

La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problemas con Proteus y MAX487
« Respuesta #2 en: 17 de Agosto de 2016, 14:34:23 »
No sirve de nada los hex, estaria bueno ver el codigo para ver que causa lo que dice PalitroqueZ

Desconectado Stban

  • PIC12
  • **
  • Mensajes: 78
Re:Problemas con Proteus y MAX487
« Respuesta #3 en: 18 de Agosto de 2016, 00:24:04 »
Hola agregando un poco, en el pic transmisor el tx va conectado al pin 4 y el pin 3 a otro puerto del pic, ahora para enviar tienes que poner en uno el pin 3. Para el pic receptor el pin rx va conectado al pin 1 y el pin 2 a otro puerto, ahí debes poner en cero el pin 2. No sé que código usas pero en basic es:
Emisor.
High portb.0 'activo modo transmisor, pin3 en alto
Serout portb.1, T2400,[100]

Receptor.
Low portb.0 'activo modo receptor, pin 2 en bajo
Serin portb.1, T2400, var1

Obvio ignorando la declaración de variables y configurar los puertos como estradas y salidas.

Saludos

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re:Problemas con Proteus y MAX487
« Respuesta #4 en: 18 de Agosto de 2016, 01:12:57 »
Gracias por sus respuestas

Hola agregando un poco, en el pic transmisor el tx va conectado al pin 4 y el pin 3 a otro puerto del pic, ahora para enviar tienes que poner en uno el pin 3. Para el pic receptor el pin rx va conectado al pin 1 y el pin 2 a otro puerto, ahí debes poner en cero el pin 2.

En el pic receptor estaba poniendo a 1 el pin 2 :shock:.
Siguiendo tu consejo lo he puesto a 0 y la comunicacion ha empezado a funcionar... pero siguen saliendo los errores de logic contention detected on net. El programa es realmente sencillo y, sinceramente, no se de donde puede venir el error :oops:

Os envio los 2 programas (transmisor y receptor) en ensamblador, que es el unico lenguaje que manejo :lol:.
Estan sacados de este foro (no encuentro el link) y ligeramente modificados. Os agradeceria si alguien les pudiera echar un vistazo

Gracias por su atencion

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problemas con Proteus y MAX487
« Respuesta #5 en: 18 de Agosto de 2016, 11:39:24 »
Transmisor:

Pienso que el de transmisor esta bien, aunque yo no estaria deshabilitando y habilitando continuamente el bit de habilitacion de transmision.

Simplemente si no envias, no lo haces y listo. Quedando asi:

Código: ASM
  1. ;
  2. ;INICIALIZACION DEL MODULO USART
  3. ;
  4.                 bsf     PORTC, 5
  5.                 BSF     TXSTA,BRGH
  6.                 MOVLW   .25
  7.                 MOVWF   SPBRG
  8.                 BCF     TXSTA,SYNC
  9.                 BSF     TXSTA,TXEN
  10.                 BCF     STATUS,RP0              ;BANCO 0
  11.                 BSF     RCSTA,SPEN
  12.  
  13. ;
  14. ;ENVIO DE DATOS AL USART
  15. ;
  16. REPETIR         incf    REGISTRO, F
  17.                 movf    REGISTRO, W
  18.                 movwf   PORTD
  19.                 MOVWF   TXREG
  20. ESPERAR         BTFSS   TXSTA,TRMT              ;?SE VACIO EL REGISTRO TSR?
  21.                 GOTO    ESPERAR                 ;NO, ESPERAMOS PARA ELLO
  22.                 call    Retardo_500ms
  23.                 GOTO    REPETIR

El transmisor deberia tener el DE y RE del MAX487 en 1 (VDD) para que pueda enviar.

Receptor:

Con simplemetne esto basta:

Código: ASM
  1. INICIO     BTFSS           PIR1,RCIF
  2.                 GOTO            INICIO
  3.                 MOVF            RCREG, W
  4.                 MOVWF           PORTD
  5.                 GOTO            INICIO

Aplica tambien el tema de que no es necesario deshabiitar y habilitar la recepcion, error por overrun no creo que tengas por que el loop es corto, pero si vas a hacer mas cosas te sugiero usar la interrrupcion y con eso te aseguras.

El MAX487  de este pic tendria que tener el DE y RE en 0 ( GND ) para poder recibir.

Para ambos:

Citar
Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have to be set in order to configure pins RC6/TX/CK and RC7/RX/DT as the Universal Synchronous Asynchronous Receiver Transmitter.
Configura RC6 como salida y RC7 como entrada. en Ambos y deberia irse ese problema.
En el receptor veo que tenes puesto los 2 como entradas.

Desconectado scrwld

  • PIC12
  • **
  • Mensajes: 59
Re:Problemas con Proteus y MAX487
« Respuesta #6 en: 21 de Agosto de 2016, 02:45:18 »
hola loudness,

aunque tengo siglos que no trabajo con asm espero ayudar.

los pines  2 y 3 del max487 debes unirlos y llevar esa conexión al pin del puerto que uses para habilitar el max487. ej: al bit 5 del puerto D.

antes de llamar repetir pones en 1 el bit  para habilitar la transmisión : bsf PORTD, 5

al regresar de repetir llevas ese pin a 0 : bsf PORTD, 5

lo anterior lo haces cada vez que vayas a enviar información.

saludos

Desconectado Loudness

  • PIC16
  • ***
  • Mensajes: 147
Re:Problemas con Proteus y MAX487
« Respuesta #7 en: 22 de Agosto de 2016, 04:43:52 »
Gracias por las respuestas

KILLERJC: He intentado hacer lo que explicas en tu respuesta pero el resultado es el mismo: la comunicacion funciona pero no deja de salir el famoso error. Empiezo a pensar que puede ser una mala jugada del Proteus?? :?

De todas maneras, ahora no puedo dedicar mas tiempo a esto asi que, cuando pueda cojer un rato (a saber cuando puede ser) lo voy a montar en un protoboard directamente.

Gracias a todos por su ayuda


 

anything