Autor Tema: Problema con array para control PID  (Leído 2454 veces)

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

Desconectado Axel PAUL

  • PIC10
  • *
  • Mensajes: 4
Problema con array para control PID
« en: 05 de Noviembre de 2013, 00:36:38 »
Hola que tal a todos tengo una duda sobre un programa que he estado haciendo en sí el problema no está en el algoritmo PID si no en un array que declaro para leer el valor de los ocho sensores que estoy usando por medio del puerto B, no sé si lo que estoy haciendo está bien o mal la verdad no he trabajado mucho con arrays en CCS realmente no marca ningún error pero no hace lo que debería. Por ahora no hace el algoritmo Pid, lo que trataba de hacer es a un determinado valor del puerto B encontrado en el array declarado por medio de la función switch y su condición de igualdad asiganar un valor en la variable llamada v que luego podría manejar fácilmente en el algoritmo, pero ahora solo probaba si realmente se asignaba el valor a v, pero tal parece que no, y pienso que es desde los arrays, en las igualdades de los switch
Saludos y espero que alguien me pueda ayudar

#include <16f877a.h>                   //archivo para control del pic 16f876a
#fuses HS,NOWDT,NOPROTECT,NOLVP        //protecciones

#use delay(clock=12000000)             
#byte trisb=0x86
#byte portb=0x06


int16 sensor[]= {PIN_B0,PIN_B1,PIN_B2,PIN_B3,PIN_B4,PIN_B5,PIN_B6,PIN_B7};   // declaro el vector de ocho valores con los bits del puerto B

signed int v, anterior;
float integral=0, derivative, previous_error = 0, output, Kp = 0.8  , Ki = 0.5, Kd = 0.9, dt = 0.1, error;

void main()
{
set_tris_b(0b11111111);
set_tris_c(0b00000000);

while(true)
{

switch(sensor[1]==0b00000011)     //igualdades para que se de un valor a v   //es correcto hacer esto? el array sensor[1] está bien no debería poner 8 en vez de 1? //pero //me dice fuera de rango
   {
   case 0: v=3;                       <-------------------------------------------------- se supone se debería dar el valor a v
           break;
   }
   switch(sensor[1]==0b00000110) //los valores con los que se iguala son las posibles combinaciones de los sensores al ir siguiendo la línea ya que dos sensores siempre leen
   {
   case 1: v=2;
           break;
   }
   switch(sensor[1]==0b00001100)
   {
   case 2: v=1;
           break;
   }
   switch(sensor[1]==0b00011000)
   {
   case 3: v=0;
           break;
   }
   switch(sensor[1]==0b00110000)
   {
   case 4: v=-1;
           break;
   }
   switch(sensor[1]==0b01100000)
   {
   case 5: v=-2;
           break;
   }
   switch(sensor[1]==0b11000000)
   {
   case 6: v=-3;
           break;
   }
   switch(sensor[1]==0b00000000)
   {
   case 7: v=anterior;
           break;
   }
   
   if(v==3){
   output_high(pin_c0); // solo para saber si las asignaciones a v estaban funcionando
   }
}
}

Desconectado jeremylf

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1341
Re: Problema con array para control PID
« Respuesta #1 en: 05 de Noviembre de 2013, 04:49:20 »
Estas usando mal el switch. Manual de C.

Desconectado Axel PAUL

  • PIC10
  • *
  • Mensajes: 4
Re: Problema con array para control PID
« Respuesta #2 en: 05 de Noviembre de 2013, 12:54:17 »
Puse la configuración de esta manera porque anteriormente ya la había usado en otro programa, pero la diferencia es que no hacía igualdades dentro de cada switch sino dependiendo de un valor dado ejecutaba la instrucción de cada switch y funcionaba pero creo que al estar haciendo la igualación es el problema como mencionas,  entonces con el array no hay ningún problema en ningún lugar? También me podrían explicar por favor al hacer una operación lógica con un array por ejemplo tomando los datos de mi programa como en mi programa que valor debo poner por ejemplo en if(sensor[1]==0b00000011)  el uno quiere decir que se comparará toda la fila o qué número debería ir si al declarar mi array vienen los ocho bits del puerto b o cómo se relaciona esto, disculpen es que no tengo mucha experiencia trabajando con arrays en ccs. De antemano gracias

Desconectado fabianjsm

  • PIC18
  • ****
  • Mensajes: 255
    • fabianjsm is on twitter
Re: Problema con array para control PID
« Respuesta #3 en: 05 de Noviembre de 2013, 17:47:35 »
Muy mal el switch!
@fabianjsm is on twitter

Desconectado Axel PAUL

  • PIC10
  • *
  • Mensajes: 4
Re: Problema con array para control PID
« Respuesta #4 en: 05 de Noviembre de 2013, 22:11:12 »
Gracias ya entendí que esta mal el switch, pero alguno sería tan amable de contestarme las otras preguntas? Ya hice mención de mi inexperiencia

Desconectado Axel PAUL

  • PIC10
  • *
  • Mensajes: 4
Re: Problema con array para control PID
« Respuesta #5 en: 07 de Noviembre de 2013, 01:04:43 »
Ya me funcionó de todos modos gracias  :)