Autor Tema: Envio datos RS-232 y su programación para pic16f874  (Leído 2974 veces)

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

pelopicpatas

  • Visitante
Envio datos RS-232 y su programación para pic16f874
« en: 31 de Marzo de 2006, 05:12:00 »

Estamos realizando un Proyecto de una placa comunicadora con un pic 16f874 y hemos realizado las funciones pertinentes para captar los datos por medio de las entradas analogicas y digitales de las que consta el uchip.

   Ahora debemos comunicarnos con un ordenador por medio de RS-232 y necesitamos saber como programar esta parte. No sabemos como detectar el caracter (enviado desde el ordenador) para ejecutar la opcion pertinente, y tampoco sabemos como enviar los datos por la RS.

   Agradeceríamos cualquier tipo de informacion.

UN SALUDO

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Envio datos RS-232 y su programación para pic16f874
« Respuesta #1 en: 31 de Marzo de 2006, 06:17:00 »
Escrito originalmente por pelopicpatas

Estamos realizando un Proyecto de una placa comunicadora con un pic 16f874 y hemos realizado las funciones pertinentes para captar los datos por medio de las entradas analogicas y digitales de las que consta el uchip.

   Ahora debemos comunicarnos con un ordenador por medio de RS-232 y necesitamos saber como programar esta parte. No sabemos como detectar el caracter (enviado desde el ordenador) para ejecutar la opcion pertinente, y tampoco sabemos como enviar los datos por la RS.

   Agradeceríamos cualquier tipo de informacion.

UN SALUDO


Hay varios ejemplos de esto por doquier.  Una cosa importante es saber en que lenguaje programan.

El código que buscan es el mismo que si fuera para un 16F873, 16F876 o 16F877 tanto en las variedades normales como las que tengan la letra A.

Puedes buscar en el almacen de assembler o en el topic que inició RedPIC de ejemplos para Lenguaje C (ccs)

http://miarroba.com/foros/ver.php?foroid=46840&temaid=4683700

Básicamente la idea es leer un dato de la usart.  Si leen un solo byte y cada byte es un comando, entonces es simplemente una comparación.

En C, sería algo como un switch..case, en assembler se podría hacer con restas sucesivas entre el valor leído y las sucesivas posibilidades.  Cuando el resultado es 0 (bit status,z encendido) es porque esa es la opción.

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

pelopicpatas

  • Visitante
RE: Envio datos RS-232 y su programación para pic16f874
« Respuesta #2 en: 03 de Abril de 2006, 04:03:00 »
Se agradece tu ayuda. Hemos leido esos ejemplos y nos han aclarado algunas dudas, pero algunos conceptos no tenemos claros:

    Nuestro pic 16f874 está contínuamente leiendo datos tanto analógicos como digitales y debemos interrumpìr dicha lectura cuando le llege un carácter desde la RS 232. (todo en lenguaje C)

     ¿como creamos esa interrupción?
     ¿qué nos va a llegar?

   La velocidad de transmisión ya están declaradas inicialmente:
         #use rs232 (vaud=9600, xmit=salida_RS, rcv=entrada_RS)

    Nos falta (esta parte nos la pone por defecto):

        #int_tbe
             {
             }

        #int_rda
              {
              }
        #int_rda_isr
              {
              }

Gracias por la ayuda                                               UN SALUDO

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
RE: Envio datos RS-232 y su programación para pic16f874
« Respuesta #3 en: 03 de Abril de 2006, 05:49:00 »
Escrito originalmente por pelopicpatas
Se agradece tu ayuda. Hemos leido esos ejemplos y nos han aclarado algunas dudas, pero algunos conceptos no tenemos claros:

    Nuestro pic 16f874 está contínuamente leiendo datos tanto analógicos como digitales y debemos interrumpìr dicha lectura cuando le llege un carácter desde la RS 232. (todo en lenguaje C)

     ¿como creamos esa interrupción?
     ¿qué nos va a llegar?

   La velocidad de transmisión ya están declaradas inicialmente:
         #use rs232 (vaud=9600, xmit=salida_RS, rcv=entrada_RS)

    Nos falta (esta parte nos la pone por defecto):

        #int_tbe
             {
             }

        #int_rda
              {
              }
        #int_rda_isr
              {
              }

Gracias por la ayuda                                               UN SALUDO


La verdad no se que compilador usan pero en los 16F yo no uso el C así que si usan CCS o HiTech PIC no los puedo ayudar.  Una cosa es interpretar un programa y otra es decirles como se hace algo que no usé nunca.

Un comentario,  la siguiente linea

#use rs232 (vaud=9600, xmit=salida_RS, rcv=entrada_RS)

es "vaud" o "baud" ? ojo con eso.  Y además definan los pines RC6 y RC7 de usart para que sea usado el módulo de usart por hardware.

Ahora expliquenme esto:
   Nuestro pic 16f874 está contínuamente leiendo datos tanto analógicos como digitales y debemos interrumpìr dicha lectura cuando le llege un carácter desde la RS 232. (todo en lenguaje C)

Si deben interrumpir la lectura cuando llega un dato, se refieren a que cuando llega un dato el pic DEBE dejar de hacer lo que está haciendo? o a que esto es lo  que les sucede ahora y uds quisieran que no suceda?

Porque si DEBEN interrumpir lo que estan haciendo no necesariamente hay que usar una interrupción.

Saludos

- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado darkchumale

  • PIC10
  • *
  • Mensajes: 3
Re: Envio datos RS-232 y su programación para pic16f874
« Respuesta #4 en: 25 de Julio de 2007, 15:40:26 »
                   /////////////////////////////////////////////////////
               /////*Programa Para PIC Comunicacion RS232*//////////
               //////////////////////////////////////////////////////////////////////
                                          ////ALUNMOS:JOSE JORQUERA////////
                                          ////////////LUIS JUAREZ////
                                          //////////////////////////////////
//#Include <16f873a.h>
#Include  "C:\Archivos de programa\PICC\Devices\16f873a.h"
//#Include  "C:\Archivos de programa\Microchip\Third Party\PICC\Drivers\stdio.h"   
# use Delay (clock=4000000)
# use rs232(baud=9600,xmit=pin_c6,rcv=pin_c7,timeout=100)
#fuses XT, NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
unsigned char Dato;

void main(void)         
            {

setup_adc(7);

      printf ("Generador De Secuencias   \n\r");
      printf ("\n\r");
      printf (            "Menu                  \n\r");
      printf ("\n\r");
      printf ("Elija La secuencia a Realizar            \n\r");
      printf ("\n\r");
      printf ("   (1) Secuencia Leds Intermitentes      \n\r");
      printf ("\n\r");
      printf ("   (2) Secuencia Leds Dos en Dos         \n\r");
      printf ("\n\r");
      printf ("   (3) Secuencia leds On y Off            \n\r");
      printf ("\n\r");
      printf ("   (4) Boton 1 Secuencia Pendulo         \n\r");
      printf ("\n\r");
      printf ("   (5) Boton 2 Reset                  \n\r");
         
while(TRUE)
   {
   Dato=getc();

            if(input(PIN_A4)==0)
                 {      
             output_high(pin_B0);
                Delay_ms(100);
             output_low(pin_B0);
                Delay_ms(100);
             output_high(pin_B1);
                Delay_ms(100);
             output_low(pin_B1);
                Delay_ms(100);
             output_high(pin_B2);
                Delay_ms(100);
             output_low(pin_B2);
                Delay_ms(100);
             output_high(pin_B3);
                Delay_ms(100);
             output_low(pin_B3);
                Delay_ms(100);
             output_high(pin_B4);
                Delay_ms(100);
             output_low(pin_B4);
                Delay_ms(100);
             output_high(pin_B5);
                Delay_ms(100);
             output_low(pin_B5);
                Delay_ms(100);
             output_high(pin_B6);
                Delay_ms(100);
             output_low(pin_B6);
                Delay_ms(100);
             output_high(pin_B7);
                Delay_ms(100);
             output_low(pin_B7);
                Delay_ms(100);
             output_high(pin_B6);
                Delay_ms(100);
             output_low(pin_B6);
                Delay_ms(100);
             output_high(pin_B5);
                Delay_ms(100);
             output_low(pin_B5);
                Delay_ms(100);
             output_high(pin_B4);
                Delay_ms(100);
             output_low(pin_B4);
                Delay_ms(100);
             output_high(pin_B3);
                Delay_ms(100);
             output_low(pin_B3);
                Delay_ms(100);
             output_high(pin_B2);
                Delay_ms(100);
             output_low(pin_B2);
                Delay_ms(100);
             output_high(pin_B1);
                Delay_ms(100);
             output_low(pin_B1);
                Delay_ms(100);
             output_high(pin_B0);
                Delay_ms(100);
             output_low(pin_B0);
                Delay_ms(100);
             output_high(pin_B1);
                Delay_ms(100);
             output_low(pin_B1);
                Delay_ms(100);
             output_high(pin_B2);
                Delay_ms(100);
             output_low(pin_B2);
                Delay_ms(100);
             output_high(pin_B3);
                Delay_ms(100);
             output_low(pin_B3);
                Delay_ms(100);
             output_high(pin_B4);
                Delay_ms(100);
             output_low(pin_B4);
                Delay_ms(100);
             output_high(pin_B5);
                Delay_ms(100);
             output_low(pin_B5);
                Delay_ms(100);
             output_high(pin_B6);
                Delay_ms(100);
             output_low(pin_B6);
                Delay_ms(100);
             output_high(pin_B7);
                Delay_ms(100);
             output_low(pin_B7);
                Delay_ms(100);
             output_high(pin_B6);
                Delay_ms(100);
             output_low(pin_B6);
                Delay_ms(100);
             output_high(pin_B5);
                Delay_ms(100);
             output_low(pin_B5);
                Delay_ms(100);
             output_high(pin_B4);
                Delay_ms(100);
             output_low(pin_B4);
                Delay_ms(100);
             output_high(pin_B3);
                Delay_ms(100);
             output_low(pin_B3);
                Delay_ms(100);
             output_high(pin_B2);
                Delay_ms(100);
             output_low(pin_B2);
                Delay_ms(100);
             output_high(pin_B1);
                Delay_ms(100);
             output_low(pin_B1);
                Delay_ms(100);
             output_high(pin_B0);
                Delay_ms(100);
             output_low(pin_B0);
             output_b(0x00);
             }   
         if(input(PIN_A5)==0)
            {
                 #asm
               goto 0;
             #endasm      
            }
         if(Dato==49)   
            {      
             output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
             output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
                 output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
                 output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
                 output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
                 output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
                 output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
                 output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);
                 output_b(0x99);
             Delay_ms(500);
             output_b(0x66);
             Delay_ms(500);               
            }   
         if (Dato==50)
            {
                 output_high(PIN_B7);
                 output_high(PIN_B6);
             Delay_ms(300);
             output_low(PIN_B7);
             output_low(PIN_B6);
              Delay_ms(300);      
                 output_high(PIN_B5);
                 output_high(PIN_B4);
             Delay_ms(300);   
                 output_low(PIN_B5);
             output_low(PIN_B4);
             Delay_ms(300);   
               output_high(PIN_B3);
                 output_high(PIN_B2);
             Delay_ms(300);
                 output_low(PIN_B3);
             output_low(PIN_B2);
             Delay_ms(300);
              output_high(PIN_B1);
                 output_high(PIN_B0);
             Delay_ms(300);
             output_low(PIN_B1);
             output_low(PIN_B0);
             Delay_ms(300);
                 output_high(PIN_B7);
                 output_high(PIN_B6);
             Delay_ms(300);
             output_low(PIN_B7);
             output_low(PIN_B6);
              Delay_ms(300);      
                 output_high(PIN_B5);
                 output_high(PIN_B4);
             Delay_ms(300);   
                 output_low(PIN_B5);
             output_low(PIN_B4);
             Delay_ms(300);   
               output_high(PIN_B3);
                 output_high(PIN_B2);
             Delay_ms(300);
                 output_low(PIN_B3);
             output_low(PIN_B2);
             Delay_ms(300);
              output_high(PIN_B1);
                 output_high(PIN _B0);
             Delay_ms(300);
             output_low(PIN_B1);
             output_low(PIN_B0);
             Delay_ms(300);
                 output_high(PIN_B7);
                 output_high(PIN_B6);
             Delay_ms(300);
             output_low(PIN_B7);
             output_low(PIN_B6);
              Delay_ms(300);      
                 output_high(PIN_B5);
                 output_high(PIN_B4);
             Delay_ms(300);   
                 output_low(PIN_B5);
             output_low(PIN_B4);
             Delay_ms(300);   
               output_high(PIN_B3);
                 output_high(PIN_B2);
             Delay_ms(300);
                 output_low(PIN_B3);
             output_low(PIN_B2);
             Delay_ms(300);
              output_high(PIN_B1);
                 output_high(PIN _B0);
             Delay_ms(300);
             output_low(PIN_B1);
             output_low(PIN_B0);
             Delay_ms(300);
             output_b(0x00);      
            }
         if (Dato==51)   
            {      
            output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
             output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
                output_b(0xff);
             Delay_ms(500);   
            output_b(0x00);   
            Delay_ms(500);
            }   
          
         }   
      
      }


Un poco de ayuda------> necesito cambiar la instruccion goto por otra que haga lo mismo.
de antemano gracias

« Última modificación: 27 de Julio de 2007, 22:53:41 por todopic »
si la vida te da la espalda rompele el culo y si te da la cara chupale la teta...