Autor Tema: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)  (Leído 9772 veces)

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #15 en: 04 de Febrero de 2008, 01:25:15 »
 :shock:

No se que carajo hice, pero hice que funcionara!!!!!! :lol:

aaaaaaaaaaaaaaaaaaaaaaaa!!!!!!!!!!!!!!!!!!!  :D  :D  :D  :D  :D  :D  :D  :D  QUE FELICIDAD!!!!!!!!!!!!!!!!!!!!!1 :D

DIOSSSSSSS NO LO PUEDO CREER!1 DESPUES DE PASAR TODO UN DIA TRATANDO DE ENVIAR UN SOLITO MISERO CARACTER POR EL HYPERTERMINAL.. LO LOGREEEEEEEEEE!!!! NO LO PUEDO CREER!!!!!!1 QUE FELIZ SOY!!!!!!!!!1 :D :D :D.....Graciasssssssssss JFH900.......mil gracias!!!! que felicidad se me vio un caracter!!!!!! siiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii :mrgreen:

Jejeje bueno ahora a seguir con la otra parte del programa.... hacer que el caracter varie!!!

Si mandar un caracter me llevo todo un dia... Dios mandar uno que varie... cuanto me tomará!!!!!! :?

pero antes trataré de analizar y entender que hice!!!! :?

Atte: Enigma... La llanerita de Guayana :-)
« Última modificación: 04 de Febrero de 2008, 01:27:16 por Enigma »
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17670
    • MicroPIC
Re: RS232 - Comunicación serial
« Respuesta #16 en: 04 de Febrero de 2008, 08:29:06 »
Qué alegría da cuando se ven las cosas funcionando. Ea, ya has cumplido por hoy y te puedes ir a descansar. Recuerda apartar las resistencias y los transistores antes, que pinchan.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #17 en: 04 de Febrero de 2008, 14:01:12 »
Jajajaja si vale que alegria!!!! Tranquilo que como medio ordene la habitación pues ya no tengo los componentes tan regados por ahi... aunque ya no tardan en estar, puesto que está volviendo el desorden....  :?

Ahora a seguir con la otra parte del programa :mrgreen:

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: RS232 - Comunicación serial
« Respuesta #18 en: 07 de Febrero de 2008, 03:56:24 »
Hola Enigma, hice pequeñas modificaciones a tu programa.

Código: [Seleccionar]
#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOCPD,NOLVP,INTRC_IO,NOMCLR,CCP2C1,NOPBADEN
#use delay(clock=4000000)
#USE RS232 (baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)


char dato_e='H',dato_r;

void main(void)
{

       
            while(true)
            {
                output_low(PIN_D1);
               if(input(PIN_D0)==0)
                  {
           
                     dato_r=getc();
                     printf("dato_e :%c  dato_r %c",dato_e,dato_r);        //mensaje por v.terminal
                  }
               else
               {
                     output_high(PIN_D1);
               }

            }
}



Al pulsar el push. El pic espera a que le envies un caracter, en la pantalla de la virtual terminal teclea un caracter cualquiera, para que el pic lo reciba, al hacerlo este envia un mensaje con el valor que tiene la variable dato_e  y la variable dato_r, en esta última se guardó el caracter que enviaste.




Te adjunto el .c  y el dsn.

P.D
Citar
DIOSSSSSSS NO LO PUEDO CREER!1 DESPUES DE PASAR TODO UN DIA TRATANDO DE ENVIAR UN SOLITO MISERO CARACTER POR EL HYPERTERMINAL..

getc();  te sirve para recibir un caracter, de otro pic, de una pc, etc. Si solo deseas enviar datos, no utilices esa instrucción.



Saludos.

Ganbatte kudasai.

« Última modificación: 07 de Febrero de 2008, 04:15:29 por huichoman »

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2567
Re: RS232 - Comunicación serial
« Respuesta #19 en: 07 de Febrero de 2008, 08:49:26 »
Bien está que para empezar lo hayas hecho con el get en el while, pero cuando puedas estudiate la recepción de caracteres por interrupción.

Es más aconsejable, ya que si la recepción de datos es muy grande el uso de get en el while dá problemas (comprobado).

Dentro de la interrupción haz las menos operaciones posibles, recibe el caracter, guárdalo en una variable y salte.

Un saludo

Desconectado COMBAT

  • PIC10
  • *
  • Mensajes: 11
Re: RS232 - Comunicación serial
« Respuesta #20 en: 07 de Febrero de 2008, 13:59:08 »

     Bueno el post.... alguién tendría más información de esto para novatos ?  8)

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial (Solucionado)
« Respuesta #21 en: 09 de Febrero de 2008, 15:23:02 »
Hola Chiiiicos traigo excelentes Noticias Bueno p`rimero que nada agradezco los aportes, huichoman ese programa está bastante sencillo y didactico, bueno para empezar la comunicación serial!!!! :mrgreen:

Bueno les cuento que ya he logrado hacer mni proyecto ekl cual trata de lo siguiente:

Realizar el diseño de un programa con circuiteria externa el cual permita controlar la velocidad de un motor a través del teclado númerico del computador. En pantalla (hyperterminal) se tiene que visualizar los siguientes datos del motor: Hora, fecha y velocidad del mismo. Dichos datos pueden ser visto en pantalla cuando el usuario lo desee aún despues de haber apagado el sistema, para ello se tiene que guardar un registro de la actividad del motor en una memoria EEPROM 24C512, la base de tiempo será de 1 segundo y dicho tiempo ser5á medido por un Reloj de tiempo Real DS1307. En pantalla se tiene que desplegar un menú con las siguientes opciones:

A) Modificar velocidad del motor
B) Programar fecha
c) Ver datos del Motor
D) Guardar datos del motor en memoria
E) Ver registro del motor (guardado en memoria)

Bueno muchachos ese fué mi programa, sencillo para los más expertos :P, pero para mi que estoy empezando en este Mundo de C y del PIC 18F4550 pues me costo un mundo hacerlo :?, dias sin dormir, noches sin cenar y muuuucho cansancio!!!! :(

 :8}

Cualquier cosa que lo quieran ver pues me dicen y lo publico!!!! Saludos y un beso!!!! Gracias por toda su colaboración!!!! Un besote!!!!!! :mrgreen:

Atte: Enigma... La llanerita de Guayana :-)
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4854
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #22 en: 09 de Febrero de 2008, 15:38:58 »
 :-/ :-/ Miss Enigma, por favor publicalo  :-/ :-/ :-/ :-/ que yo he seguido todos tus mensaje  :-/ :-/ :-/ y quiero aprender como tu  :-/ :-/ :-/  :lol: :lol: :lol:

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17670
    • MicroPIC
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #23 en: 09 de Febrero de 2008, 18:04:34 »
Enhorabuena miss Enigma. No nos dejes con la miel en los labios y publícalo, anda.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado huichoman

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 186
    • Pequeñas piezas para grandes proyectos.
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #24 en: 09 de Febrero de 2008, 20:52:32 »
Felicidades Enigma.  :-/  Cuando se hace el mejor esfuerzo, la gratificación es enorme. ;-)

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #25 en: 13 de Febrero de 2008, 23:14:55 »
Hola muchachos gracias por todo la verdad que ustedes ayudarón en gran parte con sus sugerencias a desarrolar mis conocimientos para este proyecto!!!!

Disculpen la tardanza es que no tenia internet.... jejejeje!! :mrgreen:

Bueno como lo prometido es deuda aquí les dejo mi programa, espero que sea mucho de provecho!!!! Un beso a todos!!!  :D

Atte: Enigma... La llanerita de Guayana  :D
No hay nada como cabalgar en la sabana y sentir la brisa con olor a mastranto, bosta y ganado. ¡¡O Fortuna, velut luna, status variabilis, semper crescis, aut decrescis, vita detestabili!! Que viva el coleo, la musica LLanera y la gótica!

Desconectado quirogaareal

  • PIC16
  • ***
  • Mensajes: 180
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #26 en: 22 de Febrero de 2008, 10:08:46 »
Buenas:

Aprovecho este tema para no abrir otro nuevo . Estoy empezando un programa y lo primero que tengo que probar es rs232 he leido vario ejemplitos sencillos y consigo ..en simulacion que me anden 2 de 3 teclas del teclado , mi problemas radica en que no puedo hacer encender un led desde el teclado .
Algun tip que me puedan dar? aca se los adjunto.

PD: Ignoren la parte de can ...es es aun ..otra historia ...para mas adelante
La simulacion va adjuntada en el archivo



#include <18F258.h>
#device adc=16

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES xt                       //High speed osc with HW enabled 4X PLL
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOOSCSEN                 //Oscillator switching is disabled, main oscillator is source
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads

#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#define CAN_USE_EXTENDED_ID TRUE
#include <can-18xxx8.c>
#include <flex_lcd1.c> //libreria para lcd
#use fast_io (C)
//#use fast_io (A)
#use fast_io (B)

#use fixed_io(a_outputs=PIN_A4)
//char Keypress;

#int_rda
void rda_isr()
 {   
 
 switch(getc())
     
     {
     case'1':  lcd_putc("bit enviado");
     output_high(PIN_A4);
     delay_ms(1000);
     output_low(PIN_A4);
     lcd_putc("\f");
     break;
     
     case'2':lcd_putc("Info \n ready PLC");
     delay_ms(3000);
     lcd_putc("\f");
     break;
     
     case'3': if(!input(PIN_B0)) puts("PRESIONADO");
               else  puts("suelto");
               break;
     } 
     
 }




/*

#int_EXT1
void  EXT1_isr(void)
{

}

#int_EXT2
void  EXT2_isr(void)
{

}

*/

/*

#int_canrx0
void canrx0_int ( ) {
   // TODO: add CAN recieve code here
}
#int_canrx1
void canrx1_int ( ) {
   // TODO: add CAN recieve code here
}
#int_cantx0
void cantx0_int ( ) {
   // TODO: add CAN transmit code here
}
#int_cantx1
void cantx1_int ( ) {
   // TODO: add CAN transmit code here
}
#int_cantx2
void cantx2_int ( ) {
   // TODO: add CAN transmit code here
}

*/


void main()
{
 // can_init();
   lcd_init();
   

  //can_set_mode(CAN_OP_CONFIG);
  /*
   BRGCON1.brp=4;
   BRGCON1.sjw=0;
   BRGCON2.prseg=2;
   BRGCON2.seg1ph=5;
   BRGCON2.sam=FALSE;
   BRGCON2.seg2phts=FALSE; 
   BRGCON3.seg2ph=5;
   BRGCON3.wakfil=TRUE;

   can_set_mode(CAN_OP_NORMAL);
   
   enable_interrupts(int_canrx0);
   enable_interrupts(int_canrx1);
   enable_interrupts(int_cantx0);
   enable_interrupts(int_cantx1);
   enable_interrupts(int_cantx2);
*/

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   enable_interrupts(INT_EXT1);
   enable_interrupts(INT_EXT2);
   enable_interrupts(GLOBAL);
   setup_low_volt_detect(FALSE);
   enable_interrupts(int_rda);
 set_tris_c(0xFC);                               // Puerto C entradas
//Setup_Oscillator parameter not selected from Intr Oscillator Config tab

   // TODO: USER CODE!!




       printf("\f");                                                                    // Limpio pantalla
       printf("****************************************** \n\r");
       printf("             ESCOJA UNA OPCION             \n\r");
       printf("(1)ENCIENDE APAGA BACKLIGHT                \n\r");
       printf("(2)IMPRIME CARTEL                          \n\r");
       printf("(3)DETECTA PULSADOR                        \n\r");
       printf("****************************************** \n\r");

 

while(true)
   {
 
 

 
 
     }
       
}
Recuerda : Si una mujer te ama de verdad no te pedira ni Matrimonio, Ni concubinato , Ni hijos, No te mentira , ni buscara que cambies de opinion con respecto a las tres primeras opciones.

Saludos

desde Cordoba Argentina

Desconectado quirogaareal

  • PIC16
  • ***
  • Mensajes: 180
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #27 en: 23 de Febrero de 2008, 21:46:59 »
Buenas:

Me autorespondo, el problema estaba en la habilitacion del puerto con la funcion tris  y en la activacion de las pullups.
por lo menos en similacion consegui lo buscado que seria a travez de rs232 lo siguiente
1- encender el backlight del display
2-imprimir un cartel en el display
3-checkar el estado de una llave cerrada o abierta.

Se que es sencillo pero espero que a alguno le sea de ayuda .

A continuacion les dejo los archivos para descargar(versiones ccs4.065 y proteus 7.1sp2) 
Recuerda : Si una mujer te ama de verdad no te pedira ni Matrimonio, Ni concubinato , Ni hijos, No te mentira , ni buscara que cambies de opinion con respecto a las tres primeras opciones.

Saludos

desde Cordoba Argentina

Desconectado papinolmedo

  • PIC10
  • *
  • Mensajes: 11
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #28 en: 27 de Febrero de 2008, 07:31:21 »
Estimados:

Me ocurre algo similar a lo de quirogaareal, esoy trabajando con el pic18f258 en una aplicación muy simple para realizar comunicación serial via rs232 con el pc. Con la transmisión de datos del pic al pc no se presentan problemas, pero cuando intento  enviar un dato del pc al pic, este ultimo no lo recibe. He revisado el circuito de la MAX2323 y funciona sin problemas. El mismo error se genera cuando pruebo el programa con otro pic18f258. Comienzo a pensar que el error pueda estar en el HW más que en SW.

Adjunto el código en CCS para ver si alguien me puede ayudar. Espero que alguien de los que ha trabajado con este pic pueda responder y comentar su experiencia. De antemano, gracias.

Sañudos cordiales.


Código: CSS
  1. #include <18F258.h>
  2. #fuses HS, NOPROTECT, NOWDT
  3. #use delay(clock=20000000)
  4. #use rs232(baud=19200, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
  5.  
  6. #use fast_io(A)      //configura puerto A como I/O digital
  7. #use fast_io(B)      //configura puerto B como I/O digital
  8.  
  9.  
  10. char cmd;
  11.  
  12.  
  13. void main() {
  14.  
  15.    setup_adc_ports(NO_ANALOGS);
  16.    setup_adc(ADC_OFF);
  17.    setup_spi(SPI_SS_DISABLED);
  18.    setup_wdt(WDT_OFF);
  19.    setup_timer_0(RTCC_INTERNAL);
  20.    setup_timer_1(T1_DISABLED);
  21.    setup_timer_2(T2_DISABLED,0,1);
  22.    setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
  23.    setup_low_volt_detect(FALSE);
  24.    
  25.    set_tris_a(0xFF);    //configura puerto a como entrada
  26.    set_tris_b(0x00);    //configura puerto b como salida
  27.    
  28.    OUTPUT_B(0x00);      //puerto B inicialmente en bajo  
  29.  
  30.    while(true){
  31.      
  32.       if (kbhit()) {
  33.          cmd = getc();
  34.          printf("%c",cmd);
  35.          if(cmd == 'a'){ output_high(PIN_B7);}
  36.          if(cmd == 's'){ output_low(PIN_B7); }
  37.          }
  38.      
  39.      
  40.       if (input(PIN_A1)==1) { output_high(PIN_B6); printf("  pin_A1 alto");}
  41.       else { output_low(PIN_B6); }
  42.      
  43.       if (input(PIN_A2)==1) { output_high(PIN_B5); printf("  pin_A2 alto");}    
  44.       else { output_low(PIN_B5); }
  45.      
  46.       if (input(PIN_A3)==1) { output_high(PIN_B4); printf("  pin_A3 alto");}    
  47.       else { output_low(PIN_B4); }
  48.      
  49.       if (input(PIN_A4)==1) { output_high(PIN_B3); printf("  pin_A4 alto");}    
  50.       else { output_low(PIN_B3); }
  51.      
  52.       if (input(PIN_A5)==1) { output_high(PIN_B2); printf("  pin_A5 alto");}    
  53.       else { output_low(PIN_B2); }
  54.      
  55.                
  56.       }     //fin while
  57.  
  58. }  //fin programa principal
"Seamos realistas y hagamos lo imposible."
Ernesto Guevara de la Serna.

Desconectado quirogaareal

  • PIC16
  • ***
  • Mensajes: 180
Re: RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« Respuesta #29 en: 27 de Febrero de 2008, 09:16:04 »
Hola :

Mira lo que yo hice aun esta de simulador, como sabes entre simulador y circuito real hay diferencia, sin embargo proba de habilitar las pullup del puerto b , tambien proba de cambiar el clock(si estas en simulacion ) 4mhz y y el respectivo fuse a xt, tambien podes probar de meter  el codigo en la  interrupcion en rs232,  veo que tenes pocos fuses proba de usar el pic wizar y agrgar algunos mas , tambien puede ser eso.

No cuento con la increible experiencia de los programadores del foro pero me baso en el programa con el que tuve inconvenientes, proba y despues contanos.

Saludos

desde Cordoba Argentina

 
Recuerda : Si una mujer te ama de verdad no te pedira ni Matrimonio, Ni concubinato , Ni hijos, No te mentira , ni buscara que cambies de opinion con respecto a las tres primeras opciones.

Saludos

desde Cordoba Argentina


 

anything