Autor Tema: Duda con array  (Leído 1380 veces)

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

Desconectado loverman24

  • PIC12
  • **
  • Mensajes: 66
Duda con array
« en: 21 de Octubre de 2005, 10:49:00 »
Pongo aqui mi duda q me ha surgido al trabajar con Visual Basic, el post donde se explica todo es http://miarroba.com/foros/ver.php?foroid=64652&temaid=4259270

pero concretando mi problema:

El amigo Colores2 me paso un algoritmo para evitar en la medida de lo posible el problema de fluctuaciones q tenia en la toma de valores desde el adc del pic, el algoritmo:

Leer valor ADC y guardarlo en ADCvalor
Si ADCvalor <> ADCvalorAnterior y ADCvalor <> ADCvalorAnterior + 1 entonces
***Enviar ADCvalor
***ADCvalorAnterior = ADCvalor

bien, la condicion creo q la pongo bien en mi programa, os pego aqui el codigo, en negrita la condicion:

//Programa que realiza una conversion de un potenciometro

#include <16f877A.h>
#device adc=10
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#use delay (clock= 4000000)
#use rs232(BAUD=19200, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7)


void main() {

float const resoluc= 5.00/1024.00; //Resoluci�n del convertidor (4.90 es la tension de alimentacion
//q se usa como referencia
float corriente= (2*5.00)/11400.00; //Cuidado aqui para medir la resistencia REAL, esto conlleva fallos

float tension, tensionm, tensiont; //Valor tension sacada

float valor[]; //Numero de pasos de la medida

float v_ohmico, v_ohmicom, v_ohmicot; //Valor ohmico del potenciometro

int m, j, k;

char canal, modo;


setup_adc_ports (ALL_ANALOG); //Todas las entradas del covertidor son analogicas

setup_adc (ADC_CLOCK_INTERNAL); //Selecciono reloj interno del pic


for (;Gi�o {

j= 0;

k= 0;

for (k= 0; k<2; k++) {

switch (k) {

case 0: modo= "a"; break;

case 1: modo= "b"; break;
}

for (j= 0; j<4; j++) {

valor[0]= 0;

tensionm= 0;

tensiont= 0;

v_ohmicom= 0;

v_ohmicot= 0;

set_adc_channel (j);

switch (j) {

case 0: canal= "A"; break;

case 1: canal= "B"; break;

case 2: canal= "C"; break;

case 3: canal= "D"; break;

}


for (m= 1; m<101; m++) { //Bucle que va obteniendo 100 valores de tension

delay_us(20); //Retardo para que de tiempo de cargarse el condensador del adc

valor[m]= read_adc(); //Obtiene el valor del adc

if ((valor[m]!=valor[m-1])&&(valor[m]!=valor[m-1]+1))

tension= valor[m]*resoluc;
//Calcula la tension

v_ohmico= (2*tension)/corriente; //Calculo valor ohmico de los potenciometros

v_ohmicot= (v_ohmicot+v_ohmico); //Va sumando los valores ohmicos de los 100 datos

tensiont= (tensiont+tension);

}


v_ohmicom= v_ohmicot/100; //Media del valor ohmico

tensionm= tensiont/100;

if (modo="a")

printf ("%c%c%1.2f
",modo, canal, tensionm);

if (modo= "b")

printf ("%c%c%1.2f
", modo, canal, v_ohmicom);

delay_ms(20); //Retraso de 20ms y vuelta a empezar

}

}

}

}


pues bien, el problema esta en q al simularlo con proteus y el hyperterminal, no me aparece nada por pantalla, pero sin embargo, tal como esta pero quitando el "if" y el array (dejando la variable valor como una normal), me envia perfectamente. Tal como lo veo, creo q el problema tiene q estar en el array, q o lo declaro mal o algo asi, pq el algoritmo creo q esta bien implementado en c.

Bueno, espero vuestra ayuda a ver si alguien q sepa mas c q yo sabe pq me pasa esto.

Gracias

Un saludo

Desconectado vszener

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 2395
RE: Duda con array
« Respuesta #1 en: 24 de Octubre de 2005, 04:55:00 »
Visto asi por encima creo que debes declarar la dimension del vector                 float valor[101];
para que asi no de problemas.Giño
· Nos vemos en los bares!!!!!
· Mi Blog: Aqueronte

Desconectado loverman24

  • PIC12
  • **
  • Mensajes: 66
RE: Duda con array
« Respuesta #2 en: 24 de Octubre de 2005, 09:22:00 »
Hola, he hecho lo q me has dicho, pero al compilar me da un mensaje de error "Subscript Out of Range".

La verdad es q no se q puedo hacer para q deje de fluctuar el valor, pq aun con el condesandor y con la media de 100 valores me sigue variando. A ver si alguien le paso lo mismo y me echa una cable.

Gracias

Un saludo


 

anything