TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: Nocturno en 20 de Diciembre de 2007, 09:18:03

Título: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 20 de Diciembre de 2007, 09:18:03
Nuestros PIC disponen de una gama enorme de periféricos entre los cuales casi satisfacen todas las necesidades, pero sin embargo y sorprendentemente no tienen una salida analógica de gran resolución. Sólo disponen de una salida de tensión variable de 4 bits de resolución que suele como Vref para el comparador, aunque es insuficiente para la mayoría de aplicaciones.

Pues bien, he probado una técnica muy simple aprendida durante el montaje de la fuente de Valdorre, que consiste en inyectar una señal PWM a un conjunto formado por resistencia + condensador y nos encontraremos la señal analógica en la unión de ambos.

Os dejo aquí un ejemplo de uso, con señal de 2KHz inyectada sobre resistencia de 47K y condensador de 10uF, con su simulación en Proteus y código fuente en CCS.

El programa es muy simple: he puesto un par de botones para aumentar o disminuir el Duty Cicle y un LCD que nos muestra los parámetros que corren en el sistema.

Si no habéis probado nunca esta técnica, os recomiendo que lo probéis; es muy ilustrativo.

(http://img204.imageshack.us/img204/32/salidaanalogicazy5.jpg)
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 20 de Diciembre de 2007, 10:14:52
Y como hacias el dimmerizado en tu dimmer por control remoto ??? :lol: :lol:
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: jfmateos2 en 20 de Diciembre de 2007, 11:05:27
Aunque no tiene nada que ver, me corroe la duda: ¿no está al revés el condensador de 10u? El lado rayado es el que va a tierra ¿no?
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: elmasvital en 20 de Diciembre de 2007, 11:14:32
Es logico que no traigan salidas analogicas... meter condensadores y resitencias dentro del pic salen caros... para eso está la combinación pwm y como bien pones condensador y resistencia.

1 saludo
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Azicuetano en 20 de Diciembre de 2007, 11:16:27
Jejee... si es que un buen filtro vale para casi todo :mrgreen:


Un saludo desde Alicante.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: sander en 20 de Diciembre de 2007, 11:38:20
Bueno , eso de que ningun PIC tiene una salida analogica no es tan cierto, el PIC16F877A tiene el Pin RA2 conectado un generador interno de voltaje que es usado para el comparador ,  entonces el pin RA2 puede usarse como una salida analoga , algo limitada a las ecuaciones del generador de voltaje, pero señal analoga al fin. EL PIC16F627A tambien tiene esta caracteristica y por lo visto el PIC18F2520 tambien la tiene.

Claro que el metodo PWM es general para cualquier PIC
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 20 de Diciembre de 2007, 12:09:13
Sí, tienes razón, juanfe, pero Proteus es tan malo que ni siquiera se había dado cuenta. Acabo de darle la vuelta y sigue funcionando perfectamente.

Marcos, el "dimmerizado" lo hago recortando el tiempo de la alterna, no generando una señal analógica.

Elmasvital, no puedo discutir contigo de algo que no tengo ni idea, pero creía que la entrada del convertidor ADC se basa precísamente en eso; en el tiempo de carga y descarga de un condensador interno.

Sander, tienes toda la razón, y te agradezco la aclaración. Los PIC tienen un generador de voltaje de 4 bits de resolución que suele utilizarse como Vref del módulo comparador. Habrá muchas situaciones en las que esta característica sea suficiente. Editaré mi mensaje original para no dar lugar a confusiones.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: maunix en 20 de Diciembre de 2007, 15:35:08
Elmasvital, no puedo discutir contigo de algo que no tengo ni idea, pero creía que la entrada del convertidor ADC se basa precísamente en eso; en el tiempo de carga y descarga de un condensador interno.

Si, la captura se hace con un capacitor de "muestreo" pero es de un pequeño valor.

Lo de tener o no tener salidas analógicas es más que nada por un tema de costos y escasa aplicación más que por que no se pueda embeber.  Texas tiene una línea de microcontroladores con DACs internos de 12 bits y no son tan caros. 

Lo que ocupa mucho lugar en el silicio son las resistencias, no tanto los capacitores.

El método del PWM para generar una onda contínua es perfectamente válido para la aplicación que se está comentando ya que no se necesita extremada precisión ni saltos abruptos de tensión de un momento a otro cosa que sí puede hacer un dac.  :mrgreen:

Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: sander en 20 de Diciembre de 2007, 18:47:29
Bueno aprovechando este topic , he decidido hacer mi primer aporte real a TODOPIC,  he hecho un ejemplo para usar el generador de referencia interna del PIC como DAC.

El ejemplo es muy simple, utilizo el PIC16F627A, la salida del DAC es RA2 y conecto dos pulsadores,   un pulsador a RB6  para incrementar el voltaje en RA2 y otro en RB7 para decrementar, RB6 y RB7 tienen sus PULL UPS habilitadas.

Segun la hoja de datos el modulo de referencia de voltaje puede trabajar en un rango alto y en un rango bajo, para variar el voltaje  se utilizan los 4 primeros bits del registro VRCON segun las siguientes ecuaciones:

Para el rango bajo:

Vref = (Vr<3:0>)*Vdd/24

Para el rango alto:

Vref =(0,25*Vdd) + (Vr<3:0>)*Vdd/32

Viendo la ecuacion para el rango alto vemos que el voltaje minimo que saca es 0,25*Vdd  Si Vdd = 5 , el voltaje minimo del rango alto es 1,25 V.  y valor maximo seria 3,59 V

1,25 V en el rango bajo equivalen a un Vr<3:0> = 6 , a partir de aqui los pasos que se dan en el rango bajo son mayores que los que se dan con el rango alto , por ejemplo:

Si  Vr<3:0> = 7 , en el rango bajo tenemos Vref = 1,458 , para esta misma condicion tenemos que:

     Vr<3:0> = 1, en el rango alto Vref =  1,406

Si  Vr<3:0> = 8 , en el rango bajo tenemos Vref = 1,666 , para esta misma condicion tenemos que:

     Vr<3:0> = 2, en el rango alto Vref =  1,562

El programa hace esta distincion, es decir que , al incrementar comenzamos en el rango bajo y cuando Vr<3:0> llega a 6 cambiamos al rango alto, esto nos permite tener pasos mas pequeños a partir de 1,25 V si Vdd = 5.

Como conlusion decir que no hay que fiarse del todo del proteus, bueno aunque ya lo sabia ultimamente no me fallaba, en la version que estoy usando del proteus la 7.2 toma el Vdd como si valiera 0,05 V y valor que sale por RA2 esta en el rango de los mV, yo lo corregi haciendo que Vdd=500 y esto hace que el valor por RA2 sea el correcto.

Bueno creo que eso es todo.

Saludos
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 21 de Diciembre de 2007, 06:29:07
Interesante aplicación, Sander. Es una pena realmente que no hayan dotado a ese periférico de mayor resolución. Total, ya que está metido, ¿porqué lo dejan a medias?.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: sander en 21 de Diciembre de 2007, 12:08:21
Creo que Maunix puso algunos de los motivos por los cuales lo dejaron a medias , me parece que el principal podria ser el de escasa aplicacion,  la verdad no se me ocurren muchas aplicaciones donde sean necesarias un DAC con buena resolucion y ademas mas rapido de lo que se pueda realizar con PWM.

Bueno no se si entra aqui , pero tambien se puede sacrificar unos cuantos pines del PIC para unirlos con una red de resistencias y obtener un DAC de mayor resolucion que con el modulo VREF y mas rapido que con el PWM.

Talvez tambien seria bueno poner un ejemplo de esto ultimo , no creen?

Saludos
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: maunix en 21 de Diciembre de 2007, 13:18:55
Creo que Maunix puso algunos de los motivos por los cuales lo dejaron a medias , me parece que el principal podria ser el de escasa aplicacion,  la verdad no se me ocurren muchas aplicaciones donde sean necesarias un DAC con buena resolucion y ademas mas rapido de lo que se pueda realizar con PWM.
Hacer un dac bueno no es un tema trivial de allí que tal vez no lo hayan incorporado.  Aplicaciones para un dac hay muchas pero tal vez no tantas como para justificar hacer un desarrollo de precisión con un componente interno de un microcontrolador.  Tal vez ocupa mucha área en el silicon (lo cual redunda en u$s) que prefieren usar para dotar al pic de más puertos o memoria, o lo que sea.


Bueno no se si entra aqui , pero tambien se puede sacrificar unos cuantos pines del PIC para unirlos con una red de resistencias y obtener un DAC de mayor resolucion que con el modulo VREF y mas rapido que con el PWM.

Talvez tambien seria bueno poner un ejemplo de esto ultimo , no creen?

He usado dacs R2R (que son los que creo estás queriendo mencionar).  El punto a tener en cuenta principalemnte es que las resistencias sean realmente R y de 2R.  También que no sean de baja impedancia ya que se le sacaría corriente al pic en forma innecesaria.  Por último un buen operacional con buen rango de salida completo, se llaman Rail to Rail.  No tengo ningún esquemático acá pero son un diseño bastante conocido y no estaría mal comentarlo.

El punto débil es el gran uso de pines aunque con un shift register externo uno puede terminar usando pocos pines :)
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: roboticsBCN en 23 de Diciembre de 2007, 03:45:11
Efectivamente el motivo de que la gran mayoría de uC no incorporen un DAC es la cantidad de silicio que ocupan en el propio chip y porque necesitan de una alimentación MUY precisa para poder operar. Precisamente la alimentación interna de un uC para nada disfruta de estas características.

Si os fijáis, hay algunos uC con AD, pero la gran mayoría son de baja resolución (10 bit). Incrementar la resolución significa mejorar la relación se señal ruido y eso sale muy caro.

Buena faena Nocturno, si me permites un comentario: el problema que veo en el esquema, es que con estos componentes, la señal analógica de salida es MUY lenta. Propongo incrementar la freq. del PWM a cambio de reducir el valor de los componentes (especialmente el condensador).

Salu2!
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 23 de Diciembre de 2007, 04:32:56
Sí, es de reacción lenta. Para la aplicación que necesito no es preciso mayor velocidad (regular la tensión de salida de una fuente de alimentación) pero me gustaría conocer la relación entre frecuencia del PWM, valor de la resistencia, valor del condensador y velocidad de respuesta.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Menta en 23 de Diciembre de 2007, 09:59:28
Bueno, el valor óptimo no sé cual es, habría que calcularlo con la ecuación exponencial de carga y descarga de un RC, pero con 47K y 10uF la constante de tiempo es de 470 ms que es mucho más grande que el valor óptimo, el resultado es poco riple, pero respuesta lerdísima. Ese es el problema del filtro RC, si queremos poco riple es en detrimento de la velocidad...
Hice unos cálculos con mi calculadora  :mrgreen:

Carga = (5-V) * (1 - e(-t/RC))

Descarga = V * e(-t/RC)

Frecuencia = 2Khz ==> T = 0,5 ms

Duty 50% ==> ton = 0,25 ms toff = 0,25 ms

1) RC = 0.3 ms tenemos un riple de 0.85V es decir una salida oscilante entre 1.62 y 3.35
    (demora unos 2ms en establecerse partiendo de 0V)

2) RC = 3ms tenemos un riple de 0.09V es decir salida oscilante entre 2.4 y 2.59
    (demora unos 15ms en establecerse partiendo de 0V)

Haciendo una estimación con esos valores supongo que una constante RC=10ms dará por resultado una oscilación de 30 mV y un tiempo de establecimiento de 50ms.

Para ello fijo C en 1uF y R = 10ms/1uF = 10k
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: reiniertl en 24 de Diciembre de 2007, 14:07:25
Precisamente por las ecuaciones iba a preguntar, porque son el elemento más importante a tener en cuenta en este tipo de aplicaciones. Hay muchas formas de tener salidas analógicas en los microcontroladores, una por supuesto es esta de utilizar un PWM, pero hay muchas otras.

Utilizar redes R 2R, que son muy rápidos, pero también los más costosos desde el punto de vista de l consumo de silicio (por eso suelen venir implementados en su propio encapsulado)
Utilizar PLL, este método da muy buenos resultados, sobre todo por el bajo riple que suele obtenrse y por su respuesta de frecuencia, el uC tendría que estimular al PLL con un tren de pulsos de 50% de ciclo útil y frecuencia variable. E básicamente un convertido F/V.
Utilizar convertidores F/V como el LM331, una maravilla ese bicho, lo he utilizado recientemente en una tarea de maestría (simulado con PROTEUS) pero alguien tuvo la oportunidad de probarlo. Muy bueno el diseño.

De todos estos conversores el más rápido es el R 2R, el resto son lentos y si quieres aumentar la respuesta de frecuencia hay que utilizar filtros activos porque son un poco lentos, de los tres basados en "integración de pulsos" (PWM, o conversores F/V) el más eficaz es el PLL porque ya incluye un filtro pasabajos activo de primer orden, claro que todas las notas de aplicación dicen que debe utilizarse un filtro de segundo orden u orden superior.

El uso de los PLL implica que muchas veces el diseñador tiene que calcular el filtro y para algunos las expresiones del PLL + Filtro suelen ser bastante engorrosas.

Saludos
Reinier

PD: Muy buen trabajo Nocturno, siempre andas dando sopresas por aquí, a lo mejor algún amigo se embulla y nos regala un hermoso desarrollo de este tipo de conversores bien explicado con ecuaciones y todo lo que hace falta para hacer conversores DA con PIC.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MichaelKnight en 15 de Agosto de 2008, 21:05:27
buscando una solucion al problema que me ocupa he encontrado este hilo que es mas que interesante. Paso a comentar cual es mi intencion. Utilizando un 12F683 quiero implementar una funcion que devuelva una señal analogica transformando una que previamente el introducimos. Por ejemplo, en la entrada analogica entran 2v y en la salida, tras aplicarle la funcion de transformacion de la señal, necesito obtener 2,3V. Despues de leer los comentarios referentes a las mejores o peores soluciones para una salida analogica utilizando un pic, no se si el esquema que propone nocturno seria de utilidad para lo que quiero o no. Espero vuestras respuestas.

saludos.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 16 de Agosto de 2008, 00:51:12
La clave es saber qué frecuencia tiene la señal a reproducir y que resolución necesitas.
En función de eso se podrá determinar si la fidelidad de este método será suficiente o no.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MichaelKnight en 16 de Agosto de 2008, 08:26:59
creo que este metodo lo voy a descartar porque creo que conseguire mejores resultados con un DAC, el problema es que entonces tendre que cambiar de PIC porque entiendo que necesito mandarle al DAC tantas entradas como bits tenga mi DAC. Si uso uno de 8 bits, necesitare 8 pines libres y menos de 8 bits creo que es demasiada poca resolucion.

saludos.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 16 de Agosto de 2008, 08:48:22
Hay muchos que son por SPI o I2C
http://focus.ti.com/paramsearch/docs/parametricsearch.tsp?family=analog&familyId=582&uiTemplateId=NODE_STRY_PGE_T
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MichaelKnight en 16 de Agosto de 2008, 09:38:00
el problema es que en las tiendas de aqui de Almeria no se que facilidad tendre para localizar un modelo de DAC a la carta, seguramente tendran los mas comunmente utilizados y tendre que como siempre adaptar a lo que ellos me ofrecen. ya contare cual ha sido la solucion adoptada.

saludos.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: RALF2 en 16 de Agosto de 2008, 11:41:12
Que tal amigos!
Aqui (http://www.ebn2.gaw.ru/pdf/TI/app/msp430/slaa116.pdf) les coloco una informacion que les puede ser util

El pic utiliza internamente un adc de aproximaciones sucesivas que es mas rapido y mas preciso que el metodo de carga y descarga de un condensador  :mrgreen:  utilizados por algunos adc

Saludos
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 14 de Mayo de 2009, 06:37:53
Estoy esperimentando con el Circuito del Sr nocturno Alias Sr Sonanbulos   :D :D
y le doy la gracias a el por darme esta ideas , !!! Gracias maestros  :-/ :-/, pues bien tengo unas cuantas dudas, en ese circuito veo que  VPP no esta conectados, aunque todavia no lo he montado y probado (estoy ahora mismo en eso), debe ir esa pata al aire???,
se agradece ayudas, voy a resar a ver si viene el Genio por aqui 
Saludo
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: ASTROCAR en 14 de Mayo de 2009, 08:57:55
Hola buenos dias el Vpp actua solo en modo de programacion y en modo de ejecucion del programa que tiene cargado el pic  esa pin hace la funcion de reset del micro asi que por lo que veo el compañero que posteo ese esqu7ematicio solo lo tiene de esa manera al aire de manera de ejemplo ademas recuerda que esta es simulando en proteus en la realidad deverias colocar tu circuiteria para que en un momento dado puedas darle reset al micro via hardware y externamente es decir con un pulsador si asi lo deseas.

 
Saludos y estamos en contacto.
Atten.
Alexander Santana.
Barcelona-Venezuela.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 14 de Mayo de 2009, 13:11:23
El pin MCLR lo puedes conectar a Vdd mediante una resistencia o dejarlo al aire, pero según sea lo que elijas, así tendrás que configurar el fuse MCLREN.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 14 de Mayo de 2009, 15:19:14
Gracia Sr Manuel!!
La cuestion es que no tengo ese pic y me lo compilaron con el 18F2450 y aun no me va, aunque creo son´pin compartible y no se porque no me va. os es que debe cambiar los Fuses para el 18F2450??
pero ahi es donde me lio, cualquier ayuda se agradrece.

Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 14 de Mayo de 2009, 17:58:17
Creo recordar que el 2450 es casi igual al 2550 pero con menos memoria.
Revisa bien, debería furular
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 15 de Mayo de 2009, 02:01:28
Gracia una vez Señor Nocturno,
Tengo problema con mi programa y programando me sale varios Errores que yo se que no son compartible con el Pic que uso ya que he probado varios, aparte la Version de CCS que tengo me tira que no reconoce Nemonico , principalmente en la configuracion de los Fuses, lastima no tengo ese pic aqui a mano y ya lo pedi, pero quiero seguir luchando, se que es un programa tan simple pero el programa CCS 4,057 me da problema.  solo espero que quizas aguien me los compilar con el y simularlo con el 18F2550-1/SP .
Saludos
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 15 de Mayo de 2009, 02:25:55
Lo intento compilar yo, ¿para qué micro lo necesitas?
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 15 de Mayo de 2009, 02:58:32
 :-/ :-/ :-/ Sr Manuel se lo agradeceria muchos si no es muchos molestarlo  :-/ :-/
por favor, se lo pido  :?
Gracias  :-/ gracias  :-/
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 15 de Mayo de 2009, 03:16:02
Aquí está para 18F2550 y sin tener que ponerle nada en el pin MCLR.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 15 de Mayo de 2009, 03:29:47
 :-/ :-/ :-/ muchas gracias Sr. Manuel :mrgreen:
se le recompenza con un Trago de Ron :-)

Saludos
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 15 de Mayo de 2009, 07:06:13
 :? nada que no me chuta!! en el CP1 pin 13 me sale -0.110 miliVoltio y en el RA0 pin 2 me sale lo mismo, por mucho que pulso no reaciona,  :5] :5] estoy luchando con viento y marea  :z) :z)

Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 15 de Mayo de 2009, 08:11:34
Haz una cosa Rafael, no lo he montado en real porque sólo lo he simulado en Proteus y todos sabemos que cualquier parecido con la realidad es pura coincidencia.
Es muy posible que los fuses no estén bien configurados.
Abre el HEX con Winpic800 y elimina los fuses FCMEM, IESO, CCP2MX, PBADEN, LPT1OSC y STVREN. Programa el PIC y prueba suerte.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 15 de Mayo de 2009, 08:30:56
Haz una cosa Rafael, no lo he montado en real porque sólo lo he simulado en Proteus y todos sabemos que cualquier parecido con la realidad es pura coincidencia.
Es muy posible que los fuses no estén bien configurados.
Abre el HEX con Winpic800 y elimina los fuses FCMEM, IESO, CCP2MX, PBADEN, LPT1OSC y STVREN. Programa el PIC y prueba suerte.
El Winpic800 :z) Sr Manuel se le olvida que yo tengo el ICD2 y el MPLAB , pero si Usted lo dice me bajare el Winpic800 :(
Yo no confio en el Proteus , no se para que inventa esa porqueria  :D
Yo estoy seguro que son los Fuse, pero con tantos Fuse que hay en ese codigo reconozco muy poco.
 otras cosas debo decirte que no puse el LCD, pero lo montare cuando tenga mas tiempo, yo solo quiero ver con el Oscilocopio el efecto.

Ahora mi pregunta a usted Sr Manuel, usted probo ese circuito en lo fisico con el 18F2520?
porque si es asi me espero hasta en marte que me llegu :g), que Jillipollon soy :mrgreen:
Gracias  :-/ :-/ :-/
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 15 de Mayo de 2009, 09:33:50
Sr Manuel, no le quiero ser un paliza :mrgreen:
hice como usted me dijo mire en la foto y sigo igual.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 15 de Mayo de 2009, 12:49:56
Pues no se me ocurre qué puede estar pasando, la verdad.
Yo no he montado nunca este circuito tal y cual está ahí publicado, pero sí lo he integrado como una parte en proyectos mayores y funciona perfectamente.
¿Si le metes otro firmware el PIC funciona?
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 15 de Mayo de 2009, 14:11:50
Lo se Sr Manuel, que usted ese circuito lo integro en su fuente de alimentacion, tengo 2 x 18F2550 y lo probe con los dos y nada, luego puse un Led a que hiciera intermitencia y ya no se que hacer, yo pienso que ese Pic18F2550 no va con ese codigo, algo misterio habra :x

Sr, Manuel se le agradece su colaboracion muchas gracias
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 16 de Mayo de 2009, 04:29:51
Pues bien! a ver si alguien me echa una mano con los Fuse porque me compila pero no me va.
Agradeceria cualquier ayuda
#include <18F2550.h>
#device adc=10

#FUSES WDT4                     //Watch Dog Timer uses 1:4 Postscale
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOPROTECT                //Code not protected from reading
#FUSES BROWNOUT                 //Reset when brownout detected
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES PUT                      //Power Up Timer
#FUSES NOCPD                    //No EE protection
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES IESO                     //Internal External Switch Over mode enabled
#FUSES FCMEN                    //Fail-safe clock monitor enabled
#FUSES PBADEN                   //PORTB pins are configured as analog input channels on RESET
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOMCLR                 //Master Clear pin disabled
#FUSES LPT1OSC                  //Timer1 configured for low-power operation
#FUSES NOXINST                  //Extended set extension and Indexed Addressing mode disabled (Legacy mode)
#FUSES PLL1                     //No PLL PreScaler

#use delay(clock=8000000,restart_wdt)

#byte       PORTA=      0xF80
#byte       PORTB=      0xF81
#byte       PORTC=      0xF82
#byte       PORTE=      0xF84

#bit        PULS1=      PORTC.0     // Pulsador Marrón
#bit        PULS2=      PORTA.6     // Pulsador verde

#define use_portb_lcd TRUE
#include <LCD.C>

int16 i,j;

void main()
{
   setup_adc_ports(AN0_TO_AN4|VSS_VDD);
   setup_adc(ADC_CLOCK_INTERNAL);
   setup_spi(FALSE);
   setup_wdt(WDT_ON);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DIV_BY_4,255,1);
   // Frecuencia = clock / 4 / prescaler / (repeticiones+1) = 8000000/4/4/(255+1)=1953
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);
   setup_comparator(NC_NC_NC_NC);
   setup_vref(FALSE);
   lcd_init();
   enable_interrupts(INT_TIMER0);
   enable_interrupts(INT_AD);
   enable_interrupts(GLOBAL);
   setup_low_volt_detect(FALSE);


   i=512;   // punto medio del duty de 10 bits
   setup_ccp1(CCP_PWM);
   set_pwm1_duty(i);

   set_adc_channel(0);
   while (1) {
      if (!PULS1)
         i--;
      if (!PULS2)
         i++;
      set_pwm1_duty(i);
      j = read_adc();
      lcd_gotoxy(1,1);
      printf(LCD_PUTC,"Duty%3lu ADC %4lu",i,j);
      lcd_gotoxy(1,2);
      printf(LCD_PUTC,"PWM%3.0f%% Vin %4.2fV",(float)i*100/1024,(float)j*5.0/1024.0);
      delay_ms(10);
   }

}
Saludos


Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 17 de Mayo de 2009, 03:40:42
Hola señor, lo he montado en protoboard y en 5 minutos estaba funcionando, así que debes hacer algo raro porque no es normal que no te funcione.

De todas formas para minimizar riesgos, he reducido el programa a su mínima expresión, eliminando todo lo que se refiere al LCD y los pulsadores.
El programa que te adjunto genera una señal PWM por el pin CCP1 (pin 13) proporcional a la lectura de la entrada analógica RA0 (pin 2) donde puedes poner un potenciómetro para probar.

Te dejo el código fuente y el hex.

SUERTE MONSTRUO
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 17 de Mayo de 2009, 05:21:34
 :-/ :-/ Muchisima Gracias Sr Manolo por sacarme de este apuro   :-/ :-/ :-/ :-/ ya tengo mas idea para seguir conociendo el PWM  :-/ :-/ :-/ muchas gracias  :-/ :-/
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 17 de Mayo de 2009, 05:23:00
Esto no se queda asi  :mrgreen:,
 a ver cuandos nos bebemos el ron :P


Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 17 de Mayo de 2009, 05:49:53
¿Ya te funciona?
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 17 de Mayo de 2009, 05:54:27
¿Ya te funciona?

Sr Manuel  ahora mismo me pongo a eso,  :mrgreen: muchas gracias Gran Jefe Genio :mrgreen:, me ha dado una piste impresionante macho, el programa es muy facil desde un punto tecnico pero como te comentaba los Fuse  :D :D me vuelven loco  :D :D,  :-/ :-/ :-/
 Gracias una vez mas por tu gran interes :-/ :-/ de enseñarme Maestros  :P
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 19 de Mayo de 2009, 09:50:20
Hola!! bueno en Vista de algunos exitos que tengo experimentando ya lo posteare , pero aqui va una pregunta? en la salida analogica no me llega ni 5 voltio justo(ca 4.600 Voltio , y me gustaria que subiera mas y pense poner la salida a la base de un transistor y el colector al positivo con una Resistencia calculada para que me suba de 0 a 5 Voltio o al mas,  5,6 Voltio seria ideal,
Tiene alguien otras ideas mejor ???
 :x
Saludos
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 19 de Mayo de 2009, 12:16:06
La salida digital sí será de 5V, aunque después del condensador a través del PWM puede que veas algo menos (aunque no deberías). De todas formas, si quieres subir, con un transistor irá bien.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 19 de Mayo de 2009, 14:34:22
Muchas gracias Manolo! es que ira montado con un cable de casi 30 metro de largo, el cable es digital 120oHm, y asi evitar parasito lo probe sin carga con un cable de 20 metro pero el voltage no me llega ni a 4.70 voltio, al maximo, pero voy a probar con un transistor y si va como quiero subo el esquema :P
Saludos  8)
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: jorgenuviola en 02 de Abril de 2013, 01:15:41
Nuestros PIC disponen de una gama enorme de periféricos entre los cuales casi satisfacen todas las necesidades, pero sin embargo y sorprendentemente no tienen una salida analógica de gran resolución. Sólo disponen de una salida de tensión variable de 4 bits de resolución que suele como Vref para el comparador, aunque es insuficiente para la mayoría de aplicaciones.

Pues bien, he probado una técnica muy simple aprendida durante el montaje de la fuente de Valdorre, que consiste en inyectar una señal PWM a un conjunto formado por resistencia + condensador y nos encontraremos la señal analógica en la unión de ambos.

Os dejo aquí un ejemplo de uso, con señal de 2KHz inyectada sobre resistencia de 47K y condensador de 10uF, con su simulación en Proteus y código fuente en CCS.

El programa es muy simple: he puesto un par de botones para aumentar o disminuir el Duty Cicle y un LCD que nos muestra los parámetros que corren en el sistema.

Si no habéis probado nunca esta técnica, os recomiendo que lo probéis; es muy ilustrativo.

(http://img204.imageshack.us/img204/32/salidaanalogicazy5.jpg)

muchisimas gracias, lo puse en practica y anduvo de pelos!!!!!!!
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: jorgenuviola en 02 de Abril de 2013, 16:13:30
bueno chicos necesito un mano, hice tal cual el digrama de este post, con un capacitor de 10uf una resistencia de 47k la salida analogica, en el proteus funciona bien, en la realidad al medir en el capacitor el voltaje no pasa 1.6 V, ¿como puedo hacer para que no pierda potencia al conectar algo?

hice un programa simple

define osc 4
inicio:
pwm porta.0,255,1000
goto inicio

en 255 clava en 5 volts en el proteus, con el tester me dicta 1.6v
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: jim_17 en 02 de Abril de 2013, 16:49:42
bueno chicos necesito un mano, hice tal cual el digrama de este post, con un capacitor de 10uf una resistencia de 47k la salida analogica, en el proteus funciona bien, en la realidad al medir en el capacitor el voltaje no pasa 1.6 V, ¿como puedo hacer para que no pierda potencia al conectar algo?

hice un programa simple

define osc 4
inicio:
pwm porta.0,255,1000
goto inicio

en 255 clava en 5 volts en el proteus, con el tester me dicta 1.6v

jorge,

Normalmente este tipo de circuitos esta pensado para que no sea conectado con ninguna carga (ya que de por sí, tiene una impedancia de salida alta), si le conectas una carga pues baja la tensión ya que la carga que conectas actúa como un pequeño divisor resistivo.

Para conseguir una perdida menor de potencia deberias bajar la resistencia de 47k hacia un valor más pequeño y aumentar el valor del condensador si observas que la tensión no es estable.

Un saludo.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: reiniertl en 02 de Mayo de 2013, 10:10:06
Además luego de la salida del filtro pasa bajos pasivo deberías colocar un amplificador para bufferear la salida. Basta que pongas un operacional en configuración seguidor de tensión y listo. Como evidentemente vas a conectar el operacional desde tierra hasta VCC debes escoger un operaional "rail to rail" para que puedas dar salida desde GND hasta VCC.

Aunque la mejor solución para este problema es montarse un filtro activo pasa bajos con aproximación de bessel. No es difícil hoy en día. Te pasas por la página de Texas Instruments te descargas el programa Tina TI o el que tengan ahora para diseño de filtros y el resto es muy sencillo porque el programa es muy fácil. Te montas el filtro y lo conectas a la salida pasa del PWM. Adiós a los problemas de caída de tensión, etc, etc.

Un saludo
Reinier

Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: neo en 04 de Mayo de 2013, 05:34:55
Una pregunta de principiante, como mejorar la resolucion de una salida analogica de 10bits...para que trabaje como una de 12bits ?

un saludo
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 04 de Mayo de 2013, 05:56:23
¿Qué quieres decir con "que trabaje como una de 12 bits"?

De todas formas recuerda que de donde no hay, no se puede sacar.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: ppyote en 04 de Mayo de 2013, 07:09:37
Para sacar una salida analógica con una resolución de 12 bits necesitaras o un convertidor da externo o implementar por software un pwm en el pic... Lo malo de la segunda opción es que las frecuencias obtenidas serán muy bajas a demás de que el pic no podrá hacer otras funciones tales como retardos u otras cosas que demoren mucho tiempo de ejecución
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Yoshua en 04 de Mayo de 2013, 21:55:31
si queres agregar mas bits tendrias que armar un dac con resistencias y usar otras salidas para que genere los otros bits. Por ejemplo:

aux----res----+
ccp1----res----+-------salida

Con este circuito podes hacer una salida pwm de 11 bytes. Si Aux=1 la salida pwm seria de 2,5v a 5v con los 10 bits de resolucion del CCP1 y si Aux=0, la salida seria de 0v a 2,5v con la misma resolucion. Si necesitas mas bits tenes que armar un DAC simple con resistencias y usar como bit menos significativo el pin del CCP.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Picuino en 05 de Mayo de 2013, 15:51:01
Hay una técnica para incrementar la resolución de un ADC de 10 bits a 12 bits.
Primero, aunque parezca paradójico, la señal muestreada debe tener ruido (un poco, lo justo para que el valor leído oscile entre 2 o 3 valores)
Segundo, debes muestrear muchas veces la señal y calcular el promedio.
El resultado tendrá más bits de resolución que el ADC utilizado.

La técnica se llama oversampling:

Enhancing ADC resolution by oversampling: http://www.atmel.com/ja/jp/Images/doc8003.pdf

Achieving Higher ADC Resolution Using Oversampling : http://ww1.microchip.com/downloads/en/AppNotes/Achieving%20Higher%20ADC%20Resolution%20Using%20Oversampling%2001152A.pdf

Saludos.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: jorgenuviola en 27 de Mayo de 2013, 23:19:55
al final use un transitor y anda de pelos,



Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 14 de Agosto de 2013, 01:09:31
al final use un transitor y anda de pelos,




Podras poner un esquema de como lo conectaste ??
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: jorgenuviola en 17 de Agosto de 2013, 17:30:26
conecte la el port del pic a la base del transistor, el colector a corriente negativa y el emisor al negativo del instrumento, el positivo del instrumento al postivo  y listo.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 28 de Agosto de 2013, 09:43:37
Entiendo que hay una constante RC (para elegir los valores de resistencia y capacitor) que debe elegirse dependiendo de la frecuencia del PWM, segun lei por alli.

Alguien puede enseñarme a calcularla, para hacerlo bien ??
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 28 de Agosto de 2013, 14:02:40
Yo implemente el circuito y software y todo bien cuando lees la señal en el puerto AD del conversor, pero si intentas meter esa tensión en la patilla Vref+, se cae bastante la misma.
Pase la resistencia de 47K a solo 10K y a mejorado bastante, pero sigue errando casi 100 milivolts la tensión medida versus la calculada...

Saben indicarme como solucionar esto??
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 28 de Agosto de 2013, 14:31:09
haber si he entendido bien.....
Yo lo que hice fue poner un BS170 o el BS150 ahora mismo no recuerdo, pero uno de los dos fue, el GATE le puse una Resistencia de 100 , aqui lo puede calcular o sin  Resitencia o con,  y como usaba un Cable de casi 40 Metro para controllar una entrada analogica desde 0 Votio hasta 5Voltio me llega casi 4.90 Voltio y el circuito directo me marcaba 5,50 Voltio aunque la alimentacion me daba 5,80 y algo, recuerdo lo hice con un 16F628.

 
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 28 de Agosto de 2013, 15:27:48
Bueno, el valor óptimo no sé cual es, habría que calcularlo con la ecuación exponencial de carga y descarga de un RC, pero con 47K y 10uF la constante de tiempo es de 470 ms que es mucho más grande que el valor óptimo, el resultado es poco riple, pero respuesta lerdísima. Ese es el problema del filtro RC, si queremos poco riple es en detrimento de la velocidad...
Hice unos cálculos con mi calculadora  :mrgreen:

Carga = (5-V) * (1 - e(-t/RC))

Descarga = V * e(-t/RC)

Frecuencia = 2Khz ==> T = 0,5 ms

Duty 50% ==> ton = 0,25 ms toff = 0,25 ms

1) RC = 0.3 ms tenemos un riple de 0.85V es decir una salida oscilante entre 1.62 y 3.35
    (demora unos 2ms en establecerse partiendo de 0V)

2) RC = 3ms tenemos un riple de 0.09V es decir salida oscilante entre 2.4 y 2.59
    (demora unos 15ms en establecerse partiendo de 0V)

Haciendo una estimación con esos valores supongo que una constante RC=10ms dará por resultado una oscilación de 30 mV y un tiempo de establecimiento de 50ms.

Para ello fijo C en 1uF y R = 10ms/1uF = 10k

Menta ya habia contestado antes que yo preguntara !!

Rafael, si tienes ganas, ponme un esquema de como conectaste esa salida analogica, gracias !!
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 28 de Agosto de 2013, 17:18:39
Marcos es muy facil,

lo conecte como el Circuito de la Derecha como pone Aqui (http://www.elektronik-kompendium.de/public/schaerer/bilder/powsw110.gif) solo que la R2 la puse de 1K o 1k2 Ohmio exacto ahora mismo no recuerdo porque estaba probando para que me 5 Voltio, donde pone Ua de aqui controloba mi circuito claro con GND, la R1 del GATE puede probar con un poti hasta que encuentre el valor de saturacion del Mosfet.

Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 28 de Agosto de 2013, 18:19:03
Marcos es muy facil,

lo conecte como el Circuito de la Derecha como pone Aqui (http://www.elektronik-kompendium.de/public/schaerer/bilder/powsw110.gif) solo que la R2 la puse de 1K o 1k2 Ohmio exacto ahora mismo no recuerdo porque estaba probando para que me 5 Voltio, donde pone Ua de aqui controloba mi circuito claro con GND, la R1 del GATE puede probar con un poti hasta que encuentre el valor de saturacion del Mosfet.



Por lo que se ve en el dibujo, el circuito invierte la señal del PWM, o sea lo que es pico lo hace valle y viceversa, no es asi??
Hay forma que no se invierta??
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: stk500 en 29 de Agosto de 2013, 02:24:38
tiene razon el PWM ahi se invierte, eso no lo tome en cuenta porque solo necesita que me regulara el Voltage de 0 Voltio a 5 Voltio. es lo unico que necesitaba. pero como te decia es cuestion de probar con el Mosfet,
Tipea en Google PWM dimmer with Mosfet a vera que te sale un monton de circuitos, asi lo busque yo ;-)
You know!!!! :mrgreen:
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 04 de Septiembre de 2013, 14:52:33
Tengo un problema con el pwm, a ver si me pueden ayudar.

Resulta que implemente una salida variable, que luego inyecto en la entrada Vref del mismo PIC.
Uso un PIC18F26K80.

Uso el PWM5 para tratar de enviar un valor de tension (variable a traves del pwm) entre 0 y 5 V.

De la salida PWM pongo un circuito RC, de valores R= 10K y C= 3,3 uF segun los calculos esto cortaria las frecuencias mayores a 4.8 hertz.
Ademas responde mas rapidamente a los cambios.

El problema:

Si uso valores mayores a 300 y menores a 990 para el duty cicle, la respuesta es buena, rapida (para mi necesidad esta OK) y precisa (repetible ademas).

Si pongo valores de Duty menores a 300, se muere el pwm, es decir parece como si dejara de oscilar y envia vlores de tension muy por debajo o por encima de lo deseado, aunque mayormente se cae casi a cero la tension.
Valores mayores a 990 (recordar que es de 10 bits y puede llegar a 1023) tambien ocurre lo mismo , aunque en este caso es mas aleatorio que se reproduzca el mismo fenomeno.

El ejemplo de Manolo lo probe sobre un PIC18F2550 y va de lujo, lo cual me llama la atencion, ya que no sucede asi en mi aplicacion.

Alguna sugerencia??
A alguien le paso algo similar ?? :shock: :shock:
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 05 de Septiembre de 2013, 03:51:03
¿Es culpavdel PWM o del filtro que le has puesto?, apostaría a lo segundo.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 05 de Septiembre de 2013, 08:48:53
Es que esto ocurría igual con la misma configuracion que tu habias hecho 47K y 10 uF.
En el 18F2550 esto no me ocurría, mientras en el 18F26K80 si lo hace.

En vías de echarle la culpa al compilador, use la misma version en ambos y pasaba lo mismo...
Cambie varias versiones y siempre igual.  Por mi parte lo descarto como causal del problema...

Sera un tema de impedancia de la entrada analogica cuando es usada como Vref+ ??
Si es asi, como es la forma de arreglarlo??

Aclaro que me pasa algo similar al usar otro PWM para manejar la patilla de un transistor BC339 que modula luz de unos leds...
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: sander en 05 de Septiembre de 2013, 09:55:02
Sera problema de hardware?, ese PIC necesita un capacitor externo en el pin VCAP, sera que esta bien?

Saludos
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 05 de Septiembre de 2013, 10:29:03
Esta instalado desde el dia 0... :mrgreen:
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: reiniertl en 09 de Septiembre de 2013, 17:36:00
Trata de poner un buffer (operacional en configuración seguidor de tensión) a la salida del filtro. Si esto te resuelve el problema es que hay un problema de acople de impedancias. A mi juicio ese es el problema, la saturación de seguro se debe a que Vref necesita un buen acople de impedancia. Comienza por ver que dice el datsheet al respecto en esas tablas que uno casi nunca mira y entiende poco puede estar la respuesta que buscas.


Saludos
Reinier
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 09 de Septiembre de 2013, 17:50:23
Ayer revisando en la placa encontre el capacitor soldado al reves (como lo habia puesto Manolo en proteus!! :D :D).
Lo di vuelta, pero aun no volvi a cargar las rutinas para probarlo entre 0 y 100% (lo tengo limitado en el codigo.).

Para colmo no tengo a quien culpar, lo solde yo !!! :mrgreen: :mrgreen: :mrgreen:
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Picuino en 09 de Septiembre de 2013, 20:10:19
Muy interesante el fallo. Lo voy a incluir en la lista de fallos de conexión:
¿Está el componente conectado con la polaridad correcta?
Desde que recopilo este tipo de fallos, ya no me da tanta rabia caer en uno.
a veces resulta frustrante ver que llevas un buen rato intentando que funcione un circuito y resulta que no está conectado. A todos nos pasa.
Un saludo.
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: Nocturno en 10 de Septiembre de 2013, 04:05:04
Ayer revisando en la placa encontre el capacitor soldado al reves (como lo habia puesto Manolo en proteus!! :D :D).
Lo di vuelta, pero aun no volvi a cargar las rutinas para probarlo entre 0 y 100% (lo tengo limitado en el codigo.).

Para colmo no tengo a quien culpar, lo solde yo !!! :mrgreen: :mrgreen: :mrgreen:

¡Bieeen!, caíste en la trampa. Me encanta poner trampas  :D :D :D :D
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: MGLSOFT en 10 de Septiembre de 2013, 08:15:41
Eso me pasa por seguirte a ciegas !!  ((:-)) ((:-)) ((:-)) :D :D
Título: Re: Dotando de salida analógica a nuestro PIC
Publicado por: fxto en 13 de Septiembre de 2013, 05:39:01
Elmasvital, no puedo discutir contigo de algo que no tengo ni idea, pero creía que la entrada del convertidor ADC se basa precísamente en eso; en el tiempo de carga y descarga de un condensador interno.