Autor Tema: Usando Enable en 232  (Leído 4787 veces)

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

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Usando Enable en 232
« en: 23 de Febrero de 2010, 21:40:00 »
Bueno como la Mayoria ya sabe, o para quienes lo desconosca, en la configuracion para la transmicion de datos en 232, existe algunas opciones entre ellas una llamada enable, la cual se ocupa en comunicaciones 485.

ahorita configurando mi 232 mi codigo en CCS queda del siguiente modo:

Código: C
  1. #include <18f4550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay (clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, enable=pin_e1)

simulandolo en proteus incluso en en modo Step-Step no logro apreciar el paso de bajo a alto de este pin, alguna idea de como poder hacer proteus aun mas lento o saber si exactamente si se esta realizando este cambio

Desconectado pablomanieri

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 639
Re: Usando Enable en 232
« Respuesta #1 en: 23 de Febrero de 2010, 22:40:09 »
puedes colocar el analizador lógico que trae el proteus

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Usando Enable en 232
« Respuesta #2 en: 23 de Febrero de 2010, 22:42:00 »
lo acabo de simular con pic simulator y la verdad si se pone en 1 y 0 ahora solo es cuestion de ver si los sn75176 logran mandar lo que necesito

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Usando Enable en 232
« Respuesta #3 en: 23 de Febrero de 2010, 23:31:48 »
Aqui les muestro ya mi practica con 485 el pequeño detalle es el siguiente el pic 2550 no me envia lo que esta en el puerto B, siempre me envia 00



Pic18f4550
Código: C
  1. #include <18f4550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay (clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, enable=pin_e2)
  5. #use standard_io (a)
  6. #use standard_io (b)
  7. #use standard_io (d)
  8. #use standard_io (e)
  9. #BYTE TRISA=0X85
  10. #BYTE PORTA=0X05
  11. #use standard_io (b)
  12. char in,dato,de,un;
  13. #int_RDA
  14. RDA_isr()
  15. {
  16.  in=getch();
  17. }
  18. void recepcion()
  19. {
  20.   de=in&0xf0;
  21.   un=in&0x0f;
  22.       switch(de)
  23.       {
  24.          case 0x00:
  25.          output_a(0xc0);
  26.          break;
  27.          case 0x10:
  28.          output_a(0xf9);
  29.          break;
  30.          case 0x20:
  31.          output_a(0xa4);
  32.          break;
  33.          case 0x30:
  34.          output_a(0xb0);
  35.          break;
  36.          case 0x40:
  37.          output_a(0x99);
  38.          break;
  39.          case 0x50:
  40.          output_a(0x92);
  41.          break;
  42.          case 0x60:
  43.          output_a(0x82);
  44.          break;
  45.          case 0x70:
  46.          output_a(0xf8);
  47.          break;
  48.          case 0x80:
  49.          output_a(0x80);
  50.          break;
  51.          case 0x90:
  52.          output_a(0x90);
  53.          break;
  54.          }
  55.         switch(un)
  56.       {
  57.          case 0x00:
  58.          output_d(0xc0);
  59.          break;
  60.          case 0x01:
  61.          output_d(0xf9);
  62.          break;
  63.          case 0x02:
  64.          output_d(0xa4);
  65.          break;
  66.          case 0x03:
  67.          output_d(0xb0);
  68.          break;
  69.          case 0x04:
  70.          output_d(0x99);
  71.          break;
  72.          case 0x05:
  73.          output_d(0x92);
  74.          break;
  75.          case 0x06:
  76.          output_d(0x82);
  77.          break;
  78.          case 0x07:
  79.          output_d(0xf8);
  80.          break;
  81.          case 0x08:
  82.          output_d(0x80);
  83.          break;
  84.          case 0x09:
  85.          output_d(0x90);
  86.          break;
  87.            
  88.     }
  89. }
  90.  
  91. void main()
  92. {
  93.   bit_clear(TRISA,0);
  94.   port_b_pullups (true);
  95.   enable_interrupts(INT_RDA);
  96.   enable_interrupts(GLOBAL);
  97.  for(;;){
  98.    delay_ms(100);
  99.    dato=input_b();
  100.    if(input(PIN_e0)==1){
  101.      putc(dato);
  102.      recepcion();
  103.      }
  104.    }
  105. }
Pic18f2550
Código: C
  1. #include <18f2550.h>
  2. #FUSES NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,NOFCMEN,NOIESO,XT
  3. #use delay(clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, enable=pin_c4)
  5. //------------ Pines del LCD ---------------------//
  6. #define LCD_E     PIN_C0
  7. #define LCD_CK    PIN_C1  
  8. #define LCD_DAT   PIN_C2
  9. //--------------------------------------------------//
  10. #include "lcd3.c"
  11. #BYTE TRISA=0X85
  12. #BYTE PORTA=0X05
  13. #use standard_io (b)
  14. char in,dato,de,un;
  15. #int_RDA
  16. RDA_isr()
  17. {
  18.  in=getch();
  19. }
  20.  
  21. void main() {
  22.  
  23.   bit_clear(TRISA,0);
  24.   port_b_pullups (true);
  25.   lcd_init();
  26.   enable_interrupts(INT_RDA);
  27.   enable_interrupts(GLOBAL);
  28.  
  29. for (;;) {
  30.    delay_ms(100);
  31.    dato=input_b();
  32.    de=dato&0xf0;
  33.    un=dato&0x0f;
  34.    if (kbhit()){
  35.      printf("%c",dato);
  36.      lcd_gotoxy(1,1);
  37.      printf(lcd_putc,"recibiendo=%1c",in);
  38.      lcd_gotoxy(1,2);
  39.      printf(lcd_putc,"Enviando=%1c%1c",de,un);  
  40.      }
  41.    }
  42. }

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Usando Enable en 232
« Respuesta #4 en: 24 de Febrero de 2010, 10:12:17 »
Hola grupo, otra forma de monitorear un pin es colocar un "RTDBREAK_1" de la librería "Debugging Tools" en el pin que se requiere se configura para que detenga el programa ya sea con un 1 ó 0, también existen monitores de 4 u 8 bit, si se quiere monitorear una variable completa se puede hacer con watchpoint condition, así cuando esta tenga un valor específico se genera el braek point

saludos.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Problema con Sincornicacion en 485
« Respuesta #5 en: 24 de Febrero de 2010, 22:33:04 »
bueno aqui tengo ya los codigos de mis micros, en detalle es que el Slave, necesita que le envie aproximadamente 4 veces el mismo dato para que este pueda desplegarlo en su lcd
Master
Código: C
  1. #include <18f4550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay (clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)//, enable=pin_e2)
  5. #use standard_io (a)
  6. #use standard_io (b)
  7. #use standard_io (d)
  8. #use standard_io (e)
  9. #BYTE TRISA=0X85
  10. #BYTE PORTA=0X05
  11. #use standard_io (b)
  12. char in,dato,de,un;
  13.  
  14. #int_RDA
  15. RDA_isr()
  16. {
  17.  in=getc();
  18. }
  19.  
  20. void recepcion()
  21. {
  22.   de=in&0xf0;
  23.   un=in&0x0f;
  24.       switch(de)
  25.       {
  26.          case 0x00:
  27.          output_a(0xc0);
  28.          break;
  29.          case 0x10:
  30.          output_a(0xf9);
  31.          break;
  32.          case 0x20:
  33.          output_a(0xa4);
  34.          break;
  35.          case 0x30:
  36.          output_a(0xb0);
  37.          break;
  38.          case 0x40:
  39.          output_a(0x99);
  40.          break;
  41.          case 0x50:
  42.          output_a(0x92);
  43.          break;
  44.          case 0x60:
  45.          output_a(0x82);
  46.          break;
  47.          case 0x70:
  48.          output_a(0xf8);
  49.          break;
  50.          case 0x80:
  51.          output_a(0x80);
  52.          break;
  53.          case 0x90:
  54.          output_a(0x90);
  55.          break;
  56.          }
  57.         switch(un)
  58.       {
  59.          case 0x00:
  60.          output_d(0xc0);
  61.          break;
  62.          case 0x01:
  63.          output_d(0xf9);
  64.          break;
  65.          case 0x02:
  66.          output_d(0xa4);
  67.          break;
  68.          case 0x03:
  69.          output_d(0xb0);
  70.          break;
  71.          case 0x04:
  72.          output_d(0x99);
  73.          break;
  74.          case 0x05:
  75.          output_d(0x92);
  76.          break;
  77.          case 0x06:
  78.          output_d(0x82);
  79.          break;
  80.          case 0x07:
  81.          output_d(0xf8);
  82.          break;
  83.          case 0x08:
  84.          output_d(0x80);
  85.          break;
  86.          case 0x09:
  87.          output_d(0x90);
  88.          break;
  89.            
  90.     }
  91. }
  92.  
  93. void main()
  94. {
  95.   bit_clear(TRISA,0);
  96.   port_b_pullups (true);
  97.   enable_interrupts(INT_RDA);
  98.   enable_interrupts(GLOBAL);
  99.  for(;;){
  100.    output_low(PIN_E2);
  101.    dato=input_b();
  102.    if(input(PIN_e0)==1){
  103.      output_high(PIN_E2);
  104.      putc(dato);
  105.      delay_ms(100);
  106.      output_low(PIN_E2);
  107.      recepcion();
  108.      }
  109.    }
  110. }
Slave
Código: C
  1. #include <18f2550.h>
  2. #FUSES NOWDT,PUT,MCLR,NOBROWNOUT,NOLVP,NOPROTECT,NODEBUG,NOFCMEN,NOIESO,XT
  3. #use delay(clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
  5. //------------ Pines del LCD ---------------------//
  6. #define LCD_E     PIN_C0
  7. #define LCD_CK    PIN_C1  
  8. #define LCD_DAT   PIN_C2
  9. //--------------------------------------------------//
  10. #include "lcd3.c"
  11. #BYTE TRISA=0X85
  12. #BYTE PORTA=0X05
  13. #use standard_io (b)
  14. char in,dato;
  15. #int_RDA
  16. RDA_isr()
  17. {
  18.  in=getc();
  19.  
  20.  }
  21. void main() {
  22.   port_b_pullups (true);
  23.   bit_clear(TRISA,0);
  24.   lcd_init();
  25.   enable_interrupts(INT_RDA);
  26.   enable_interrupts(GLOBAL);
  27.   output_low(PIN_C4);
  28. for (;;) {
  29.      if(kbhit()){
  30.      output_high(PIN_C4);
  31.      dato=input_b();
  32.      delay_ms(100);
  33.      lcd_gotoxy(1,1);
  34.      printf(lcd_putc,"recibiendo=%c",in);
  35.      lcd_gotoxy(1,2);
  36.      printf(lcd_putc,"Enviando=%c",dato);
  37.      putc(dato);
  38.      output_low(PIN_C4);
  39.       }
  40.    }
  41. }

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Usando Enable en 232
« Respuesta #6 en: 24 de Febrero de 2010, 23:05:56 »
En esta parte del codigo, como podria hacer para que solamente me mande una vez el dato, asi deje precionado siempre el pin e0 y cuando lo suelte y lo precione nuevamente me envie solo una vez el dato

Código: C
  1. void main()
  2. {
  3.   bit_clear(TRISA,0);
  4.   port_b_pullups (true);
  5.   enable_interrupts(INT_RDA);
  6.   enable_interrupts(GLOBAL);
  7.  for(;;){
  8.    output_low(PIN_E2);
  9.    dato=input_b();
  10.    if(input(PIN_e0)==1){
  11.      output_high(PIN_E2);
  12.      putc(dato);
  13.      delay_ms(100);
  14.      output_low(PIN_E2);
  15.      recepcion();
  16.         }
  17.     }
  18. }

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Usando Enable en 232
« Respuesta #7 en: 24 de Febrero de 2010, 23:12:58 »
Una opción, si no perjudica, es hacer un while hasta que se suelte el boton de E0.


Saludos
No contesto mensajes privados, las consultas en el foro

Desconectado Diego E.

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1086
Re: Usando Enable en 232
« Respuesta #8 en: 24 de Febrero de 2010, 23:27:12 »
Yo pondría "while(PIN_e0)==1); " luego de"recepcion();" así se queda esperando hasta que haya un cero en ese pin.

saludos.

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Usando Enable en 232
« Respuesta #9 en: 25 de Febrero de 2010, 00:20:03 »
ya realize el cambio en el codigo pero aun asi me da lo mismo



Código: C
  1. #include <18f4550.h>
  2. #fuses NOWDT,NOPROTECT,NOLVP,INTRC_IO
  3. #use delay (clock=4M)
  4. #use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7, enable=pin_e2)
  5. #use standard_io (a)
  6. #use standard_io (b)
  7. #use standard_io (d)
  8. #use standard_io (e)
  9. #BYTE TRISA=0X85
  10. #BYTE PORTA=0X05
  11. #use standard_io (b)
  12. char in,dato,de,un;
  13. int i;
  14.  
  15. #int_RDA
  16. RDA_isr()
  17. {
  18.  in=getc();
  19. }
  20.  
  21. void recepcion()
  22. {
  23.   de=in&0xf0;
  24.   un=in&0x0f;
  25.       switch(de)
  26.       {
  27.          case 0x00:
  28.          output_a(0xc0);
  29.          break;
  30.          case 0x10:
  31.          output_a(0xf9);
  32.          break;
  33.          case 0x20:
  34.          output_a(0xa4);
  35.          break;
  36.          case 0x30:
  37.          output_a(0xb0);
  38.          break;
  39.          case 0x40:
  40.          output_a(0x99);
  41.          break;
  42.          case 0x50:
  43.          output_a(0x92);
  44.          break;
  45.          case 0x60:
  46.          output_a(0x82);
  47.          break;
  48.          case 0x70:
  49.          output_a(0xf8);
  50.          break;
  51.          case 0x80:
  52.          output_a(0x80);
  53.          break;
  54.          case 0x90:
  55.          output_a(0x90);
  56.          break;
  57.          }
  58.         switch(un)
  59.       {
  60.          case 0x00:
  61.          output_d(0xc0);
  62.          break;
  63.          case 0x01:
  64.          output_d(0xf9);
  65.          break;
  66.          case 0x02:
  67.          output_d(0xa4);
  68.          break;
  69.          case 0x03:
  70.          output_d(0xb0);
  71.          break;
  72.          case 0x04:
  73.          output_d(0x99);
  74.          break;
  75.          case 0x05:
  76.          output_d(0x92);
  77.          break;
  78.          case 0x06:
  79.          output_d(0x82);
  80.          break;
  81.          case 0x07:
  82.          output_d(0xf8);
  83.          break;
  84.          case 0x08:
  85.          output_d(0x80);
  86.          break;
  87.          case 0x09:
  88.          output_d(0x90);
  89.          break;
  90.            
  91.     }
  92. }
  93. void main()
  94. {
  95.   bit_clear(TRISA,0);
  96.   port_b_pullups (true);
  97.   enable_interrupts(INT_RDA);
  98.   enable_interrupts(GLOBAL);
  99.  for(;;){
  100.  //  output_low(PIN_E2);
  101.    dato=input_b();
  102.    while(input(PIN_e0)==1){
  103.  //    output_high(PIN_E2);
  104.      putc(dato);
  105.      delay_ms(100);
  106.  //    output_low(PIN_E2);
  107.      recepcion();
  108.         }
  109.     }
  110. }
cambiando el enable, haciendolo por tiempo pero aun asi no logro nada

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Usando Enable en 232
« Respuesta #10 en: 25 de Febrero de 2010, 01:22:03 »
Si lo que quieres es detectar un flanco debes hacer el if(input(PIN_E0)) y dentro del mismo y antes de salir del if un while(input(PIN_E0)). Hay que analizar los pasos que va realizando el microcontrolador para darse cuenta de esos detalles.  ;-)


Saludos!
No contesto mensajes privados, las consultas en el foro

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Usando Enable en 232
« Respuesta #11 en: 25 de Febrero de 2010, 01:26:13 »
Ok gracias por la informacion intentare para ver si ya me sincroniza, si no tendre que optar por leer la libreria Rs485.c y tratar de implementarla

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Usando Enable en 232
« Respuesta #12 en: 25 de Febrero de 2010, 01:31:37 »
Si lo que quieres es detectar un flanco debes hacer el if(input(PIN_E0)) y dentro del mismo y antes de salir del if un while(input(PIN_E0)). Hay que analizar los pasos que va realizando el microcontrolador para darse cuenta de esos detalles.  ;-)

Saludos!
Ajuste el codigo a como mencionaste y efectivamente ya solo me manda 8 bits, ahora solo tengo que ajustar el codigo del pic esclavo, ya que tengo que enviarle 5 veces consecutivas el dato del pic master para que este pueda contestarme

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: Usando Enable en 232
« Respuesta #13 en: 25 de Febrero de 2010, 20:25:58 »
analizando mi programa, veo que cuando preciono el boton que se encuentra en el puerto E0, me envia el dato que esta en el puerto b, pero justo cuando termina me manda 00, hay alguna forma de evitar que me envie ese codigo???


Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Usando Enable en 232
« Respuesta #14 en: 25 de Febrero de 2010, 20:33:21 »
Muéstranos como quedo el bucle del main  :?
No contesto mensajes privados, las consultas en el foro


 

anything