Autor Tema: secuenciador tiempo variable adc  (Leído 2161 veces)

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

Desconectado masterpic

  • PIC10
  • *
  • Mensajes: 29
secuenciador tiempo variable adc
« en: 26 de Marzo de 2018, 12:24:53 »
Buenas... esta bien este ejemplo 6.4 niple porque los registros tengo que arrancar de mayor a menor para que empiece de RD0, es para el demo board del pickit 3 que se me borro niple no trae el 18F45k20 pero con el 18F45K22 funciona igual.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:secuenciador tiempo variable adc
« Respuesta #1 en: 26 de Marzo de 2018, 16:45:40 »
Opino que tienes varios errores en el desarrollo del programa.
El primero radica en que nunca reseteas el adc y por tanto cuando pases de 50 siempre tendrás el mismo tiempo. En algún punto deberías de poner que adc=0 cuando creas que has llegado al final de la cuenta que quieras realizar.
Además los tiempos de adc2_mS son muy cortos y a la velocidad que va el procesador esto puede ir muy rápido.
Otra cosa que veo es que la secuencia la repites 2 veces. Si quieres que se repita, para tener mejor legibilidad del programa yo pondría en una subrutina la parte de la repetición.
Pero lo más importante que veo es que estás utilizando el valor que obtienes del conversor analógico como como contador. ¿Esto es correcto? Porque si lo que quisieras detectar el estado de algún interruptor o pulsador sería más conveniente el uso de un registro.
Te adjunto el programa modificado con subrutina.
 
« Última modificación: 26 de Marzo de 2018, 16:47:50 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:secuenciador tiempo variable adc
« Respuesta #2 en: 26 de Marzo de 2018, 17:10:41 »
A parte de lo indicado anteriormente veo otro problema. Este si e más gordo y es que si el ADC no cambia de valor siempre vas a tener el mismo valor.
Imagínate que el valor leído del ADc es 3 (nunca sera mayor de 5), luego lo incrementas una unidad por lo que pasa a valer 4. Con esto nunca vas a conseguir que pase de valer mas de 10 y ningún  bit de RD va a valer 1 ya que vuelves a la etiqueta de inicio.
Como se vuelve a leer el adc y este tenia 3 al incrementar uno volverás a tener 4 y así indefinidamente.
Si sumas 1 al valor del adc como maximo siempre tendrás 6 y estaras repitiendo el ciclo simepre.
 
Asi que tendras que rehacer la logica de lo que pretendes realizar. Qquizas guardando el valr del adc en un registro auxiliar, incrementar este y en la proxima lectura del adc, sumar su valor al del registro. Bueno esto es un ejemplo. No se lo que pretendes realizar.
Todos los días se aprende algo nuevo.


 

anything