Autor Tema: Problema al leer una trama por RS232  (Leído 16457 veces)

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

Desconectado futurama

  • PIC10
  • *
  • Mensajes: 47
Re:Problema al leer una trama por RS232
« Respuesta #60 en: 21 de Febrero de 2016, 15:20:08 »
me perdí en lo del indice, tengo que sacarlo, cargue el programa ahora le agregue lo que le faltaba al programa #INT_RDA, pero aun sigue sin actuar en la placa, lo he probado con otros programas y anda bien...pero con este aun nada...les puedo enviar algo si quieren para queme puedan ayudar a encontrar la falla???

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema al leer una trama por RS232
« Respuesta #61 en: 21 de Febrero de 2016, 15:50:59 »
Hagamos algo... vamos a lo mas basico posible y probemos eso, luego vamos a agregando.

Código: C
  1. #include <16f628A.h>
  2.  
  3. #fuses NOMCLR, INTRC_IO, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD
  4. #use delay (clock=4000000)
  5. #use RS232 (baud = 9600, bits = 8, parity = N, xmit = PIN_B2, rcv = PIN_B1, ERRORS)
  6.  
  7. char dato_serial;
  8.  
  9. #INT_RDA
  10. void RECEPCION_RS232(void)
  11. {
  12.         putc(getc());           // Envio el caracter recibido
  13. }
  14.  
  15. void main (void)
  16. {
  17.  
  18.         enable_interrupts(INT_RDA);
  19.         enable_interrupts(GLOBAL);
  20.    
  21.         while (true)
  22.         {
  23.                 delay_ms(500);
  24.                 output_b(0x01);
  25.                 delay_ms(500);
  26.                 output_b(0x00);
  27.         }
  28. }

Deberias recibir en la PC todo lo que envias, basicamente es un loopback
Probalo si funciona le vamos agregando poco a poco lo demas.

(Intenta usar una sola cuenta)
« Última modificación: 21 de Febrero de 2016, 15:53:33 por KILLERJC »

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #62 en: 21 de Febrero de 2016, 16:17:42 »
ok, solo usare esta cuenta...
provare lo que me dijiste ahora

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #63 en: 21 de Febrero de 2016, 18:27:28 »
listo, el sistema debe quedar parpadeando automaticamente...o debe aparecer apagado..y solo prender cuando le envio un dato???

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #64 en: 21 de Febrero de 2016, 18:30:04 »
el programa es solo encender y apagar el led no depende de nada su parpadeo, creí que dependía de lo que enviaba

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema al leer una trama por RS232
« Respuesta #65 en: 21 de Febrero de 2016, 20:28:08 »
el programa es solo encender y apagar el led no depende de nada su parpadeo, creí que dependía de lo que enviaba

No, no depende de lo que envias, es solo para ver que esta funcionando. Si vos envias una "A" desde la PC al PIC el PIC responde con una "A" tambien.

Es decir todo lo que envies desde la PC lo vas a recibir. Es lo mas basico de lo basico para hacer con la UART.

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #66 en: 21 de Febrero de 2016, 20:51:03 »
el programa que me enviaste solo esta parpadeando, pero prove con otro programa recibir una a para encender un led y una b para apagar el led
y anda bien...podriamos partir desde ese...no se que dices???

te envió el programa que me resulta, es bien básico

Código: C
  1. #include <16f628a.h>
  2.    // #fuses NOMCLR
  3.     #fuses INTRC_IO
  4.     #FUSES NOWDT                    //No Watch Dog Timer
  5.     //#FUSES XT                     //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6.     #FUSES NOPUT                    //No Power Up Timer
  7.     #FUSES NOPROTECT                //Code not protected from reading
  8.     #FUSES NOBROWNOUT               //No brownout reset
  9.     #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  10.     #FUSES NOCPD                    //No EE protection
  11.     #FUSES RESERVED                 //Used to set the reserved FUSE bits
  12.     #use delay (clock=4000000)
  13.     #use RS232 (baud = 9600, bits = 8, parity = N, xmit = pin_b2, rcv = pin_b1)
  14.  
  15. char dato;
  16.  
  17. void main()
  18. {
  19.       printf ("\nEncender led \n");
  20.       delay_ms(1000);
  21.       printf ("teclea la letra =  a  para encender \n");
  22.       printf ("teclea la letra =  b  para apagar \n");
  23.       while(true)
  24. inicio:
  25.       {
  26.      
  27.        dato = getc();
  28.    
  29.        if(dato == 'a')
  30.          {  // Compara
  31.        
  32.           output_high(PIN_b4);
  33.           printf ("Led encendido \n");
  34.           }
  35.        if(dato == 'b')  // Compara
  36.           {  // Compara
  37.        
  38.           output_low(PIN_b4);
  39.           printf ("Led encendido \n");
  40.           }
  41.           goto inicio;
  42.        }
  43. }

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #67 en: 21 de Febrero de 2016, 20:55:02 »
te adjunto la foto de como se ve en hercules

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Problema al leer una trama por RS232
« Respuesta #68 en: 21 de Febrero de 2016, 21:04:36 »
y anda bien...podriamos partir desde ese...no se que dices???

No usa la interrupcion asi que no.

EL programa que te pase no te responde lo que le pones ? Cuando presionas una 'a' deberia aparecerte 2 'a' en el Hercules.

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #69 en: 21 de Febrero de 2016, 21:59:59 »
disculpa me dices que si mando una "a" deberia aparecer "aa"
tengo este codigo con interrupcion, funciona bien....no se si al codigo que me enviaste le falta algo..(que no se mal interprete, cuando diga le falta algo al programa..yo se que tu eres el master aca...solo mi comentario ..es suposicion)

te cargo este programa,,este me sirvio...
Código: C
  1. #include <16F628A.h>
  2.  
  3. #FUSES INTRC_IO
  4. #FUSES NOWDT
  5. #FUSES PUT
  6. #FUSES NOMCLR
  7. #FUSES NOLVP
  8.  
  9. #use delay(internal=4MHz)
  10. #use rs232(baud=9600,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
  11.  
  12.  
  13. char dato_serial;
  14.  
  15. #INT_RDA
  16. void RECEPCION_RS232(void)
  17. {
  18.         putc(getc());           // Envio el caracter recibido
  19.         output_toggle(pin_b4);
  20. }
  21. void main()
  22. {
  23.  enable_interrupts(INT_RDA);
  24.  enable_interrupts(GLOBAL);
  25.  
  26.    while(true){  
  27.       if(kbhit()){
  28.          dato_serial = getc();
  29.          putc(dato_serial);
  30.          
  31.       }
  32.    }
  33. }

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re:Problema al leer una trama por RS232
« Respuesta #70 en: 21 de Febrero de 2016, 22:19:29 »
El programa que mandó Killerjc no funciona porque el compilador está sobre escribiendo la configuración del puerto B cada vez que hace:

Código: C
  1. delay_ms(500);
  2.                 output_b(0x01);
  3.                 delay_ms(500);
  4.                 output_b(0x00);

debería ser:

Código: C
  1. delay_ms(500);
  2.                 output_high(PIN_B0);
  3.                 delay_ms(500);
  4.                 output_low(PIN_B0);

o usar la directiva "fast_io(B)"

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #71 en: 21 de Febrero de 2016, 22:26:06 »
no puede estar sobre escribiendo, ya que :

delay_ms(500);
output_b(0x01); es igual enciende led RB0
delay_ms(500);
output_b(0x00); es igual paga led RB0

lo que yo creo , es que falta declarar el "dato_serial " dentro del while..creo ..no estoy seguro

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re:Problema al leer una trama por RS232
« Respuesta #72 en: 21 de Febrero de 2016, 23:20:59 »
Fijate en el archivo lst generado:
Código: ASM
  1. ....................                 delay_ms(500);
  2. 0070:  MOVLW  02
  3. 0071:  MOVWF  @@2A
  4. 0072:  MOVLW  FA
  5. 0073:  MOVWF  ??65535
  6. 0074:  CALL   @delay_ms1
  7. 0075:  DECFSZ @@2A,F
  8. 0076:  GOTO   072
  9. ....................                 output_b(0x01);
  10. 0077:  BSF    STATUS.RP0
  11. 0078:  CLRF   TRISB
  12. 0079:  MOVLW  01
  13. 007A:  BCF    STATUS.RP0
  14. 007B:  MOVWF  PORTB
  15. ....................                 delay_ms(500);
  16. 007C:  MOVLW  02
  17. 007D:  MOVWF  @@2A
  18. 007E:  MOVLW  FA
  19. 007F:  MOVWF  ??65535
  20. 0080:  CALL   @delay_ms1
  21. 0081:  DECFSZ @@2A,F
  22. 0082:  GOTO   07E
  23. ....................                 output_b(0x00);
  24. 0083:  BSF    STATUS.RP0
  25. 0084:  CLRF   TRISB
  26. 0085:  BCF    STATUS.RP0
  27. 0086:  CLRF   PORTB
  28. 0087:  GOTO   070

En las líneas 78 y 84 hace un CLRF TRISB, es decir que está poniendo todo el puerto B como salida, y no solo el PIN_B0

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #73 en: 21 de Febrero de 2016, 23:26:52 »
provare lo que dices aver que sale

Desconectado ciberik

  • PIC10
  • *
  • Mensajes: 33
Re:Problema al leer una trama por RS232
« Respuesta #74 en: 21 de Febrero de 2016, 23:37:59 »
tenias razón, funciono....... con esto lograba asegurarme de que la comunicación estaba correcta....
ahora estoy tratando de hacer lo mismo con este programa..... tratar le leer datos  que envió desde el pc y mostrarlos por el display

este es el programa que me esta ayudando KIller a coregir, ya que conecto la placa ..pero no pasa nada ..no enciende ningun display.. mi idea es
25&48...lo escribo ..pero no muestra nada...por lo menos deberian aparecer 0000..pero nada

Código: C
  1. #include <16f628a.h>
  2.    // #fuses NOMCLR
  3.     #fuses INTRC_IO
  4.     #FUSES NOWDT                    //No Watch Dog Timer
  5.     //#FUSES XT                     //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6.     #FUSES NOPUT                    //No Power Up Timer
  7.     #FUSES NOPROTECT                //Code not protected from reading
  8.     #FUSES NOBROWNOUT               //No brownout reset
  9.     #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  10.     #FUSES NOCPD                    //No EE protection
  11.     #FUSES RESERVED                 //Used to set the reserved FUSE bits
  12.     #use delay (clock=4000000)
  13.     #use RS232 (baud = 9600, bits = 8, parity = N, xmit = pin_b2, rcv = pin_b1)
  14.  
  15. char dato;
  16.  
  17. void main()
  18. {
  19.       printf ("\nEncender led \n");
  20.       delay_ms(1000);
  21.       printf ("teclea la letra =  a  para encender \n");
  22.       printf ("teclea la letra =  b  para apagar \n");
  23.       while(true)
  24. inicio:
  25.       {
  26.      
  27.        dato = getc();
  28.    
  29.        if(dato == 'a')
  30.          {  // Compara
  31.        
  32.           output_high(PIN_b4);
  33.           printf ("Led encendido \n");
  34.           }
  35.        if(dato == 'b')  // Compara
  36.           {  // Compara
  37.        
  38.           output_low(PIN_b4);
  39.           printf ("Led encendido \n");
  40.           }
  41.           goto inicio;
  42.        }
  43. }


 

anything