Autor Tema: Necesito saber en que compila esto  (Leído 1727 veces)

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

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Necesito saber en que compila esto
« en: 27 de Mayo de 2012, 19:23:04 »
EN que puede estar compilado esto? Necesito modificar algo que no trabaja bien y no se que compilador usaron para hacerlo
Ademas al final agrego una cuestion mas de unas lineas que no entiendo.....a ver quien me puede ayudar por favor.....


#include "modbus.h"
#include <pic1687x.h>

// direccion del chip direccion de esclavo por si hay varios
#define SlaveAddress 1

#define __config_ ( 0x3fff & WDTDIS & LVPDIS & HS )

int isrEnd,readEnd;
short MPG;      // antes int.
//short analog1;      // las 3 VARIABLES analog NO USADAS DE MOMENTO
//short analog2;      // antes int
//short analog3;      // antes int
char LastEnc;
 
bank1 unsigned char buffer[74];
unsigned char reles_out;   // image outputs
bit stop = 0;

//************************************************************************
// SERVICIOS DE INTERRUPCION
//
//
//
// GESTION DEL MPG POR INTERRUCION SE USA INT0
// LA INTERRUPCION DETECTA EL SENTIDO DE GIRO Y MANTIENE UN CONTADOR
//************************************************************************
void interrupt Isr(void) 
{
 if (SSPIF)   
    {
     SSPIF = 0;   
     isrEnd = 1;
    }
 if (INTF) // interrupcion mpg2 pines rb0(a) y rb1(b) la resolucion es X1
     {
      (RB1) ? MPG++: MPG--; // esto es un if un poco raro jejeje
      INTF=0; // fin de la int para MPG a X1
     }
}








Tampoco entiendo este If, alguien puede aclararme que hace?



 if (INTF) // interrupcion mpg2 pines rb0(a) y rb1(b) la resolucion es X1
     {
      (RB1) ? MPG++: MPG--; // esto es un if un poco raro jejeje
      INTF=0; // fin de la int para MPG a X1
     }

Desconectado RALF2

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 2060
Re: Necesito saber en que compila esto
« Respuesta #1 en: 27 de Mayo de 2012, 19:43:43 »
Hola algec
POorque no lo adaptas al compilador que usas?  :mrgreen:
No se ve dificil el codigo para hacerlo.
Por ejemplo si usas el CCS podrias definir #bit sspif =  0x0C.3;
Y asi sucesivamente con las demas variables  :mrgreen:

Esta linea: (RB1) ? MPG++: MPG--;  es un simple if por ejemplo Si RB1 es diferente de cero incremento MPG++, sino lo decremento.
Como ves no es tan dificil  :D
« Última modificación: 27 de Mayo de 2012, 19:51:45 por RALF2 »

Desconectado MerLiNz

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2463
Re: Necesito saber en que compila esto
« Respuesta #2 en: 27 de Mayo de 2012, 19:58:58 »
esta hecho en mikroC

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Necesito saber en que compila esto
« Respuesta #3 en: 28 de Mayo de 2012, 04:18:48 »
perfecto, aun no se si hare una cosa u otra, lo que ocurre es que la rutina de interrupcion funciona mal porque lo que se pretende en esa es leer un encoder y eso no lo lee, siempre incrementa y solo decrementa a veces, no tiene ni chequeop de error ni nada. Lo demas funciona perfectamente.
Tratare de escribir en ccs la rutina que necesitaria y a ver.
Gracias

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Necesito saber en que compila esto
« Respuesta #4 en: 29 de Mayo de 2012, 14:26:12 »
 A ver, me consegui MikroC para pic Pro version 5.6.1 y me da errores de ficheros de cabecera, ya que no estan ni modbus.h ni pic1687x.h
¿Seguro que esto esta en mikroC?
No me compila el fichero tal y como esta sin hacer modificaciones y ese funciona bien ya que esta en mi modbus trabajando, aunque va mal  en el tema del MPG de esa rutina que os digo.
El problema es que parece que Siliconio, cuando programo esto , considero que si el pin RB1 esta a 1 el encoder gira hacia un lado y si esta a cero es hacia el otro, y eso es erroneo, ya que el encoder MPG es como todos los demas encoders (he mirado en los manuales de MPGS) y genera codigo Gray, por lo que hay que hacer conversion a binario y testear el bit de chequeo de giro y de error, algo como esto que os pego y que funciona de lujo en CCS


// con esto se pasa a binario el valor de una variable Int que solo tiene  los dos bits leidos del encoder en codigo Gray

byte pasa_a_binario(byte valor)    // valor esta aqui en Gray leido de los dos pines de entrada
    {
   if(bit_test(valor,1)==1)        // si el bit 1 de valor es 1
      {
      if(bit_test(valor,0)==0)     // invierte el bit 0 de valor
         bit_set(valor,0);         // hace 1 el bit 0 de valor
      else
         bit_clear(valor,0);      // hace cero el bit 0 de valor
      }
   return valor;  // devuelve el valor ya en binario
   }

// para calcular bits de sentido y error comparo el ultimo valor que guarde memorizado del encoder con el nuevo leido
// y hago el testeo de los bits de error y sentido de giro y hago la rutina correspondiente sumando o restando

if(actual_Z != anterior_Z)  // si han variado las entradas....tened en cuenta que uso varios encoders en la misma interrupcion y puede haberse generado   esta por pulsos de otro encoder.
            {

      // calcula la diferencia para ver los bits de signo y de error

         diferencia_Z = actual_Z - anterior_Z;
         
         // chequeo los bits de error y signo
         
         if(bit_test(diferencia_Z,0) == 0)   // si se ha producido un error se habra puesto a cero el bit 0
            {
            output_high(PIN_A2);            // enciende el led de error
           error_Z = 1;
            } 
         else
            {   
            if(bit_test(diferencia_Z,1) == 1) // chequea el bit de sentido de giro que sera 1 girando a derecha
               contador_Z=contador_Z+1;                // si es hacia un lado incrementa el contador
            else
               contador_Z= contador_Z-1;           // hacia el otro lo decrementa
            }
           // memoriza en anterior_Z el estado actual
            anterior_Z  = actual_Z;



Esto funciona seguro y a mucha velocidad. Lo tengo mas que probado en varios montajes en hardware funcionando
Lo que tengo claro es que hacer el testeo de sentido de giro con elvalor que tiene uno de los bits del encoder no funcionara y necesito modificar esa rutina para que trabaje bien.
El problema sigue siendo que no puedo recompilar y tendria que rearmar todo para CCS con lo que ello conlleva, por lo que es mas simple modificar lo poco que hay que tocar, ya que el resto funciona bien y no necesito tocarlo.
Si el "fenomeno" de Siliconio estuviese operativo podria echarme una mano.
A ver quien sabe porque mi MikroC no tiene esos ficheros de cabecera o si es que esta compilado en otra cosa y por eso no va.

Una ayudita por favor. Ahora tengo tiempo y quiero poner eso en servicio y arreglarlo para publicar el Siliconio Modbus....como se merece, porque es un gran diseño

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Necesito saber en que compila esto
« Respuesta #5 en: 30 de Mayo de 2012, 06:58:44 »
Ya he conseguido el de cabecera Modbus.h ahora me falta el .h del pic.
¿Como es posible que no este en mi compilador?
¿Alguien puede pasarme el pic1687x.h para Mikroc?

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Necesito saber en que compila esto
« Respuesta #6 en: 01 de Junio de 2012, 08:28:05 »
Revisando el MikroC me da que usa ficheros de cabecera que son p16..... y no pic1....
Es asi?
Porque piensas que esta compilado en Mikroc?
Subo el fichero completo y mira a ver si a ti te compila por favor.
Subo el de cabecera que tengo tambien a ver porque no me compila a mi.

Desconectado Algec

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 974
Re: Necesito saber en que compila esto
« Respuesta #7 en: 01 de Junio de 2012, 10:50:32 »
HE hecho un diseño de una placa pequeña con una modificacion de la lectura del encoder para que se adapte a lo que parece que ha programado siliconio como lectura del encoder.
Podeis echar un vistazo a ambas cosas antes de que haga la placa ya que no consigo resolver el problema de software?
Con lo facil que es pasar estas lineas de programa a lo de siliconio, recompilar y listo......en fin si no puedo hacer otra cosa tendre que trabajar con el hardware


 

anything