Autor Tema: sacar valor de un whail(true)  (Leído 1267 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
sacar valor de un whail(true)
« en: 23 de Abril de 2009, 15:59:23 »
bueno tengo el siguiete problema intento con un pic mostrar un valor de voltaje en una LCD y en el pc por el puerto RS232,
pero en la simulacion de proteus cuando pongo el virtual terminal el valor medido se repite indefinidamente hacia abajo y no se por que es, bueno tengo una sospecha que el printf que le mando al pc al esta dentro de una rutina ciclica. bueno si me pueden ayudar porfavor se los agradeseria. el codigo es el siguiente para que vena mi error XD.

#include <16f873a.h>            //pic a utilizar
#device adc=10      // Conversión con 10 bits
#fuses HS,NOWDT,NOPROTECT,PUT,NOLVP,NOBROWNOUT      //ordenes para el programador
#use delay (clock=4000000)         //clock=4Mhz
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)   //manejo del RS232
#define use_portb_lcd TRUE         //definir portb lcd
#include<lcd.c>                  //libreria manejo lcd

int16 Valor;       // para 10 bits
float const resolucion= 5.0/1024.0;      // Conversión con 10 bits
float voltios;
signed char x=16,a,b;         //indice filas
///DECLARACION DE FUNCIONES

void main()
{
  lcd_init();         //inicializa, o activa lcd
   lcd_gotoxy( 1, 1);
   printf(lcd_putc,"***Voltimetro***");   //muestra mensaje inicio
   lcd_gotoxy( 1, 2);
   printf(lcd_putc,"Taller de Diseno");   //muestra mensaje inicio

   do{                     //espera hasta que se pulse boton...
   }while(input(PIN_A1)==1);
   printf(lcd_putc,"\f");      //...para borrar pantalla e iniciar contador


   // Configuramos entradas analogicas:
  setup_adc_ports(AN0);
  setup_adc(ADC_CLOCK_INTERNAL);
  // Tomamos las medidas
  set_adc_channel(0);
  enable_interrupts(GLOBAL);               //activadas interrupciones

 while (TRUE){
  Valor=read_adc();//almacena el valor de medicion
  voltios= valor * resolucion; //convierte de resolucion de 10bit a numeros
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"%1.2f voltios", voltios );
  printf(lcd_putc,"\b");//retrasa el cursor una posicion

 
 
  delay_ms(185);
 lcd_gotoxy(x,2) ;      //cursor para escribir mensaje
 printf(lcd_putc,"A.Avila-R.Fuentes ");
 delay_ms(185);//tiempo de rotacion del mensajevoltios
 if(x==-16){
 x=16;
      }
  x--;
  voltios=a;
if(a==voltios){
printf("\r\n\%1.2f voltios \r\n", voltios);
}a++;
}}

Desconectado micro_cadaver

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2102
    • blog microembebidos
Re: sacar valor de un whail(true)
« Respuesta #1 en: 23 de Abril de 2009, 16:28:52 »
imagino que tu condicion para iniciar el muestreo y todo lo demas es esta parte

do{                     //espera hasta que se pulse boton...
   }while(input(PIN_A1)==1);
   printf(lcd_putc,"\f");      //...para borrar pantalla e iniciar contador


sinembargo de lo que lei tu codigo, nunca volverá a esa parte pues abajo hay un bucle while(1) del cual no saldra.

while (TRUE){
  Valor=read_adc();//almacena el valor de medicion
  voltios= valor * resolucion; //convierte de resolucion de 10bit a numeros
  lcd_gotoxy( 1, 1);
  printf(lcd_putc,"%1.2f voltios", voltios );
  printf(lcd_putc,"\b");//retrasa el cursor una posicion

 
 
  delay_ms(185);
 lcd_gotoxy(x,2) ;      //cursor para escribir mensaje
 printf(lcd_putc,"A.Avila-R.Fuentes ");
 delay_ms(185);//tiempo de rotacion del mensajevoltios
 if(x==-16){
 x=16;
      }
  x--;
  voltios=a;
if(a==voltios){
printf("\r\n\%1.2f voltios \r\n", voltios);
}a++;
}

porque tiene un while esta parte?
a cosechar!!!... :P
pic32... ahi voy....
aguante el micro 16f84  !!!!

visita mi pagina: http://www.microembebidos.wordpress.com

Desconectado japifer_22

  • PIC18
  • ****
  • Mensajes: 405
Re: sacar valor de un whail(true)
« Respuesta #2 en: 23 de Abril de 2009, 16:32:03 »
por que quiero que este todo el rato sensando la entrada analoga y me de los valores la probe sin el while (1) y el printf no me da valores que queda pegado en el primer ciclo por eso XD