Autor Tema: Filtro para AD y funcion servoout en Pic Simulator IDE  (Leído 1818 veces)

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

Desconectado EA7LN

  • PIC10
  • *
  • Mensajes: 36
Filtro para AD y funcion servoout en Pic Simulator IDE
« en: 10 de Julio de 2011, 20:08:00 »
Hola a tod@s, estoy con un proyecto que si bien me funciona tiene un par de problemas que se pueden mejorar pero no se la forma de hacerlo.
Se trata de un programa para mover un servo a dos posiciones predeterminadas que grabo en la eeprom variando en valor del ad con un potenciometro.
Luego dando un pulso en una entrada del pic, muevo el servo a una posicion A o B.
El problema es que cuando entro en el bucle de lectura del AD para memorizar las posiciones A y B, el servo se mueve mucho como si el valor del AD no fuera estable. Pieso en hacer una filtro pot soft pero no se como hacerlo de una manera efectiva.
Por otro lado, cuando quiero que el servo se mueva de A a B, se mueve a la maxima velocidad del servo y no se como relantizar la funcion servoout para que el servo haga el movimiento mas despacio.
Os dejo el codigo por si alguien puede ayudarme. Estoy seguro que se puede mejorar el programa incluso reducirlo, si lo creeis mejorable me gustaria leer vuestras impresiones para aprender como hacerlo.
Saludos

'26/06/2011
'Mediante un pulso en GP1 al alimentarlo entramos en programacion. Con un POT conectado a GP2 seleccionamos la posicion del servo para valor max y min
'Poniendo a nivel alto o bajo GP3 seleccionamos la posicion del servo. Pensado para el starter de los motores de gasolina, no hace falta canal del RX

Define CONF_WORD = 0x30c4
AllDigital
Dim ref As Byte  'medida derl AD
Dim memo_a As Byte  'valor a memorizado
Dim memo_b As Byte  'valor b memorizado
Dim counter As Word
Dim a As Bit
'Config GPIO.0 = Output  'led testigo
Config GPIO.1 = Input  'pulsador de memoria pin 6
Config GPIO.2 = Input  'entrada A/D
Config GPIO.3 = Input  'Entrada sensor
Config GPIO.4 = Output  'salida WFM
Config GPIO.5 = Output  'salida led

ANSEL = 00000100  'CONFIGURA LAS ENTRADAS Y SALIDAS ANALOGICAS LO HE TENIDO QUE PONER PARA EL AD SI NO, NO FUNCIONABA

Define ADC_CLOCK = 3
Define ADC_SAMPLEUS = 50
Read 1, memo_a
Read 2, memo_b
GP5 = 0
counter = 0
If GP1 = 1 Then
   GP5 = 1
   WaitMs 2000
   GP5 = 0
   WaitMs 1000
   Gosub memoria
Else
Endif


loop:



Select Case a
Case 1  'esta encendido
'counter = 0
loop1:
   If GP3 = 0 Then
   GP5 = 1
   WaitMs 1000   
   a = 0
   Else
Endif
Case 0 
loop2:
   If GP3 = 0 Then
   GP5 = 0
   WaitMs 1000
   a = 1      
Endif
EndSelect

If a = 1 Then ServoOut GP4, memo_a
If a = 0 Then ServoOut GP4, memo_b

Goto loop
End                                               


memoria:
GP5 = 1
Adcin 2, ref
ServoOut GP4, ref
If GP1 = 1 Then
   memo_a = ref
   Write 1, memo_a
   GP5 = 0
   WaitMs 2000
   Goto loop3
Else
Goto memoria
Endif

loop3:
GP5 = 1
Adcin 2, ref
ServoOut GP4, ref
If GP1 = 1 Then
   memo_b = ref
   Write 2, memo_b
   GP5 = 0
   WaitMs 2000
   Return
Endif
Goto loop3
Cada dia aprendo algo nuevo. ¡Cuanto me queda por aprender!

Desconectado fco1306

  • PIC16
  • ***
  • Mensajes: 128
Re: Filtro para AD y funcion servoout en Pic Simulator IDE
« Respuesta #1 en: 26 de Julio de 2011, 08:01:24 »
En su día los componentes del foro me ayudaron con un programita para mover servos.Pienso que te será de ayuda


http://www.todopic.com.ar/foros/index.php?topic=32371.0


Un saludo