Autor Tema: comparando puertos y enviando a rs232  (Leído 7184 veces)

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

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
comparando puertos y enviando a rs232
« en: 17 de Mayo de 2009, 23:36:57 »
Tengo un problema, intento enviar datos por el puerto rs232 pero como podria hacer las comparaciones de los puertos y que estos mandaran datos al pic que tiene la lcd

este es mi diagrama



no doy como podria hacer la siguiente comparacion

Rb0 = 1  Envia Esta en 0 %
Rb0 = Rb1 = 1 Envia Esta en 10%
Rb0 = Rb1 = Rb2 = 1 Envia Esta en 20%
Rb0 = Rb1 = Rb2 = Rb3 = 1 Envia Esta en 30%
Asi hasta llegar a
rb0=rb1=rb2=rb3=rb4=rb5=rb6=rb7=ra0=ra1=ra2= Esta en 100%

Como podria generar ese codigo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: comparando puertos y enviando a rs232
« Respuesta #1 en: 18 de Mayo de 2009, 12:54:01 »
Pues es un selector de casos lo que necesitas:

Código: [Seleccionar]
switch(input_b())
{
 case 0b00000001:
  printf(); //llénalo con lo que necesitas
  break;
 case 0b00000011:
  printf
  break;

...

 case 0b11111111:
 printf()
 break;
}

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #2 en: 21 de Mayo de 2009, 14:00:33 »
aun aplicando el caso de arriba no comprendo por que me sale solo esto en la pantalla

cual puede ser el error



este es el codigo de mi pic de envio

Código: [Seleccionar]
#include <18f2550.h>
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,BROWNOUT
#use delay(clock=4000000)
#use fast_io(b)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

void main(){
   do {
   switch(input_b())
      {
         case 0b00000001:
         printf("\r\n\10 lleno\r\n");
         break;
         case 0b00000011:
         printf("\r\n\20 lleno\r\n");
         break;
         case 0b00000111:
         printf("\r\n\30 lleno\r\n");
         break;
         case 0b00001111:
         printf("\r\n\40 lleno\r\n");
         break;
         case 0b00011111:
         printf("\r\n\50 lleno\r\n");
         break;
         case 0b00111111:
         printf("\r\n\60 lleno\r\n");;
         break;

      }
   
   } while (TRUE);



Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: comparando puertos y enviando a rs232
« Respuesta #3 en: 21 de Mayo de 2009, 14:28:59 »
Al usar #fast_io es tu responsabilidad configurar el tris del puerto b.

Al hacer input_b() puede que esté sacando datos de forma errónea y la lcd los malinterprete. Además, ni siquiera incluyes lcd.c en tu programa, de ahí que se complica más la cosa.

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comparando puertos y enviando a rs232
« Respuesta #4 en: 21 de Mayo de 2009, 16:37:39 »
Hola.

Porque no posteas el codigo del micro que presenta el problema???? El programa del micro emisor no te va a afectar la LCD  :D
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: comparando puertos y enviando a rs232
« Respuesta #5 en: 21 de Mayo de 2009, 17:22:24 »
Sí es cierto no me fijé en que el programa no era el de la lcd  :D

Khronos, publica bien tus programas  :D

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #6 en: 21 de Mayo de 2009, 18:56:58 »
Ok ya tengo un avanze xD ya cambie el codigo aqui los pongo

Programa Para Leer Datos y Visualizar en la LCD

Código: [Seleccionar]
#include <18f2550.h>
#FUSES XT,NOWDT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8)
#include <LCD.C>
#BYTE TRISA=0X85
#BYTE PORTA=0X05

int valor;

#int_RDA
RDA_isr()
{
 valor=GETC();
}

void main() {

  bit_clear(TRISA,0);
  lcd_init();
   enable_interrupts(INT_RDA);
   enable_interrupts(GLOBAL);

for (;;) {
     lcd_gotoxy(1,1);
     printf(lcd_putc,"Lenado De Tanque");
     lcd_gotoxy(1,2);
     printf(lcd_putc,"  %D Porciento",valor);
   }
}

Aqui esta el que me manda la informacion

Código: [Seleccionar]
#include <16f88.h>
#FUSES NOWDT
#fuses NOMCLR,INTRC_IO
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_b5, rcv=pin_b2)
void main() {

   int valor;
   
while(true){
   for (valor=10;valor<=100;) {
      PUTC(valor);
         valor=valor+10;
          delay_ms(500);
         }
    }
}



mi pregunta es la siguiente:

Como podria evitar que al terminar el conteo de 100 me agrege una o de mas como se ve en la figura

y en la parte donde esta el pic 16f88 como podria mandar una lectura por el ADC para que me mandara la lectura de 0 a 100 con un potenciometro de 100k

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comparando puertos y enviando a rs232
« Respuesta #7 en: 21 de Mayo de 2009, 22:28:40 »
Hola.

La primera pregunta no te la entendi  :-)

La segunda: debes conectar el potenciometro a uno de los pines del ADC del 16f88 y configurar el ADC con la funcion setup_adc();, luego para obtener el valor de conversion usas read_adc(); y ese valor lo envias por el serial.

Saludos
El papel lo aguanta todo

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #8 en: 21 de Mayo de 2009, 23:18:53 »
Hola.

La primera pregunta no te la entendi  :-)

La segunda: debes conectar el potenciometro a uno de los pines del ADC del 16f88 y configurar el ADC con la funcion setup_adc();, luego para obtener el valor de conversion usas read_adc(); y ese valor lo envias por el serial.

Saludos

es que en la imagen me imprime


Llenado de tanque
 100 porciento
y despues del 100 me dice
Llenado de tanque
 10 porcientoo

y ok estare hacien pruebas por que es la pimera vez que usare el Adc

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: comparando puertos y enviando a rs232
« Respuesta #9 en: 21 de Mayo de 2009, 23:25:35 »
Limpiar LCD con \f ...  :mrgreen:

Código: [Seleccionar]
printf(lcd_putc, "\fLlenado de tanque\n%u \%",valor);

Desconectado Suky

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: comparando puertos y enviando a rs232
« Respuesta #10 en: 21 de Mayo de 2009, 23:26:05 »
Es que debes borrar el display, sino esta sobre escribiendo lo anterior.

Uyy! Me gano migsantiago  :mrgreen:
No contesto mensajes privados, las consultas en el foro

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comparando puertos y enviando a rs232
« Respuesta #11 en: 22 de Mayo de 2009, 00:09:29 »
Ah!!!! en la segunda imagen si se ve la 'o' de mas ..... limpia la lcd como dice mig o puedes colocar espacios despues asi:

Código: [Seleccionar]
printf(lcd_putc, "\fLlenado de tanque\n%u porciento      ",valor);
De esta manera te evitas el parpadeo del limpiado del LCD
El papel lo aguanta todo

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #12 en: 22 de Mayo de 2009, 11:05:06 »
Ya me encuentro en la parte del ADC mas que al compilar el siguiente codigo me marca este error

Código: [Seleccionar]
#include <16f88.h>
#device adc=10
#FUSES NOWDT
#fuses NOMCLR,INTRC_IO
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_b5, rcv=pin_b2)

void main() {
   int16 q;
   float p;

   setup_adc_ports(AN0);             
   setup_adc(ADC_CLOCK_INTERNAL);

   for (;;) {
      set_adc_channel(0);           
      delay_us(20);
      q = read_adc();                 
      p = 5.0 * q / 1024.0;         

      PUTC( "\fADC = %4ld", q);
      delay_ms(100);
      }
}

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comparando puertos y enviando a rs232
« Respuesta #13 en: 22 de Mayo de 2009, 11:24:25 »
hola.

Debes usar el printf para sacar las variables .... y debes tener en cuenta el formato, q es %lu
El papel lo aguanta todo

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #14 en: 22 de Mayo de 2009, 11:41:44 »
hola.

Debes usar el printf para sacar las variables .... y debes tener en cuenta el formato, q es %lu

Por la parte de la inprecion no hay problema pero por que no me detecta el pin ra0 como Adc por que me muestra que es indefinido
?