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

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

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comparando puertos y enviando a rs232
« Respuesta #15 en: 22 de Mayo de 2009, 11:55:34 »
Ok.

La impresion ok.

Con respecto a lo de la entrada analogica, es por que no es asi la configuracion, segun el archivo 16F88.h, se debe colocar:

Código: [Seleccionar]
setup_adc_ports(sAN0);
Siempre es bueno revisar el .h del micro correspondiente.
El papel lo aguanta todo

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #16 en: 22 de Mayo de 2009, 12:00:07 »
Me ganaste MLO__

ya tengo el codigo del Adc ya funciona ahora el detalle es el mas fundamental como puedo hacer que me de una escala de 0 a 100

aqui dejo el codigo de los dos pics ya que esta modificado en algunas lineas

Pic 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

float p;

#int_RDA
RDA_isr()
{
 p=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,"  adc=%1.2f",p);
   }
}

Codigo de envio

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() {

   int valor;
  
while(true){
   for (valor=10;valor<=100;) {
      PUTC(valor);
         valor=valor+10;
          delay_ms(500);
         }
    }
}*/
void main() {
   int16 q;
   float p;

  
   setup_port_a( ALL_ANALOG );              //Canal 0 analógico
   setup_adc(ADC_CLOCK_INTERNAL);    //Fuente de reloj RC

   for (;;) {
      set_adc_channel(0);           //Habilitación canal0
      delay_us(20);
      q = read_adc();                  //Lectura canal0
      p = 5.0 * q / 1024.0;           //Conversión a tensión

      PUTC(q);
      delay_ms(100);
      }
}
y aqui otra imagen de la simulacion

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: comparando puertos y enviando a rs232
« Respuesta #17 en: 22 de Mayo de 2009, 12:59:17 »
Para la escala de 0 a 100% deberás usar una regla de 3.

5V -> 255 binario
0V -> 0 binario

Relaciona el 255 con el 100% y el 0 con el 0%. Implementa una variable flotante para lograrlo.

Edito: Veo que usas 10bits de ADC, solo cambia el 255 por 1023.
« Última modificación: 22 de Mayo de 2009, 13:04:15 por migsantiago »

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #18 en: 23 de Mayo de 2009, 16:59:51 »
ya realice la convercion pero en la terminal virtual solo me imprime a lo maximo solamente 5 datos diferente

#include <16f88.h>
#device adc=10
#include <math.h>                //Necesaria para los cálculos matemáticos
#FUSES NOWDT
#fuses NOMCLR,INTRC_IO
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=pin_b5, rcv=pin_b2)

void main() {
   float medicion;                 //Variables de ecuación
   int16 valor;
   
   setup_port_a( ALL_ANALOG );
   setup_adc( ADC_CLOCK_INTERNAL );
   set_adc_channel( 0 );
   delay_us(10);
   do {
      valor = Read_ADC();
      medicion = valor * 1024.0 / 100 ;
      putc(medicion);
   } while (TRUE);
}

puse un potenciometro de 1M aqui dejo adjunta la simulacion


Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: comparando puertos y enviando a rs232
« Respuesta #19 en: 23 de Mayo de 2009, 17:08:12 »
La conversión la haces mal. Debes hacer casting de float o expresar el 100 como flotante en esta línea, si no, el resultado se calcula como int16.

Código: [Seleccionar]
medicion = valor * 1024.0 / 100.0 ;

Desconectado darck_khronos

  • PIC18
  • ****
  • Mensajes: 493
Re: comparando puertos y enviando a rs232
« Respuesta #20 en: 24 de Mayo de 2009, 21:14:49 »
La conversión la haces mal. Debes hacer casting de float o expresar el 100 como flotante en esta línea, si no, el resultado se calcula como int16.

Código: [Seleccionar]
medicion = valor * 1024.0 / 100.0 ;

no se si soy yo el pic o la programacion ya intente eso y mas cosas con mas operaciones y me sigue dando solo 6 resultados nadamas no hace mas variaciones

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: comparando puertos y enviando a rs232
« Respuesta #21 en: 24 de Mayo de 2009, 21:32:14 »
En el link lo hago con ADC a 8 bits .... y no da problema ...

7 Segmentos con Timer0
El papel lo aguanta todo

Desconectado migsantiago

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8257
    • Sitio de MigSantiago
Re: comparando puertos y enviando a rs232
« Respuesta #22 en: 25 de Mayo de 2009, 12:31:47 »
no se si soy yo el pic o la programacion ya intente eso y mas cosas con mas operaciones y me sigue dando solo 6 resultados nadamas no hace mas variaciones

¿Cuáles son los 6 resultados que te da?

Es que nos diste mal el cálculo de la regla de 3. Ponlo así:

Código: [Seleccionar]
medicion = valor * 100.0 / 1024.0 ;


 

anything