Usando el ADC del gatillo como word se me reduce el tiempo de ejecucion, durante un proceso de 13 ciclos (pongo un bucle dentro de la rutina loop: para realizar trece ciclos), se reduce en 600 us.
¿Es que funciona mejor usando los 10 bits ?
Por desgracia no tengo el suficiente tiempo como para analizar de forma completa todos los programas de una forma minuciosa. Pero si te puedo decir lo siguiente:
Cuanto mayor es el numero de BIT de la conversión más pequeños son los pasos, por lo tanto se obtienen movimientos o ajustes mas finos. Que el programa funcione seria maravilloso, pero no puedes seguir trabajando en un programa mientras que las bases contengan errores. Mira lo siguiente:
ADCIN es una función que genera un valor de 10bit, ósea 2 Byte que en este lenguaje equivale a una variable tipo Word.
Por lo tanto no se puede asignar a ADCIN una variable de distinto tipo en este caso una variable de 8bit, ósea 1byte que en este lenguaje se define como Byte.
Si sigues asignado el valor que retorna ADCIN a una variable de 1byte, estas perdiendo los 2 BIT mas significativos de la conversión del ADC, por lo tanto ADCIN el valor máximo que puede suministrar es de 1023, ósea 10bit, solo tienes que hacer unos pequeños cálculos y veras que si suprimes los 2 primeros BIT de esos 10bit veras que estas perdiendo y truncando la mayor parte de los valores de la conversión ADC.
Una vez que tienes la conversión en una variable adecuada tienes que ver en la tabla del manual la resolución del pwm para ver cual es la que esta utilizando. Si la resolución es también de 10bit no hay problema los tipos de datos coinciden tan solo tendrás que modificar tu programa para que trabaje correctamente con los nuevos valores. Y si la resolución no es la adecuada según la tabla tendrás que cambiar de tipo el valor obtenido del adc hasta que coincida con la resolución del pmw.
Cambio de tipo a 8 BIT:
Por lo tanto necesitas hacer un calculo intermedio para pasar de 10bit, que es una mayor resolución, a 8 BIT que es menor. El calculo es muy simple y seria el siguiente:
Dim mcn_1 as word
Dim mcn as byte
Dim variable_aux as long ‘Variable auxiliar par a realizar cálculos largos
Adcin 0, mcn_1
Variable_aux = (255*mcn_1) /1023
Mcn = variable_aux
El problema de este calculo es que necesita variables de tipo Long ya que durante la operación salen valores intermedios superiores a 16bit.
Puedes simplificar la formula de la siguiente forma:
Dim mcn_1 as word
Dim mcn as byte
Adcin 0, mcn_1
Mcn_1 =(10*mcn_1)/1023
Mcn = mcn_1
El problema en este caso esta en que nunca lograras el valor máximo de la escala que a 8 BIT es de 255, llegara a un valor máximo de 249.5 aproximadamente.
Y otra solución es la de perder los
2 BIT menos significativos de los 10bit de la conversión ADC:
Dim mcn_1 as word
Dim mcn as byte
Adcin 0, mcn_1
Mcn_1 = shiftright(mcn_1,2) ‘Desplaza los BIT de una variable 2 lugares a la derecha y estos se pierden al estar en el extremo.
Mcn= mcn_1