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

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

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
RS232 - Comunicación serial (SOLUCIONADO) Arrrrr Fiiiinnnn! ;)
« en: 03 de Febrero de 2008, 18:18:07 »
Hola chamos, siguiendo en mi aprendizaje de los recursos del Pic 18F4550 y del lenguaje C, pues despues de manejar los timer y los modulos CCP, gracias a la ayuda de muchos de ustedes... Pues he decidido meterme con la comunicación Serial, y el modulo EUSART...

He hecho un pequeño programita para mandar un número via hypertermnal, y bueno, quizá cometi una burrada, me he guiado de ejemplos y lecturas que he hecho.... no se si está bien, bueno creo que no lo esta puesto que en la simulación no me muestra el número que mando a mostrar... En fin aquí está el programita, si alguien le echa un ojito a ver donde está mi error!!! se los agradeceria....

#include <18f4550.h>
#fuses NOWDT,NOPROTECT,NOCPD,NOLVP,INTRC_IO,NOMCLR,CCP2C1,NOPBADEN
#use fast_io (A)
#use fast_io (B)
#use fast_io (C)
#use fast_io (D)
#use fast_io (E)
#use delay(clock=4000000)
#USE RS232 (baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)
#byte RCON=0xFD0
#bit POR=RCON.1                                                // Bit de la bandera del Power On Reset
#byte RCSTA=0xFAB
#bit SPEN=RCSTA.7
#bit CREN=RCSTA.7
#byte TXSTA=0xFAC
#bit TXEN=TXSTA.5
#bit SYNC=TXSTA.4
#byte PIR1=0xF9E
#bit RCIF=PIR1.5
#byte STATUS=0xFD8


int dato=0;

void main(void)
{

          set_tris_d (0b00000001);                        // Configura puerto d como salida y entrada

            while(true)
            {
                output_low(PIN_D1);
               if(input(PIN_D0)==0)
                  {
                     dato=0xF9;                           // Mandamos el dato (1)
                     dato=getc();
                     printf("dato");         //mensaje por v.terminal
                  }
               else
               {
                     output_high(PIN_D1);
               }

            }
}



PD: Algún dia les recompensaré tanta ayuda que me hab brindado, y de alguna forma les pagaré todo el fastidio que le he hecho pasar con mis preguntas!!1 jjrjrjr :?

Atte: Enigma... La llanerita de Guayana :)
« Última modificación: 09 de Febrero de 2008, 15:25:33 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 jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: RS232 - Comunicación serial
« Respuesta #1 en: 03 de Febrero de 2008, 18:24:08 »
Para enviar un dato tienes que emplear:

putc(0xF9);

ó

printf("%c",0xF9);

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #2 en: 03 de Febrero de 2008, 18:32:45 »
Ummm y no se puede enviar a través de una variable??? como la variable "dato", que puse allí??
Es que también lo puse así enviar el dato directamente y no lo muestra!!! no se si me falta chequear algo, configurar algún bit de los registros correspondientes a esta función

Otra preguntica que se me olvido hacer, saben que en ASM uno activaba todo los bits del txsta y el RCsta manualmente, que si activando la transmisión, la recepción, chequeando el buffer y todo eso.... En C es necesario hacer todo eso???



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 jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: RS232 - Comunicación serial
« Respuesta #3 en: 03 de Febrero de 2008, 18:40:40 »
Si queremos utilizar una variable, simplemente ponemos:

dato=0xF9;

putc(dato);

ó

printf("%c",dato);

Si pones:

printf("%s", "Hola Mundo");

Te enviará toda la cadena.

Para configurar el puerto es suficiente con la declaración que pusiste:

#USE RS232 (baud=9600,bits=8,parity=N,xmit=PIN_C6,rcv=PIN_C7)

La recepción de los caracteres hay que hacerla (para optimizarlo) mediante una interrupción.

¿Estas simulando en Proteus?. Pon la simulación y el programa para ver que ocurre.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #4 en: 03 de Febrero de 2008, 18:48:48 »
Si, estoy simulando en proteus!!!
Pero eso fue lo que coloque, el printf("%c",dato); y no lo hace, por eso crei que era algún problema en la configuarción de algún bit!!! :?

Umm.... despues que le doy al pulsador, creo que se queda pegado en el If, puesto que cuando suelto al mismo pulsador pues el led se me queda apagado!!!!

Aqui está el DSN y el .C

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 RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #6 en: 03 de Febrero de 2008, 19:00:58 »
Gracias redpic, ya habia revisado algunos de esos ejemplos, los más sencillos por supuesto y bueno por allí fue que me guie para hacer mi diminuto programa, pero no se, hice (creo) todo lo que debi hacer y pos no funciona, por eso acudi aquí, porque ha de ser que me falto algo, o estoy haciendo algo más, lo cual trae como cponsecuencia el que no me funcione!!! :?

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 Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #7 en: 03 de Febrero de 2008, 21:36:25 »
Una preguntica... Será que hay algo malo con estás instrucciones:

                      dato=0x40;
                      dato=getc();
                      printf("%c",dato);                   //mensaje por v.terminal

Es que estoy haciendo unas pruebas y bueno, hice esto:

                     dato=0x40;                     
                     dato=getc();
                     output_high(PIN_D2);
                     printf("%c",dato);                   //mensaje por v.terminal

Mande a encender un led, justamente en está linea, my bueno al parecer el programa se queda colgado en la instrucción dato=getc();... porque el led nunca me enciende....

He modificado el programa y antes de mandar a Dato, mande un mesaje en la pantalla y si lo muestra... pero cuando llega a la instrucción que les mensioné anteriormente, se queda como pegado allí... como si estuviera esperando el dato o no se...

Entonces bueno quisiera saber si hay algo de mala en ese pedacito de instruccción....

Si quieren ver el programa modificado, aquí está...

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 jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: RS232 - Comunicación serial
« Respuesta #8 en: 03 de Febrero de 2008, 23:53:25 »
En esa instrucción se queda el micro esperando un carácter por el puerto RS232. Esa instrucción debe de estar dentro de la interrupción del puerto RS232.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #9 en: 04 de Febrero de 2008, 00:03:30 »
Pero es que no entiendo....  :? si le estoy mandando el caracter, porque no lo agarra???... dentro de la interrupción....? pero es que como en la interrupción.... Por fa si puedes ser un poco más explicito te lo agradeceria en el alma!!!   Se que tiene que ver con algo en la recepción, pero no logro entender que es!!!! :?

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 jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: RS232 - Comunicación serial
« Respuesta #10 en: 04 de Febrero de 2008, 00:10:48 »
La instrucción getc() lee un carácter del puerto serie y la instrucción putc() coloca un carácter en el puerto. Por lo tanto con getc() el micro se queda esperando a recibir  un carácter y hasta que no lo recibe no sale de su espera. Para evitar esto hay una interrupción que es la #INT_RDA que se activa cuando se recibe un carácter, de esta forma al llamar a getc() en la interrupción, nos aseguramos que haya efectivamente un carácter y que el programa no se pare.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #11 en: 04 de Febrero de 2008, 00:22:08 »
Aja... no es que te quiera contradecir ni nada por el estilo, primero porque no tengo los conocimientos suficientes para poder discutirte eso.... y segundo pues no es mi intención discutir por ello... Pero.... Porque en los ejemplos que he visitado por allí no tienen ninguna interrupción, es decir, ellos envian un caracter y ya, sin llamar o declarar la interrupción que planteas!!! he visto muuuchos ejemplos tratando de resolver mi pequeño gran problema y pues en ninguno he visto la #INT_RDA...  :?

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 jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: RS232 - Comunicación serial
« Respuesta #12 en: 04 de Febrero de 2008, 00:33:12 »
getc() lo que hace es recibir un carácter. Por lo tanto estas esperando recibir un carácter y NO LO ESTAS ENVIANDO. Para enviarlo se utiliza putc().

Seguramente en los ejemplos que has visto se está realizando un ECO para que todo lo que se reciba se reenvíe por el puerto.

Un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús

Desconectado Enigma

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 609
    • www.toroscoleados.com
Re: RS232 - Comunicación serial
« Respuesta #13 en: 04 de Febrero de 2008, 00:45:59 »
Ahhh o.k... :(... si pero no te enojes!!!! :oops:   :cry:

Dios.... bueno seguiré en mi busqueda a ver si me da el bendito programa ese!!! ya estoy así  :z)... es dificil desarrollar algo cuando no posees los conocimientos necesarios y suficientes, y cuando las fuentes son tan escasas!!! estoy como quien dice: tirando flechas!!!!

Atte: Enigma... LA llanerita de Guayana :z)
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 jfh900

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3595
Re: RS232 - Comunicación serial
« Respuesta #14 en: 04 de Febrero de 2008, 00:49:26 »
Tranquila, no me enfado ni me enojo por eso, ni muchísimo menos. Lo que quería era llamar tu atención sobre ese punto en concreto y creo que lo he conseguido. Por otra parte estas aprendiendo muy a fondo los micros con los programas de ejemplos que estas abordando y creo sinceramente que vas por muy buen camino.

un saludo
* Cuando hables, procura que tus palabras sean mejores que el silencio.
* 'Todos somos ignorantes, lo que ocurre es que no todos ignoramos las mismas cosas.' Albert Einstein.
* No hay nada peor que un experto para evitar el progreso en un campo
* "La vida es como una novela. No importa que sea larga, sino que esté bien narrada" Seneca
* La vida no se vive por las veces que respiras, sino por los momentos que dejan sin aliento.
* Dios dijo: ∇·E=ρ/ε0 ; ∇·B=0 ; ∇xE=-dB/dt ; ∇xB= μ0ε0dE/dt..y la luz se hizo..!!..

Desde España Jesús


 

anything