TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: HARLEYTRONICS en 22 de Mayo de 2009, 16:19:01
-
hola ,tengo el problema de que usando dos canales de cad ,cada vez que hace una conversion no lo hace linealmente
osea lo hace desparejo ,si uso uno solo va bien pero cuando quiero usar dos ya empiezan los problemas
estoy usando un enano 12f675 y probe con distintos potes lineales
alguien me puede explicar que es lo que esta pasando ,si es normal ?
como solucionar esto?
hasta hora lo unico que hice ,que funciona es poner unos preset a cada extremo de los potes para regular esa nolinealidad
pero quiero saber si puedo evitar esto ..a quien me ayude le voy a estar muy agradecido..saludos
-
¿Cuánto tiempo das entre cambios de canal ADC? Debes dar como 25us de espera para que se cargue el sample&hold.
-
hola migsantiago,gracias por responderme,, ni bien termino una conversion cargo el resultado en un registro
y empiezo la otra conversion osea que no le stoy dando el tiempo que decis ,,el tiempo se lo doy con un retardo de 25 micros ?
o por otro medio?? gracias ,,saludos
-
Sí, entre cambios de canal ponle un retardo de 25us con timers o con ciclos anidados, como más te convenga.
Debes esperar a qué el canal actual cargue el sample&hold. No lo midas de inmediato.
-
migsantiago puse retardos en distintos puntos de las conversiones y entre si pero el problema sigue ,, aca pongo como estoy usando el cad a ver si hay error en el programa ,,
a medida que voy subiendo el pote lo hace pero depronto vuelve a bajo y sube ,,asi como 4 veces es como si dividiera el potenciometro ,la verdad me esta volviendo loco,,saludos
conv1 clrwdt
bsf STATUS,RP0 ;Pasamos al banco 1
MOVLW B'00001001' ;CONFIGURE an0 como entradas analogica y frecuencia de trabajo 8 foc
MOVWF ANSEL
bcf STATUS,RP0 ;Pasamos al banco 0
movlw b'00000001' ;selccion an0 chanel,habilito cady justif izqui.
movwf ADCON0
clrf GPIO
bcf PIR1,ADIF ;Reseteamos el flag de la interr. del CAD
bsf ADCON0,GO ;Ordenamos el comienzo de la conversión
ESPERAR btfsc ADCON0,1 ;Comprobamos si la conversión ha terminado mirando
;el estado del bit GO/DONE#
goto ESPERAR
MOVF ADRESH,w
movwf 0x2b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
conv2 clrwdt
bsf STATUS,RP0 ;Pasamos al banco 1
MOVLW B'00001010' ;CONFIGURE an1 como entradas analogica y frecuencia de trabajo 8 foc
MOVWF ANSEL
bcf STATUS,RP0 ;Pasamos al banco 0
movlw b'00000101' ;selccion an0 chanel,habilito cady justif izqui.
movwf ADCON0
clrf GPIO
bcf PIR1,ADIF ;Reseteamos el flag de la interr. del CAD
bsf ADCON0,GO ;Ordenamos el comienzo de la conversión
ESPERAR1 btfsc ADCON0,1 ;Comprobamos si la conversión ha terminado mirando
;el estado del bit GO/DONE#
goto ESPERAR1
MOVF ADRESH,w
movwf 0x2c
-
¿Insertaste los retrasos de 25us después de elegir el canal? No aparecen en tu programa. También es recomendable que pongas el reloj del ADC con el divisor de 32.
conv1 clrwdt
bsf STATUS,RP0 ;Pasamos al banco 1
MOVLW B'00001001' ;CONFIGURE an0 como entradas analogica y frecuencia de trabajo 8 foc
MOVWF ANSEL
bcf STATUS,RP0 ;Pasamos al banco 0
movlw b'00000001' ;selccion an0 chanel,habilito cady justif izqui.
movwf ADCON0
;AQUI DEBE IR UN DELAY DE AL MENOS 25us
clrf GPIO
bcf PIR1,ADIF ;Reseteamos el flag de la interr. del CAD
bsf ADCON0,GO ;Ordenamos el comienzo de la conversión
ESPERAR btfsc ADCON0,1 ;Comprobamos si la conversión ha terminado mirando
;el estado del bit GO/DONE#
goto ESPERAR
MOVF ADRESH,w
movwf 0x2b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
conv2 clrwdt
bsf STATUS,RP0 ;Pasamos al banco 1
MOVLW B'00001010' ;CONFIGURE an1 como entradas analogica y frecuencia de trabajo 8 foc
MOVWF ANSEL
bcf STATUS,RP0 ;Pasamos al banco 0
movlw b'00000101' ;selccion an0 chanel,habilito cady justif izqui.
movwf ADCON0
;AQUI DEBE IR UN DELAY DE AL MENOS 25us
clrf GPIO
bcf PIR1,ADIF ;Reseteamos el flag de la interr. del CAD
bsf ADCON0,GO ;Ordenamos el comienzo de la conversión
ESPERAR1 btfsc ADCON0,1 ;Comprobamos si la conversión ha terminado mirando
;el estado del bit GO/DONE#
goto ESPERAR1
MOVF ADRESH,w
movwf 0x2c
-
migsantiago le puse el retardo con nop y cambie el foc a 32 y sigue igual es como si tendria que ponerle topes los potenciometros ,para que no empiezen de cero a cada rato ,,no se si se entiende lo que explico es muy raro ,,,,
muchisimas gracias igual ,,saludos
conv1a clrwdt
bsf STATUS,RP0 ;Pasamos al banco 1
MOVLW B'00010001' ;CONFIGURE an0 como entradas analogica y frecuencia de trabajo 32 foc
MOVWF ANSEL
bcf STATUS,RP0 ;Pasamos al banco 0
clrf ADRESH
movlw b'00000001' ;selccion an0 chanel,habilito cady justif izqui.
movwf ADCON0
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
clrf GPIO
bcf PIR1,ADIF ;Reseteamos el flag de la interr. del CAD
bsf ADCON0,GO ;Ordenamos el comienzo de la conversión
ESPERA btfsc ADCON0,1 ;Comprobamos si la conversión ha terminado mirando
;el estado del bit GO/DONE#
goto ESPERA
MOVF ADRESH,w
movwf 0x2b
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
conv2a clrwdt
bsf STATUS,RP0 ;Pasamos al banco 1
MOVLW B'00010010' ;CONFIGURE an1 como entradas analogica y frecuencia de trabajo 32foc
MOVWF ANSEL
bcf STATUS,RP0 ;Pasamos al banco 0
clrf ADRESH
movlw b'00000101' ;selccion an0 chanel,habilito cady justif izqui.
movwf ADCON0
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
clrf GPIO
bcf PIR1,ADIF ;Reseteamos el flag de la interr. del CAD
bsf ADCON0,GO ;Ordenamos el comienzo de la conversión
ESPER btfsc ADCON0,1 ;Comprobamos si la conversión ha terminado mirando
;el estado del bit GO/DONE#
goto ESPER
MOVF ADRESH,w
movwf 0x2c
-
¿Cómo conectas los potenciómetros a la fuente de alimentación y al analógico? Un diagrama sería muy útil.
-
aca dejo un dibujito de como los conecte ;saludos
-
Ah pues ahí hay un problemón, NUNCA debes poner voltaje negativo a un canal ADC de pic, lo puedes dañar.
Conecta una terminal del pot a +5V y la otra a GND.
Lee bien la hoja de características de tu PIC12 en la sección de Electrical Characteristics.
-
aha por ahi viene la mano? algun truco para solucionarlo ??ya que no estoy usando una fuente partida tengo el + y el -
creo que el pic no esta arruinado pero si esta sufriendo alteraciones ,,,te agradezco muchisimo ,,saludos
-
Fácil, coloca el potenciometro entre +5 Vcc y GND. :mrgreen:
-
no estoy usando una fuente +v 0v -v
tengo el + y -
-
no estoy usando una fuente +v 0v -v
tengo el + y -
Cuesta trabajo entender lo que escribes.
Usa el +5V y el 0V para los potenciómetros, olvídate del -V.
-
migsantiago ,,la fuente es un trafo con puente de diodos rectificadores y un condensador ,,tengo un negativo y un positivo
luego pasan por el regulador voltaje de 5 v pero siguen quedando el negativo y el positivo,,de donde saco los 0v ???
se entiende lo que digo??? otra pregunta por que si uso un canal solo anda bien ?? disculpame tantas molestias ,,saludos
-
El 0V es el GND del regulador de 5V.
-
entonces lo tengo conectado bien ,, ya no se que hacer,,, si uso un solo canal anda bien si uso dos parece sube ybaja
no quiero umaginar si uso los cuatro,,gracias por tu tiempo ,,,saludos
-
Está bien raro tu problema. Hasta ahora lo que debes hacer es:
- Implementar los retrasos de 25us o más después de cambiar un canal.
- Usar reloj 32.
- Conectar los potenciómetros a +5V y 0V.
Uno más, usa potenciómetros de 4.7kohm o menos, mientras soporten la potencia a 5V. Se me ocurre que el problema es por ruido pero es una probabilidad baja si los potenciómetros reciben CD.
-
ahora le puse tad 16 porque el 675 no trabaja a 32 con 4mhz ,, la fuente no tiene rizado ,le agregue mas tiempo al s-h
y nada sigue igual ,cambie el pic por uno nuevo ,,,llegue a poner un pote de 100 ohms y nada
lo extraño es que si uso un solo canal lo hace perfecto ,,hace el barrido del pote impecable ,,le pongo dos y es un sube y baja
solo puedo usar una minima porcion del pote si no empieza de cero,,,a esta altura lo quiero prender fuego al pic
gracias ,,saludos
-
No se me ocurre nada nuevo, por favor sube un diagrama completo de todas las conexiones (pic, pot, fuentes, filtros, etc.).
-
sabes que el osciloador interno lo estoy usando a 4mhz pero esta trabajando casi un 30 porciento mas ,,crees que pueda ser por
esto ,,ahora mismo le voy a bajar la corriente de entrada al regulador de voltaje y te cuento si logro trabar bien ,,o un poco mejor,,gracias saludos
-
Pues quién sabe, detalles como esos solo los ves tú en tu protoboard. Es muy difícil imaginar el problema desde un teclado y computadora a cientos de km de distancia.
Prueba poniendo un cristal externo y configurando el fusible para xt o hs según corresponda.
-
Hola.
Como sabes que esta trabajando a un 30% mas el oscilador?
-
estoy haciendo algo parecido a pwm donde se pueden regular la frecuencia y el duty
y por los numeros cargados en los retardos nunca puede darme las frecuencias que me estan saliendo
saque cuenta de todas combinaciones y no da ,,eso quiere decir que el mic.esta mas rapido,
por ejemplo la frecuencia mas alta que podria llegar es 1666 hz y esta llegando a 2200 hz eso es por que los retardos
me estan durando menos de lo que estan programados y por ende entran mas pulsos en la frecuencia..saludos
-
:?
No creo que sea el oscilador, en el datasheet dice que es 4MHz +- 1% ... 30% es mucho ya ... no estaras configurando mal el timer2? podria ser por ahi la falla no?
-
no estoy usando el timer ,,, estoy cargando los retardos con las conversiones del cad ,,,pero agarre un programa viejo de una sola conversion y lo adapte a dos canales ,,y hasta ahora el barrido lo esta haciendo linealmente bien ,,por ahora son frecuencias distintas a las que necesito ,de a poco lo voy a ir acomodando,,
lo unico que encontre distinto al programa nuevo, es que en el viejo desconecte las pull up desde el registro opccion y en el nuevo desde wpu
y por ahi creo que viene la mano ,,va espero que sea eso
voy a seguir acomodandolo y te cuento como fue ,,gracias ,saludos
-
Bueno despues de una semana renegando con el pequeño 675 llegue a la conclusion de que es un maniatico con defectos de fabricacion,, el primero y notorio es el oscilador interno almenos usandolo 4 mhz tiene mas del 1%+- error en mi caso
ya no tengo ganas de testear de cuanto es el error ,lo que si SE es que es mucho mas ...
Por otro lado solucione el problema del cad ,el tema es que usando mas de un canal ,,los potenciometros interactuan entre si
y hay que volverse un poco loko para calibrarlos ,,usando resitencias limitadoras en los extremos de los potes,,pero eso no es todo sino que ya en el segundo pote ,osea segundo canal ya el voltaje de referencia es distinto al primer canal almenos
usando el vdd como referencia por que ??? no lo se ,, al final termine usando fosc 8 por que era lo mismo q en 16
tambien termine sacando los retardos del sample hold por que tampoco le hacia efecto mas que retrasar el programa,,
quizas lo exigi demasiado ,ya que el programa usa distintos tipos de frecuencias ,,y distintos programas dentro del programa
va lo digo ,por que arme un programa sencillo de doble canal y no tuve problemas ,,
otra cosa rara que vi es que por ejemplo el ansel le da lo mismo si lo configuras desde el banco 1 o el 2..
bueno tengan en cuenta esto que les digo para no renegar si desean usar variois cad del 675
tampoco les digo que no los usen ya que son muy potentes y economicos
GRACIAS por los consejos y su tiempo para ayudarme,,,,Saludos