TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: c4_esp_VR en 26 de Febrero de 2007, 16:52:52
-
Hola de nuevo foreros:
Tengo un problema con el ADC del pic 18f4552, resulta que tengo un potenciometro que tiene un rago de señal entre 0.12V y 4.75V, cuando lo conecto al pic, los 0.12V de la entrada corresponte a 00 y los 4.35V a los 255...es decir si os fijais en los datos el fondo de escala del potenciometro es mayor que el del ADC...no se supone que el ADC tendría un fonde de escala entre GND y VCC...porqué el ADC sólo me llega a 4.35V...se debe a la resolución de mi programa o porque el ADC es así...de ser así tendría que meter un operacional y bajar el fondo de escala imagino...o comprar un ADC externo de más portencia que el del pic y pasarele los datos...¿Qué pensaís sobre esto tan extraño? :) :) :) :)
Aqui os dejo el programita para que le hecheis un vistazo, como podeis comprobar es muy sencillo y cortito:
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#define use_portb_lcd TRUE
#include <lcd.c>
void main(void) {
int value=0;
long value2=0;
lcd_init();
///////////////////////ADC//////////////////////////////////////////////////////////////
//setup_port_a( ALL_ANALOG );
#if defined(AN1)
setup_adc_ports(AN1);
#endif
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel(1);
while (TRUE)
{
value = Read_ADC();
value2= Read_ADC();
delay_ms(5);
printf(lcd_putc,"\f%LX \n%LX",value,value2);
}
}
Un saludete y como siempre muchas gracias a todos :mrgreen: :mrgreen: :mrgreen:
-
Estas seguro que lees el canal adecuado? El primer canal es el AN0 no el AN1.
PD: además revisa si estas trabajando en 8 bits o 10 bits.
-
Estoy segurisimo que estoy usando el canal adecuado pues tengo un valor entre 00000 y 65472 cuando muevo el potenciometro y esto contesta a tu segunda pregunta...que es long (16bits) pues el ADC que uso es de 16 bits (#device adc=16).
El primer canal es el AN0 sino fijate en el datasheet del micro y en las librerias del CCS como bien dices, pero nosotros podemos usar el que mejor nos convenga...
P.D: maunix no duermes neng, siempre estas aqui :shock: :shock: :shock:
-
Estoy segurisimo que estoy usando el canal adecuado pues tengo un valor entre 00000 y 65472 cuando muevo el potenciometro y esto contesta a tu segunda pregunta...que es long (16bits) pues el ADC que uso es de 16 bits (#device adc=16).
El primer canal es el AN0 sino fijate en el datasheet del micro y en las librerias del CCS como bien dices, pero nosotros podemos usar el que mejor nos convenga...
P.D: maunix no duermes neng, siempre estas aqui :shock: :shock: :shock:
Bueno, el pic que usan tiene un A/D de 10 bits. No se qué variará que le hagan ADC=16 porque no uso el CCS pero supongo tal vez eso solo varié el prototipo de la función Read_ADC()
Si están seguros de medir AN1 entonces no digo nada. Pero no vendría mal que nos indiquen cómo es el hardware.
Otra pregunta, luego de la configuración del A/D. ¿Pueden conocer el estado de ADCON0 y ADCON1 y postearlo aquí?
Si uds obtienen valores entre 0 y 65535 es porque están usando el modo de justificación izquierda. Este modo se usa gralmente cuando uno solo quiere 8 bits de precisión y toma nomás el valor del registro ADRESH. Ahora cuando uno quiere precisión de 10 bits se suele usar justificación derecha ya que esto nos dará valores de 0 a 1023.
Con esto quiero ver qué referencia están usando , tal vez no sea la que uds esperan.
Saludos
-
hola c4_esp_VR. tengo varias opiniones en base a lo ensayos que he hecho:
- colocando #device adc=16 ciertamente haces la justificación a la izquierda.
- ¿mediste la tensión de Vcc? ¿a cuanto llega? -
- mide a Vcc y a Gnd.
- siempre he notado que el máximo valor obtenido del ADC (ó CAD) siempre está por debajo del valor del Vdd.
- porque en tu código mandas a leer 2 veces a CAD, ¿no deberias esperar un tiempo de adquisición mínimo entre lecturas?
- además al estar declarando a value como long tienes 2^16 = 65536 posibles valores, no haría falta llamar a valor2
Salu2
Pedro
-
Hola de nuevo, ya estoy aquí dandole al CAD...
Lo de la justificación no tengo ni idea...sólo se que me dá valores entre 0 y 65472 al poner un long con un CAD de 16 bits, lo del valor del int era para ver que me daba y me da un rango entre 0 y 255 que son 8 bits por ser int.
La tensión del PIC es la del USB, es decir me da 5.05V por tanto el CAD está por debajo de la alimentación (Vmax CAD = 4.2V)
Leo dos veces, una para el int y otra para el long...era sólo una prueba para ver que sacaba...
Lo de dejar tiempo entre dos adquisiciones de datos...pues tienes razón...pero de todas maneras funciona.
El código no es el problema pues este código (lo simplifico para no confindir) funciona perfectamente...lo que no funciona "bien" es el fondo de escala de CAD que debería de ser el de alimentación y no caer de los supuestos 5V a los 4.2 que dá como máximo.
#include <18F4550.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=12000000)
#define use_portb_lcd TRUE
#include <lcd.c>
void main(void) {
long value2=0;
lcd_init();
///////////////////////ADC//////////////////////////////////////////////////////////////
#if defined(AN1)
setup_adc_ports(AN1);
#endif
setup_adc( ADC_CLOCK_INTERNAL );
set_adc_channel(1);
while (TRUE)
{
value2= Read_ADC();
delay_ms(5);
printf(lcd_putc,"\f%LX",value2);
}
}
Por lo que veo el fondo de escala no tiene solución...pues la Vref no puede ser mayor que la alimentación del pic pues por defecto coje como Vref la misma que la de la alimentación, así que hay que acondicionar la señal...
Con el divisor de tensión funciona a la perfección ajustando al máximo la señal...es decir, la señal max del CAD es de 4.2V y la max del encoder es de 4.7V pues decimos que sí:
Ventrada= 4.7V Vsalida=4.2V Vsalida = Ventrada (R2/R1+R2)...hechando cálculos uno de los posibles valores de las resistencias comerciales son R1=1K2 y R2=10K con lo que haciendo esto equiparamos la max tensión del encoder a la max tensión del CAD, con lo que en teoría es perfecto y en la práctica sale bien pero con un pequeño error pues las resistencias tienen un pequeño error
Otra posibilidad es poner un AO de ganancia menor que 1 pero como tambien jugamos con las resistencias...pues más sencillo hacer el divisor de tensión.
P.D: Mi pregunta en general era si existía alguna forma de subir el fondo de escala del CAD del micro...pero creo que no la hay...a no ser que alimentemos el micro a 6V...lo cual no es bueno :D :D :D :D
P.D2: Ya de paso con la duda queda hecho un programita de un CAD de 16 bits que saca por el LCD dicha conversión.
Un saluedete
-
c4_esp_VR , leo y releo tu post y no entiendo la relación que haces entre la tensión de alimentación del pic (que sería la Vref de tu A/D si es que lo configuran así) y la tensión del encoder y del valor ese 4.2 que no se de donde sacan.
Si tu referencia es de 5V , el que tengas 65472 sobre un máximo de 65535 solo indica estas sensando 4,99 voltios.
Entonces no veo donde tienes el famoso problema que planteas.
Si puedes subir un esquemático, sería tanto más provechoso.
Saludos
-
puede que el problema sea en el hardware como dice Maunix, ¿de cuanto es ese potenciometro? recuerda que para una correcta conversión hay que tomar en cuenta la resistencia a la entrada del CAD.
Salu2
Pedro
-
Tan mal me explico... :( :( :( :(
Veamos el portenciometro es un encoder que me dá una tensión entre 0 y 4.7V.
El CAD pasa de 65472 a 0 cuando el encoder excede los 4.2V y queda constante hasta que el encoder da 0V, es decir para el CAD el intervalo entre 4.2V y 4.7V permenece en 65472 con lo que hay un error bastante grande...
Espero haberme expresado con claridad :-) :-) :-) :-) :-)
Gracias a ambos por vuestro tiempo e interés
-
No entiendo lo de la resolución del CAD de 16 bits, si el pic solo tiene 10 bits de resolución no es posible obtener 16 bits por mas que se configure asi en el ccs (eso creo). Al configurar los supuestos 16 bits lo que se hace como dijo maunix es justificar a la izquierda, no he hecho la prueba pero creo que el incremento no es de uno en uno sino de 64 en 64 (por los 6 bits que quedan a la derecha y que no cambian), por lo tanto el dato de 65472 no va incrementando de 1 en 1 a medida que el voltaje aumenta sino que el próximo valor que se lea va a ser 65536 o sea el máximo.
Si tu referencia es de 5V , el que tengas 65472 sobre un máximo de 65535 solo indica estas sensando 4,99 voltios.
Coincido con maunix, no veo ningún problema.
Yo aconsejaría configurar en el ccs resolucion de 10 bits para que sea mas fácil, se trabaja con valores de 0 a 1023 y no se presta para confusión. Además que yo sepa (me corrigen por favor) no es posible aumentar la resolución del CAD por software.
saludos.
-
Veamos el portenciometro es un encoder que me dá una tensión entre 0 y 4.7V.
El CAD pasa de 65472 a 0 cuando el encoder excede los 4.2V y queda constante hasta que el encoder da 0V, es decir para el CAD el intervalo entre 4.2V y 4.7V permenece en 65472 con lo que hay un error bastante grande...
Espero haberme expresado con claridad :-) :-) :-) :-) :-)
c4_esp_VR, releo y releo y sigo sin entender... :shock:
Tu te refieres cuando el encoder DESCIENDE de los 4.2V ? Porque para mi "excede los 4.2V significa que "es mayor que".
Como verás estoy tratando de unificar terminología.
¿Tan difícil es poner un esquemático de tu circuito? :?
-
Yo coincido con dhmejia, es imposible tratar de obligar un conversor AD que es de 10 bits a trabajar a 16. Ese debe ser el error, no puedes iterpretar numeros de mas de 1023. El pic no da para mas. Bueno hay unos nuevos que ya traen ADc de 12bits. pero no mas.
No te estaras confundiendo con
#device *=16
un poquito de lo que encuentras en la ayuda de CCS.
#DEVICE ADC=xx
Configures the read_adc return size. For example, using a PIC with a 10 bit A/D you can use 8 or 10 for xx- 8 will return the most significant byte, 10 will return the full A/D reading of 10 bits.
-
Bueno, Pues a pesar de que no entiendo como es posible por software obligar al hardware a converrtir a 16 bits.
Este es tu problema.
If the device had a 10bit ADC module, value will range between 0-3FF.
#DEVICE ADC=8 will yield0-FF
#DEVICE ADC=16 will yield 0-FFC0
Y pues con esto te dicen que aunque el ADC esta trabajando a 16 bits lo maximo que obtienes a 5V es FFC0 =65472. y no 65535.
Tienes mal la escala. arregla eso y ya esta.
PERO Como es posible obligar al hardware????? :z)
-
PERO Como es posible obligar al hardware????? :z)
No se obliga a nadie. Simplemente el PIC puede justifica a izquierda o derecha un resultado de 10 bits entre los 2 registros que cuenta
Imaginate el máximo valor:
Trabajando en binario.
ADvalue = 00000011 11111111; // 10 bits en 1
Si usamos justificación izquierda.
ADRESH ADRESL
ADvalue = 11111111 11000000
El valor irá de 0 a 65472dec ó FFC0h
Si usamos justificación derecha
ADRESH ADRESL
ADvalue = 00000011 11111111
El valor irá de 0 a 1023dec ó 03FFh
Eso de usar el ADC=16 es una definición del CCS, nada más, que nada tiene que ver con el PIC.
Slaudos
-
Realmente se habla de 16 bits por lo que tratas el resultado del ADC en 2 registros de 8 bits, Aunque no se usan los 6 bits de menos peso cuando se justifica a la izquierda.
Pues en la realidad son un poco insignificantes y no cambia de a mucho el resultado, pero en la realida en conversor siempre sera de 10 bits.
Entonces en realidad obtendras la misma resolucion si trabajas a 10 que a supuesto 16 bits.
Gracias maunix por la explicacion y aclararme este embrollo que se me formo.
Saludos!
-
No entiendo lo de la resolución del CAD de 16 bits, si el pic solo tiene 10 bits de resolución no es posible obtener 16 bits por mas que se configure asi en el ccs (eso creo). Al configurar los supuestos 16 bits lo que se hace como dijo maunix es justificar a la izquierda, no he hecho la prueba pero creo que el incremento no es de uno en uno sino de 64 en 64 (por los 6 bits que quedan a la derecha y que no cambian), por lo tanto el dato de 65472 no va incrementando de 1 en 1 a medida que el voltaje aumenta sino que el próximo valor que se lea va a ser 65536 o sea el máximo.
Si tu referencia es de 5V , el que tengas 65472 sobre un máximo de 65535 solo indica estas sensando 4,99 voltios.
Coincido con maunix, no veo ningún problema.
Yo aconsejaría configurar en el ccs resolucion de 10 bits para que sea mas fácil, se trabaja con valores de 0 a 1023 y no se presta para confusión. Además que yo sepa (me corrigen por favor) no es posible aumentar la resolución del CAD por software.
saludos.
ojo en ningún momento dije que había resolución de 16 bits, ya mauricio lo aclaró en su representación binaria, lo de 16 bits es el ancho del del registro para alojar el resultado que devuelve el CCS. (que es un long)
c4_esp_VR si tu mismo dices que no tienes problemas en el software, ¿no te parece que el problema debe estar en la circuitería? por eso es que se te pide el diagrama del circuito, para ver si podemos ayudarte.
Salu2
Pedro
-
Ante todo sigo insistiendo que el problema no es el programa, sino el CAD (Hardware del PIC) que tiene una caida de tensión bastante alta respecto a la alimentación...no entiendo a que viene todo el lio ese del desplazamiento de bits a izquierda y demás...
En el manual de CCS viene esto...
READ_ADC( )
--------------------------------------------------------------------------------
Syntax:
value = read_adc ([mode])
Parameters:
mode is an optional parameter. If used the values may be:
ADC_START_AND_READ (continually takes readings, this is the default)
ADC_START_ONLY (starts the conversion and returns)
ADC_READ_ONLY (reads last conversion result)
Returns:
Either a 8 or 16 bit int depending on #DEVICE ADC= directive.
Function:
This function will read the digital value from the analog to digital converter. Calls to setup_adc(), setup_adc_ports() and set_adc_channel() should be made sometime before this function is called. The range of the return value depends on number of bits in the chips A/D converter and the setting in the #DEVICE ADC= directive as follows:
ADC=8
00-FF
00-FF
00-FF
00-FF
ADC=10
x
0-3FF
x
x
ADC=11
x
x
0-7FF
x
ADC=16
0-FF00
0-FFC0
0-FFEO
0-FFFF
Note: x is not defined
Availability:
This function is only available on devices with A/D hardware.
Requires:
Pin constants are defined in the devices .h file.
Así que por lo que entiendo la función ReadADC() devuelve 16 bits por tanto entiento que si la lactura devuelve 16 bits imagino que el CAD es de 16 bits...sino menudo engaño...pa que serviría está chorrada....aunque en el datasheet del PIC pone lo siguente:
ADC:
10-bit, up to 13-channels Analog-to-Digital Converter
module (A/D) with programmable acquisition time
Son unos cazurros :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol: :lol:
El esquemático me parece una chorrada ponerlo porque es un pic alimentado desde el usb con sus GND y con una entrada del pic habilitada para el CAD...
Y en segundo lugar aquí os dejo el encoder que estoy usando:
http://www.amidata.es/componentes-electronicos-es/circuitos-electricos/75353-Sensor-Spectrol-en-360-inteligente.html
Os sigo diciendo que la tensión máxima que alcanza el CAD es de 4.2V y la tensión máxima del encoder alimentado a 5V es de 4.7V por tanto el fondo de escala del encoder es mayor que el del CAD con lo que habrá que ajustar ambos fondos de escala...y esto por favor no me lo hagais repetir más porque creo que está bien clarito...no sé donde radica la dificultad de entender esto...no hace falta ser ingeniero :P :P :P :P
De todas modos, gracias a todos por la preocupación y las ansias de aprender que todos tenemos sois los mejores chavales
P.D: En el curro me tienen chapado el foro...voy a ver si puedo hacer algo con ello...diré que es didacta para mi y que me hace falta pa vivir :D :D :D :D
-
no entiendo a que viene todo el lio ese del desplazamiento de bits a izquierda y demás...
Son unos cazurros
El esquemático me parece una chorrada ponerlo porque es un pic alimentado desde el usb con sus GND y con una entrada del pic habilitada para el CAD...
no me lo hagais repetir más porque creo que está bien clarito...no sé donde radica la dificultad de entender esto...no hace falta ser ingeniero
En el curro me tienen chapado el foro
Me parece muy grosera la forma como contestas!! Si a ti te parece una estupidez, para otros que de pronto mas adelante tengan el mismo problema pero que si tengan problemas en el programa, verán la solución.
Ahora crees que con saber programar en CCS sabes de PICS, pues estas equivocado. Se nota que no te toco pasar por la escuela del ensamblador. Eso si era saber PICs. CCS lo que hace es facilitarte las cosas pero no por ello ya eres un experto en PICS.
Ahora si no te da la gana montar un "simple esquemático" como le llamas, pues no veo que problema halla en montarlo si es tan simple. Ahora lee muy bien las respuestas que te dimos. !!!!
El Problema:
Estoy segurisimo que estoy usando el canal adecuado pues tengo un valor entre 00000 y 65472 cuando muevo el potenciometro y esto contesta a tu segunda pregunta...que es long (16bits) pues el ADC que uso es de 16 bits (#device adc=16).
Lo de la justificación no tengo ni idea...sólo se que me dá valores entre 0 y 65472 al poner un long con un CAD de 16 bits
La respuesta al problema:
Trabajando en binario.
ADvalue = 00000011 11111111; // 10 bits en 1
Si usamos justificación izquierda.
ADRESH ADRESL
ADvalue = 11111111 11000000
El valor irá de 0 a 65472dec ó FFC0h
Como pretendes recibir 65535 a 5V si el maximo que puedes tener por la justificacion a la izquierda es de 65472.
y no hace falta ser ingeniero para entender eso!!!!!
y si tanto problema te da la referencia interna por que según tu el problema es una caída interna del PIC, pues que esperas para usar una referencia externa y se te acabó tu problema.
De mi parte no contesto más en este hilo.
Por favor y si algún moderador ve que mi respuesta no esta de acuerdo con las reglas de este foro, tiene todo el permiso de borrarla, pero es que realmente es indignante que alguien intente ayudarlo y la respuesta de este tipo sea tan grosera.
PD.
cazurros, chorrada, En el curro me tienen chapado el foro. Ni idea que significa, que ¿crees que estas hablando con tu vecino?
-
Ante todo sigo insistiendo que el problema no es el programa, sino el CAD (Hardware del PIC) que tiene una caida de tensión bastante alta respecto a la alimentación...no entiendo a que viene todo el lio ese del desplazamiento de bits a izquierda y demás...
En el manual de CCS viene esto...
...
..
c4_esp_VR
¿y con eso qué? ¿acaso CCS inventó los pics? A la información hay que interpretarla en un contexto, y ese contexto es TU PIC. CCS no puede ir más allá de lo que el pic puede hacer. El CCS no es más que un compilador y no va a cambiar el funcionamiento del hardware de tu pic.
Si no entiendes lo de la justificación izquierda/derecha, debes leer el datasheet del pic y ver si de ahí lo entiendes, sino, también como picmouse he terminado exhausto con este hilo. Dicen que no hay peor sordo que el que no quiere oir.
Te hemos dado muchas pistas, me he tomado el tiempo de explicarte al detalle algunas cosas y sin embargo no insistes más que en encerrarte en tu post y lo repites una y otra vez, sin siquiera (al parecer) haber leído lo que he subido y/o subir un simple esquemático.
No se si estás en un proyecto para la NASA, la CIA , AlQaeda o quien sea que no puedas subir el esquemático, pero sin él difícil será darte una solución.
Los pics funcionan de maravillas y su rango es COMPLETO. Jamás me pasó lo que comentas por lo tanto es que te he pedido que subas y subas tu esquemático una y otra vez. En ese caso podríamos armar algún código de prueba para que verifiques el hardware pero parece que no llegaremos a esa instancia porque no haces caso a lo que te decimos.
No se trata de imponer, se trata de colaborar. Si vienes aquí a pedir ayuda y/o consejo, debes estar abierto a esos conceptos y no seguir machacando los tuyos sin siquiera dar crédito o tomarte el tiempo de leer lo que se te está explicando con la mayor de las paciencias. Mucho menos si encima eres agresivo.
Entiendo tu frustración porque no te salen las cosas, pero a veces el error está en nosotros mismos y no en el hardware que solo hará lo que tu le digas que haga. Acostumbrate a eso si te quieres dedicar a esto de los microcontroladores porque no será la primera vez que te pase. Sin paciencia no lograrás nada.
Quedo a la espera del esquemático y de un cambio de actitud de tu parte.
Saludos
-
...y esto por favor no me lo hagais repetir más porque creo que está bien clarito...
No, hombre! Por mi parte ni te gastes, por que mensajes como esos ya ni los leo.
Ante todo sigo insistiendo que el problema no es el programa, sino el CAD (Hardware del PIC) que tiene una caida de tensión bastante alta respecto a la alimentación...no entiendo a que viene todo el lio ese del desplazamiento de bits a izquierda y demás...
¿A vos te parece que sos el primero que hace un ADC ? Si Microchip fabricara PICs con "una caida de tensión bastante alta respecto a la alimentación" venderia bastante pocos... A lo mejor el errorcito esta FUERA del PIC...
ufffff.
Saludos.
-
c4_esp_VR, el orgullo y la seguridad en tí mismo son armas poderosas para conseguir los objetivos propios, pero no deberían cerrarte los ojos y los oídos ante los sabios e insistentes consejos que te han dado.
-
Se ve que el tema es candente!!!
Yo arme un lio similar por este mismo tema en el anterior foro, alcanzo para distanciarme de un forista al que admiraba profundamente por sus colaboraciones.
Al tiempo tuve la valentia de pedirle disculpas y luego intercambiamos tanta informacion a nivel personal que ya ni me acordaba de la anecdota!! :lol: :lol:
c4_esp_VR, estas a tiempo aun de manejar este lio mejor que lo que yo lo hice, seria muy inteligente de tu parte agradecer las colaboraciones y ver de bajar los decibeles de la conversacion.
Cuando a mi me ocurrio esto eramos 700 foristas, hoy hay un cero mas y menos paciencia con el comportamiento ajeno, es que no hay tiempo para mirar y aportar en los hilos y todos se cansan rapido de las malas respuestas (seguramente a ti tambien te cansaria leer contestaciones de mala onda si intentas ayudar).
Un gran abrazo a todos.
Marcos
-
pues que pelea de gallos caballeros. :D
entiendo hasta cierto punto, tu angustia c4_esp_VR, pero si hay algo que NO hago yo, es pagar los platos rotos con otros por un problema que tenga.
ante todo si no quieres publicar tu circuito, por lo menos, revisalo de nuevo, porque por el solo hecho de ser sencillo no quiere decir que tenga algún error que tu NO puedes ver en estos momentos, es algo que nos pasa a todos.
esto solo es una hipotesis mia, también pueden haber docenas de errores que puedan afectar lo que estas buscando, el asunto es darle la vuelta hasta hallar la solución, pero eso si, pidiendo ayuda de una manera educada.
espero que puedas solucionarlo.
Salu2
Pedro
-
Si te crees que mi contestación es gotesca...deberías de compararla con la tuya...porque son el blanco y negro, PICmouse
En ningún momento me has ayudado ni solucionado el problema, pero ni mucho menos desapruebo el esfuerzo que tú y muchos otros al igual que yo, intentamos ayudar a aquellos que lo necesitan y dar vidilla al foro.
Esto es un foro...dudo que esté fuera de la "ley" decir chorrada y cazurros (que hay muchos sueltos por el mundo...)
De todas formas creo que nunca he dicho nada malo ni en éste ni en ningún otro hilo y si alguien por lo que sea...ya sea porque es muy sensible o porque se ofende rápidamente o porqué esta pasando un mal momento emocional...pido disculpas por ello.
Siempre he intentado ayudar a los demás en el foro gracias a mis conocimientos sobre el tema y tambien gracias a los conocimientos que todos vosotros aportais, pues muchas cosas las he aprendido gracias a vosotros.
Por cierto, si he pasado por la becaría del ensamblador...en mi caso del motorola de la familia del 68000 por si te interesa, no creas que sólo sé C, C++, Visual C, Delphi, VHDL...
Por favor y si algún moderador ve que mi respuesta no esta de acuerdo con las reglas de este foro, tiene todo el permiso de borrarla, pero es que realmente es indignante que alguien pida AYUDAy la respuesta de este tipo sea tan grosera.
Un saludete a todos y como siempre gracias por el esfuerzo y lamento los comentarios desafortunados que algunos han publicado en el hilo.
P.D: La solución que he usado ha sido un divisor de tensión, es la mejor y más sencilla forma de solucionar lo que me ocurre con el CAD por lo menos como solución provisional.
P.D: El circuito lo publicaré cuando acabe todo pues es pa hacer un tutorial de lo que he realiado...pero es que a veces se me quita las ganas de hacer público un trabajo que me está costanto mucho tiempo y dinero por culpa de comentarios que no vienen a cuento...
P.D: Por el momento he conseguido enviar dator por RF entre dos PC con esta maravilla de placa, controlar 2 motores, controlar 2 servos, un LCD y unos encoder (a medias...), ahora sólo me falta unirlo pues estoy teniendo problemas con las prioridades y/o habilitaciones de las interrupciones.
http://www.todopic.com.ar/foros/index.php?topic=15430.0
-
Hola amigos, mi papa decía "Nunca digas nunca" y pues tiene razón. jajaja :D Que no respondería mas acá, mentiras, ya estoy un poco mas relajado. De mi parte quiero ofrecer una disculpa por la respuesta pero es que si me sentí ofendido.
Regresando al tema el problema ya esta solucionado creo no!. Efectivamente el no tienen problemas de hardware, es de software y esta en lo que resumí la vez pasada, y es la conclusión de la respuesta de nuestro amigo MAUNIX.
No es posible recibir 65535 como resultado de la conversión ADC. ya que por mas que le digas al conversor ADC que es de 16 bits. Sucede que lo que hace es justificar los 10 bits del ADC a la izquierda y pues los 6 bits restantes de menor peso siempre serán 0. Por lo que máximo máximo se obtiene 65472.
MODIFICO:
c4_esp_VR Has posteado mientras escribía mi respuesta. Bueno pues el que publiques o no el proyecto de tu esfuerzo, bueno eso ya es tu criterio y pues las cosas que aportas en el foro siempre serán bien recibidas por todos. Dices que a veces no dan ganas de montar algo que nos cuesta mucho trabajo, lo entiendo porque me ha pasado, pero creo que una de las cosas que aprendí en este foro es a compartir mucho sin esperar nada a cambio, ejemplos como REDPIC, NOCTURNO, JIM, PALITROQUEZ, y otros amigos del foro que se me escapan en este momento, te enseñan que todo el trabajo de hacer las cosas y además sentarse a redactarlo para que todos entendamos, es de aplaudir.
De mi parte Muchas suerte en tus planes y que ojala algún día crucemos mas palabras ya de una forma mas amigable.
Saludos!
-
c4_esp_VR , muy lindo tu post aunque no creo que haya aportado nada al debate de tu problema en concreto.
Por mi parte doy por terminado el hilo y ya en alguna otra oportunidad tendrás forma de ver o analizar las causas de tu problema, de seguro lo harás solo, en silencio y podrás evaluar tú mismo acertada o erróneamente lo que causa lo que estás viendo.
Creo que sigues en tu misma postura de que algo mágico está pasando en tu hardware sin que de veras te hayas puesto a analizar "los hechos" de lo que has observado y lo que he tratado de hacerte ver.
Si pides ayuda para 'algo' debes dar 'algo' , que en este caso no era dinero sino información! Si lo ves de otro punto de vista, lo que haz hecho con los posts suena a "atenderse con el médico por teléfono". Dices que te duele pero no dejas que te revise...
Aclaro que no hay mala onda, ni enojo ni nada por el estilo, simplemente te quiero hacer ver que si pides ayuda de algo en concreto, debes dar algo a cambio, informar, etc. No se puede "adivinar" tanto, te doy otro ejemplo: Si le dices a tu mecánico que el automóvil no te anda, pero al vehículo lo tienes guardado en el garage y no le das precisiones más que decirle "no sé, no me arranca, giro la llave y hace ruidito y nada más" ¿crees que podrá realmente detectar el problema?
Es como consultar de una duda de un código y ni siquiera postear una línea... el nivel de ayuda puede ser "tirar sugerencias" pero nada más que cosas típicas que a uno se le ocurra en el momento pero no significa que esa sea la causa de tu problema! Pudiera ser otra cosa totalmente diferente y he aquí donde se termina en lo mismo -> subir el código.
Espero comprendas que en los foros cuando se tienen dudas y/o problemas hay que colaborar con tus "colaborandos"....
Saludos y hasta la próxima.
-
El HW es imposible que sea pues al PIC le llegan justamente los 5.05V medidos en las patillas del PIC...así que para qué tanta palabrería que no sirve de nada...
Por cierto...ya di por cerrado el hilo unos cuantos post antes...a ver si leemos un poquito que luego andais diciendo que no leo los post... :shock: :shock: :shock: :shock: :shock: :shock: :shock:
Respuesta #5 en: 27 de Febrero de 2007, 12:48:47
Unos 4 dias para ser exactos... :D :D :D :D :D :D :D Yo no soy quien se hace lios y va diciendo chorradas de que si esquemático por aqui o que no quiero dar información o que tengo que dar algo a cambio o yo que sé que locuras pasan por tu cabeza...
Encantado de habrir el hilo chat...parece que os querias desahogar con alguien y me ha tocado a mi...y claro como sois 10 contra 1 pues que voy a decir...
Alé, un saludete a tod@s.
-
Respondí tu post http://www.todopic.com.ar/foros/index.php?topic=16237.msg106594#msg106594, el cual llevaba unos minutos en la red cuando yo entré y respondí. No hay 4 días ni nada por el estilo.
Y puedo repetir -> relee mis posts... Se te dio información de cuestiones de software y hardware... lo del esquema surgió después cuando se hablaba de que exponias la casi imposibilidad de que sea tu software o hardware... solamente dejabas todo librado a que sea el hardware del pic ...
Si aún así crees que estoy enojado, estás muy equivocado, solo opiné y opino que vas por el mal camino si quieres ser parte de un 'grupo' que alguna vez haga 'algo'. Es todo.
Para que haya una pelea hacen falta al menos 2 personas ... y yo a decir verdad, hoy no tengo ganas.
Saludos
-
Te puedo asegurar que para enfadarme o enojarme hace falta que se caiga el planeta encima mia...sé que respondeis con ilusión al igual que lo hago yo, sólo que nunca fui con intención de fastidiar sino con ser irónico...pero veo que mi ironía se tomó como una respuesta negativa...por mi parte no es nada más que un mal entendido y así lo veré de aqui en adelante.
Sigo diciendo que pido disculpas si a alguien le ha sentado mal alguno de mis comentarios y tambien digo que se soluciona con un simple divisor de tensión :D :D :D :D :D :D
Un saludete chavales :P :P :P :P :P
-
Bueno, veo que este post es un cumulo de malos entendidos y de falta de tacto al escribir.
Conozco personalmente a c4_esp_VR y os digo que es un tio fenomenal, pero el lenguaje escrito veo que no es lo suyo (ya te dare dos collejas cuando te pille). Tambien os conozco al resto de aqui del foro y comprendo el motivo de contestar como lo habeis hecho. Voy a intentar dar una vision objetiva de los malentendidos, a mi parecer, que ha habido, con la esperanza de que mis amigos del foro no se lleven mal con un amigo personal y viceversa.
no entiendo a que viene todo el lio ese del desplazamiento de bits a izquierda y demás...
Yo tambien creo que hay radica tu error, ahora has añadido un divisor de tension y has solucionado por HW convirtiendo los 4.7 que te entrega el encoder en 4.2, que es el maximo que tu configuracion admite (65472) ¿Me equivoco?
Son unos cazurros
Aqui esta uno de los malentendidos que veo, cazurros no se suele decir por aqui con mala intencion, se refiere a que esta mal explicado o que simplemente se podian haber molestado algo mas en explicarlo. Personalmente pienso parecido con mucha de la ayuda de CCS
El esquemático me parece una chorrada ponerlo porque es un pic alimentado desde el usb con sus GND y con una entrada del pic habilitada para el CAD...
Chorrada se podria traducir como obvio, al menos se que lo decia en ese sentido, es un pic alimentado a 5.05V (da igual si es por medio de un USB o 7805, simplemente se le alimenta con 5V) y en la entrada RA0 mete datos analogicos, su cristal y demas como todos los demas esquemas. Creo que por eso no vio necesario el esquematico. Aunque se podria decir mejor tambien.
no me lo hagais repetir más porque creo que está bien clarito...no sé donde radica la dificultad de entender esto...no hace falta ser ingeniero
Esto ya si lo veo mal Jose, aqui te has salido de tono. Si algo no se entiende, en el 99% de los casos es por que no se ha explicado bien. Y esto lo sabes de sobra despues de haber estado con ciertos profesores que tenemos en la escuela. Ademas sabes que aqui la gente sabe mucho de estas cosas y no hay problema por hablar todo lo tecnicamente que quieras.
En el curro me tienen chapado el foro
Traduccion: "La conexion a internet del trabajo tiene bloqueado el acceso al foro" Otro malentendido de las diferencias del lenguaje.
Se que que nadie es culpable de los problemas de los demas y mucho menos debe ser conocedor de ellos. Os aseguro que si c4_esp_VR no ha colgado el esquematico completo es por motivos ajenos a su persona, por eso solo se refiere a la parte del circuito que se utiliza en una entrada analogica (RA0) y el resto del circuito no es necesario para el tema a tratar. Si por el fuera ya estaria colgado el proyecto, estoy seguro que cuando acabe todo lo colgara entero, pero actualmente le podria suponer problemas (si alguien quiere saber, se lo explico por privado).
Tambien compredo que c4_esp_VR no esta hablando conmigo, con el que si tiene mas confianza para utilizar cierto tono y aqui deberia hablar mas calmado, aunque si se seguro que no ha sido con mala intencion. Lo que ha dicho que hay que hacer para enfadarle os aseguro que es cierto y que es una persona a la que conozco solo de hace un par de años y me ha demostrado que no tiene ninguna maldad ni sobervia, auque se haya pasado de ironico ciertamente.
PD1: Espero haber sido objetivo, solo quiero paz en el foro xD :5}
PD2: Si te dignas a pasar por el laboratorio te ayudo con la placa, que desde que estas currando pisas menos la escuela que yo.
-
Gracias 5GGT por intentar poner paz...repito que en ningún momento intenté hacer daño a nadie...que no hace falta ser ingeniero lo dije en plan soberbia porque muchos de los que estan aqui no son ingenieros y seguro que saben muchisimo más que yo...lo dije refieriendome a eso...lo de cazurros iva referido a CCS por poner un ADC de 16bits si el pic sólo tiene 10bits.
Por supuesto que colgaré el trabajo realizado pues no se lo van a quedar los magnates del petroleo pa sacarle probecho...
La semana que viene esteré todas las tardes por la escuela pa mirar cosillas con el osciloscopio...no todos tenemos un pedazo de osciloscopio como el de 5GTT en casa :P :P :P :P :P :P :P
En el curro me tienen chapado el foro...eso no es un mal entendido eso es cierto...y ni pidiendolo me lo han desbloquedao...en cambio tienen abiertos foros de peces y de coches...yo es que flipo...
Repito que nunca tuve mala intención...
Espero que a partir de ahora impere el buen "rollito" entre nosotros :-/ :-/ :-/
Un saludete a todos.
-
Conozco personalmente a c4_esp_VR y os digo que es un tio fenomenal
Pues... los amigos de mis amigos son mis amigos. :mrgreen:
... pero el lenguaje escrito veo que no es lo suyo...
No han quedado dudas...ja ja ja ja!!!!
A darle para delante! :)
-
5GTT, me parece sencillamente genial tu intervención y es cierto que los que nos dedicamos a las cosas técnicas no somos precisamente los más delicados y poéticos para escribir.
En cuanto al amigo c4_esp_VR , yo no le tengo rencor ni mucho menos pero sí está claro que me cuestó y me cuesta entender el tono con el que escribe :? :? , suena muy agresivo cuando se lo lee más allá de que no sea poético jeje.
Creo que cuando uno tiene un problema, debe tener paciencia y no atacar a los muchos o pocos que intentar darle una mano.
Respecto a otras cosas, perdón pero sigo algo metido en el tema
Yo tambien creo que hay radica tu error, ahora has añadido un divisor de tension y has solucionado por HW convirtiendo los 4.7 que te entrega el encoder en 4.2, que es el maximo que tu configuracion admite (65472) ¿Me equivoco?
Sigo sin entender...
Aqui esta uno de los malentendidos que veo, cazurros no se suele decir por aqui con mala intencion, se refiere a que esta mal explicado o que simplemente se podian haber molestado algo mas en explicarlo. Personalmente pienso parecido con mucha de la ayuda de CCS
La ayuda del CCS es poco menos que buena pero es que también hay que entender que el CCS es un COMPILADOR y nada más.
Creo que el error de uno como usuario es pensar en que el manual de CCS dirá todo.
Los manuales de los compiladores te dan un par de lineamientos de qué hace la función y que significa cada parámetro pero no mucho más. Sino echen un vistazo al del C18! aunque este último al menos te da el código fuente de todo y con eso un puede cambiar/modificar muchas cosas.
Tu programa correrá en un PIC y si tienes dudas de qué hará el pic hay que ir al datasheet del pic. Ningún compilador de C que conozco explica al detalle la función porque para eso hay que leer el datasheet.
Saludos :lol: :lol: :lol:
-
Bueno, veo que este post es un cumulo de malos entendidos y de falta de tacto al escribir.
Conozco personalmente a c4_esp_VR y os digo que es un tio fenomenal, pero el lenguaje escrito veo que no es lo suyo (ya te dare dos collejas cuando te pille). Tambien os conozco al resto de aqui del foro y comprendo el motivo de contestar como lo habeis hecho. Voy a intentar dar una vision objetiva de los malentendidos, a mi parecer, que ha habido, con la esperanza de que mis amigos del foro no se lleven mal con un amigo personal y viceversa.
no entiendo a que viene todo el lio ese del desplazamiento de bits a izquierda y demás...
Yo tambien creo que hay radica tu error, ahora has añadido un divisor de tension y has solucionado por HW convirtiendo los 4.7 que te entrega el encoder en 4.2, que es el maximo que tu configuracion admite (65472) ¿Me equivoco?
Son unos cazurros
Aqui esta uno de los malentendidos que veo, cazurros no se suele decir por aqui con mala intencion, se refiere a que esta mal explicado o que simplemente se podian haber molestado algo mas en explicarlo. Personalmente pienso parecido con mucha de la ayuda de CCS
El esquemático me parece una chorrada ponerlo porque es un pic alimentado desde el usb con sus GND y con una entrada del pic habilitada para el CAD...
Chorrada se podria traducir como obvio, al menos se que lo decia en ese sentido, es un pic alimentado a 5.05V (da igual si es por medio de un USB o 7805, simplemente se le alimenta con 5V) y en la entrada RA0 mete datos analogicos, su cristal y demas como todos los demas esquemas. Creo que por eso no vio necesario el esquematico. Aunque se podria decir mejor tambien.
no me lo hagais repetir más porque creo que está bien clarito...no sé donde radica la dificultad de entender esto...no hace falta ser ingeniero
Esto ya si lo veo mal Jose, aqui te has salido de tono. Si algo no se entiende, en el 99% de los casos es por que no se ha explicado bien. Y esto lo sabes de sobra despues de haber estado con ciertos profesores que tenemos en la escuela. Ademas sabes que aqui la gente sabe mucho de estas cosas y no hay problema por hablar todo lo tecnicamente que quieras.
En el curro me tienen chapado el foro
Traduccion: "La conexion a internet del trabajo tiene bloqueado el acceso al foro" Otro malentendido de las diferencias del lenguaje.
Se que que nadie es culpable de los problemas de los demas y mucho menos debe ser conocedor de ellos. Os aseguro que si c4_esp_VR no ha colgado el esquematico completo es por motivos ajenos a su persona, por eso solo se refiere a la parte del circuito que se utiliza en una entrada analogica (RA0) y el resto del circuito no es necesario para el tema a tratar. Si por el fuera ya estaria colgado el proyecto, estoy seguro que cuando acabe todo lo colgara entero, pero actualmente le podria suponer problemas (si alguien quiere saber, se lo explico por privado).
Tambien compredo que c4_esp_VR no esta hablando conmigo, con el que si tiene mas confianza para utilizar cierto tono y aqui deberia hablar mas calmado, aunque si se seguro que no ha sido con mala intencion. Lo que ha dicho que hay que hacer para enfadarle os aseguro que es cierto y que es una persona a la que conozco solo de hace un par de años y me ha demostrado que no tiene ninguna maldad ni sobervia, auque se haya pasado de ironico ciertamente.
PD1: Espero haber sido objetivo, solo quiero paz en el foro xD :5}
PD2: Si te dignas a pasar por el laboratorio te ayudo con la placa, que desde que estas currando pisas menos la escuela que yo.
offtopic:
me parece muy bien que 5GTT explicara esos conceptos, siempre cuando voy a escribir, trato de usar terminos que sean conocidos, porque aquí (y en otros foros) participan personas de muchos paises y se comprueba siempre que las palabras escritas pueden causar mas daño que las habladas, como dice mi hermana: no existe palabra mal dicha, sino mal interpretada :)
muy bueno que se aclarara todo este malentendido c4_esp_VR :-/
Salu2
Pedro
-
Me alegro que se haya resuelto el mal entendido por causa de mis palabras, a partir de ahora intentaré escribir de forma mas científica y educada...lo cual me gusta hacerlo pero muchas veces no tengo tiempo de contestar de dicha forma ya sea por prisa o porque estoy haciendo otras cosas...
maunix restecto a lo del divisor de tensión...si el CAD aparentemente su max. tensión es de 4.2V...es decir que para 4.2V me da digitalmente 65472 y si la entrada es de 4.5V me da 65472 y si son 5V me da 65472...quiero decir con ésto que entre los valores de entrada analógicos entre 4.2 y 5V tengo un resultado de 65472...con lo que hay que bajar el fondo de escala del encoder de 5V a 4.2V para que sea proporcional al fondo de escala del CAD, así para 0V tendré 00000 y para 4.2V tendré 65472.
Espero que se haya solucionado tu duda...
Un saludete a todos.
-
maunix restecto a lo del divisor de tensión...si el CAD aparentemente su max. tensión es de 4.2V...es decir que para 4.2V me da digitalmente 65472 y si la entrada es de 4.5V me da 65472 y si son 5V me da 65472...quiero decir con ésto que entre los valores de entrada analógicos entre 4.2 y 5V tengo un resultado de 65472...con lo que hay que bajar el fondo de escala del encoder de 5V a 4.2V para que sea proporcional al fondo de escala del CAD, así para 0V tendré 00000 y para 4.2V tendré 65472.
Bueno, recién ahora entiendo lo que querías decir. Realmente en tus otros posts no entendía esto, más bien entendía cualquier otra cosa.
La verdad, no tengo mucho para agregar, solo que mi experiencia y los datasheets de microchip hablan de un rango de 0 a 5V :mrgreen: .
Saludos
-
c4_esp_VR, no es que el ADC pueda tomar valores máximo de 4.2V.
lo que sucede es que siempre tendrás 10 bits.
Hagamos un paréntesis y sacamos conclusiones de lo que se tiene hasta ahora seguro y al final se saca conclusiones.
1.) El ADC del PIC máximo trabajara a 10 bits.
2.) Se esta usando una variable de 16 bits para guardar el resultado del ADC.
Miremos un poco lo que pasa internamente del PIC.
El resultado del ADC de 10 bits después de leer 0V, seria=0b0000000000
El resultado del ADC de 10 bits después de leer 5V seria=0b1111111111
De lo anterior, lo que debemos tener claro es que el resultado es de 10bits.
Ahora, miremos lo que pasa por software con el CCS.
Tú defines una variable de 16 bits. Eso es correcto.
Ahora Acá es donde esta tu problema y no quiero que lo tomes a mal, pero es error de comprensión, míralo bien.
el resultado del ADC es de 10 bits, pero la variable a guardarlo es de 16 bits, entonces la pregunta es. Que pasa con los 6 bits que hacen falta para completar los 16??
Y la respuesta es:
CCS los llena de ceros ya que no se utilizan.
entonces si tú defines
ADC = 16bits.
entonces CCS te coloca los 10 bits del ADC justificados a la izquierda.
Ejemplo: la lectura del ADC es 0V tendremos
0000000000000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ejemplo2.
La lectura del ADC es 5V entonces la respuesta seria la máxima, es decir todos los 10 bits en 1.
1111111111000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ahora que sucede si tu le dices al CCS que ADC = 10 bits. La única diferencia es que ahora los mismos 10 bits que antes, te los organiza pero justificados a la derecha de esta forma:
Ejemplo: la lectura del ADC es 0V tendremos
0000000000000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ejemplo2.
La lectura del ADC es 5V entonces la respuesta seria la máxima, es decir todos los 10 bits en 1.
0000001111111111
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Conclusión, no es que el ADC pueda leer hasta 4.2V, es que máximo tienes 10 bits para trabajar, lo que tienes que tener claro es como quieres que CCS te los organice.
Saludos!
-
Me parece que lo que c4_esp_VR quiere decir es que esta consiguiendo el 1111111111000000 o el 0000001111111111 con 4,2 voltios cosa que deberia suceder con 5V
-
maunix restecto a lo del divisor de tensión...si el CAD aparentemente su max. tensión es de 4.2V...es decir que para 4.2V me da digitalmente 65472 y si la entrada es de 4.5V me da 65472 y si son 5V me da 65472...quiero decir con ésto que entre los valores de entrada analógicos entre 4.2 y 5V tengo un resultado de 65472...con lo que hay que bajar el fondo de escala del encoder de 5V a 4.2V para que sea proporcional al fondo de escala del CAD, así para 0V tendré 00000 y para 4.2V tendré 65472.
Ahora queda mas claro, antes tambien me perdi yo, pero no le veo la logica ¿te sucede cuando alimentas con el USB o tambien cuando usas un regulador? ¿no puedes agregar referencias de tension externas? ganarias resolucion. De todas formas hay algo mal o en SW o en HW o estamos apasando algo por alto ya que deberia llegar a 65472 con 5V y no con 4.2V.
-
maunix restecto a lo del divisor de tensión...si el CAD aparentemente su max. tensión es de 4.2V...es decir que para 4.2V me da digitalmente 65472 y si la entrada es de 4.5V me da 65472 y si son 5V me da 65472...quiero decir con ésto que entre los valores de entrada analógicos entre 4.2 y 5V tengo un resultado de 65472...con lo que hay que bajar el fondo de escala del encoder de 5V a 4.2V para que sea proporcional al fondo de escala del CAD, así para 0V tendré 00000 y para 4.2V tendré 65472.
bueno, ahora soy yo quien no lee bien :).
Me parece que lo que c4_esp_VR quiere decir es que esta consiguiendo el 1111111111000000 o el 0000001111111111 con 4,2 voltios cosa que deberia suceder con 5V
Duende azu, tienes toda la razon. Bueno pues ahora si respecto a hardware, lo unico que recomendaria seria colocar un capacitor de 100uF entre VCC y 5V, ademas de unos 2 o 3 de 0.1uF justo al lado del microcontrolador.
Saludos !
-
No se cual es la configuracion por defecto del voltaje de referencia del ccs pero por si acaso, revisa ese punto pues no veo que lo hayas configurado en el programa que esta al principio
-
voy a decir una cosa rara que me pasó cuando trabajé el módulo CAD y el USB al mismo tiempo, y es que sin conectar el cable USB (iniciar transferencia HOST<->PIC)-> el resultado de la conversión me daba un valor DISTINTO al cuando conectaba el cable. en estos momentos, no le encuentro explicación a esto.
también cambiaba mi Vdd cuando variaba el valor del potenciometro a la entrada del CAD, esto se veía reflejado en el resultado, entonces tuve que probar alimentando con un fuente distinta para meter niveles al potenciometro y la variación de Vdd se hizo mas pequeña. (en caso de que Vref+ = Vdd y Vref- = gnd)
c4_esp_VR si por ejemplo la variación de tu potenciometro no es tan rápida, puedes colocar un condensador de 100nF en el ANx que estes usando, es una recomendación que leí por allí en una AN de microchip.
a lo mejor esta experiencia que tuve se relacione con lo tuyo (digo yo :-))
Salu2
Pedro
-
c4_esp_VR, no es que el ADC pueda tomar valores máximo de 4.2V.
lo que sucede es que siempre tendrás 10 bits.
Hagamos un paréntesis y sacamos conclusiones de lo que se tiene hasta ahora seguro y al final se saca conclusiones.
1.) El ADC del PIC máximo trabajara a 10 bits.
2.) Se esta usando una variable de 16 bits para guardar el resultado del ADC.
Miremos un poco lo que pasa internamente del PIC.
El resultado del ADC de 10 bits después de leer 0V, seria=0b0000000000
El resultado del ADC de 10 bits después de leer 5V seria=0b1111111111
De lo anterior, lo que debemos tener claro es que el resultado es de 10bits.
Ahora, miremos lo que pasa por software con el CCS.
Tú defines una variable de 16 bits. Eso es correcto.
Ahora Acá es donde esta tu problema y no quiero que lo tomes a mal, pero es error de comprensión, míralo bien.
el resultado del ADC es de 10 bits, pero la variable a guardarlo es de 16 bits, entonces la pregunta es. Que pasa con los 6 bits que hacen falta para completar los 16??
Y la respuesta es:
CCS los llena de ceros ya que no se utilizan.
entonces si tú defines
ADC = 16bits.
entonces CCS te coloca los 10 bits del ADC justificados a la izquierda.
Ejemplo: la lectura del ADC es 0V tendremos
0000000000000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ejemplo2.
La lectura del ADC es 5V entonces la respuesta seria la máxima, es decir todos los 10 bits en 1.
1111111111000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ahora que sucede si tu le dices al CCS que ADC = 10 bits. La única diferencia es que ahora los mismos 10 bits que antes, te los organiza pero justificados a la derecha de esta forma:
Ejemplo: la lectura del ADC es 0V tendremos
0000000000000000
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Ejemplo2.
La lectura del ADC es 5V entonces la respuesta seria la máxima, es decir todos los 10 bits en 1.
0000001111111111
Los que están en rojo son la respuesta del ADC, o que esta en negro es lo que CCS te rellena de ceros.
Conclusión, no es que el ADC pueda leer hasta 4.2V, es que máximo tienes 10 bits para trabajar, lo que tienes que tener claro es como quieres que CCS te los organice.
Saludos!
Grandiosa explicación!!! muchas gracias!
A lo mejor esto te sirve de algo:
"A/D Acquisition Requirements
For the A/D converter to meet its specified accuracy,
the charge holding capacitor (CHOLD) must be allowed
to fully charge to the input channel voltage level. The
analog input model is shown in Figure 17-2. The
source impedance (RS) and the internal sampling
switch (RSS) impedance directly affect the time
required to charge the capacitor CHOLD. The sampling
switch (RSS) impedance varies over the device voltage
(VDD). The source impedance affects the offset voltage
at the analog input (due to pin leakage current). The
maximum recommended impedance for analog
sources is 2.5 kΩ. After the analog input channel is
selected (changed), this acquisition must be done
before the conversion can be started.
TACQ = TAMP + TC + TCOFF
Temperature coefficient is only required for temperatures > 25°C.
TACQ = 2 μs + TC + [(Temp – 25°C)(0.05 μs/°C)]
TC = -CHOLD (RIC + RSS + RS) ln(1/2048)
-120 pF (1 kΩ + 7 kΩ + 2.5 kΩ) ln(0.0004883)
-120 pF (10.5 kΩ) ln(0.0004883)
-1.26 μs (-7.6246)
9.61 μs
TACQ = 2 μs + 9.61 μs + [(50°C – 25°C)(0.05 μs/°C)]
11.61 μs + 1.25 μs
12.86 μs"
Sacado del datasheet del 18F4x2
Mayormente se me ocurren varias cosas para evitar la solución que tienes ahora del divisor (pierdes resolución):
a) Poner condensadores de desacoplo de 100nF al ladito de cada patilla de VCC.
b) Subir el tiempo de muestreo.
c) Comprobar simultáneamente a la conversión, polímetro en mano, la tensión que le llega al ADC.
d) ¿Qué resistencia tiene el encoder de extremo a extremo?
-
Al poner el ADC de 10 bits...el resultado ha sido el mismo...(mirado también con osciloscopio)
Los condensadores de desacoplo están en todas las patillas...
Ya he comprobado la tensión del ADC con el polímtro en mano y tb con el osciloscopio...
También subí el tiempo de muestreo y nada al poner un ADC de 8 bits...
La verdad es que la resistencia de extremo a extremo es la misma 6.75K...me acabo de quedar flipando...he movido el encoder y me ha dado entre GND y la salida la misma resitencia sin alimentar el encoder... :shock: :shock: :shock: :shock: :shock:
Por lo demás la solución del divisor o de un amplificador de ganancia menor que uno son muy buenas correcciones momentaneas...
Por cierto según el datasheet del pic si no se pone tensión de referencia (Vref), este se pone por defecto con la tensión de alimentación del pic...
Un saludete a todos y gracias por vuestro interés :-/ :-/ :-/ :-/ :-/ :-/ :-/
Tambien dar la bienvenida a Emimad al gran foro de TodoPic, esperemos que seas un gran participante :-) :-) :-) :-)
-
Al poner el ADC de 10 bits...el resultado ha sido el mismo...(mirado también con osciloscopio)
Los condensadores de desacoplo están en todas las patillas...
Ya he comprobado la tensión del ADC con el polímtro en mano y tb con el osciloscopio...
También subí el tiempo de muestreo y nada al poner un ADC de 8 bits...
La verdad es que la resistencia de extremo a extremo es la misma 6.75K...me acabo de quedar flipando...he movido el encoder y me ha dado entre GND y la salida la misma resitencia sin alimentar el encoder... :shock: :shock: :shock: :shock: :shock:
Por lo demás la solución del divisor o de un amplificador de ganancia menor que uno son muy buenas correcciones momentaneas...
Por cierto según el datasheet del pic si no se pone tensión de referencia (Vref), este se pone por defecto con la tensión de alimentación del pic...
Un saludete a todos y gracias por vuestro interés :-/ :-/ :-/ :-/ :-/ :-/ :-/
Tambien dar la bienvenida a Emimad al gran foro de TodoPic, esperemos que seas un gran participante :-) :-) :-) :-)
Jejejje. Gracias por la bienvenida.
Comprueba una cosa: según lo tienes montado, quita el encoder y con una fuente secundaria le metes voltios de 0 a 5 y dinos si a 4.2V te sigue dando el máximo valor.
s2!!
-
Lo hemos comprobado esta tarde Emilio, hemos medido con osciloscopio todo, ya que estaba medido con polimetro y me surgio la duda de que pudiera haber problemas con la alimentacion o con la señal de salida del encoder. No se ha apreciado ruido ni caidas de tension, todo son señales rectas y limpias.
El resultado es que la alimentacion que llega al PIC son 5V en todo momento, es decir, una linea recta en el osciloscopio sin variaciones al mover el encoder o hacer cualquier operacion ya que lleva alimentacion externa y no hay problemas de demanda de corriente. LLeva condensadores necesarios y la tension de alimentacion definitivamente no es el problema.
Hemos medido la salida del encoder y efectivamente trabaja entre 0 y 4.7V. A partir de 4.2V da en todo caso 65472 ya este dando una salida de 4.2, 4.3,...4.7V
Hemos hecho el experimento que propone Emimad, hemos quitado el encoder y hemos metido directamente una fuente de alimentacion al conversor, con el mismo resultado, a partir de 4.2V da 65472.
Despues hemos cambiado la variable de 16 bits por una de 10 y el resultado es el mismo, solo que ahora a partir de 4.2V da 1024 evidentemente.
Seguire investigando en el datasheet y en CCS, definitivamente o ese PIC esta roto o es algo mal en el software.
-
Hechale un hojo a esta parte del datasheet Jose. Creo que deberias poner el divisor por 16 aunque no se si sera ese el problema.
-
Por cierto según el datasheet del pic si no se pone tensión de referencia (Vref), este se pone por defecto con la tensión de alimentación del pic...
¿Podes pegar el texto o hacer referencia exacta a donde leíste esto? Tal vez pueda ser una mala interpretación.
Lo que yo interpreto es que si el Vref no está seleccionado desde el ADCONx entonces se usa el Vdd como referencia, ahora bien si eliges un modo en que debas poner el Vref, no estoy seguro de que sea como dices. Jamás lo he probado porque si uso Vref le coloco vref pero no me parece que sea así como dices, pero al no estar 100% seguro te pido que subas por favor el texto o hagas incapié a la referencia con número de documento con su versión (la versión está designada con una letra) y su página.
5GTT es muy buen punto el que acabas de mencionar , si uno fija una base de tiempo que sea más rápida que los useg que requiere el conversor (1.6 useg en la mayoría de los pics) entonces la precisión se pierde.
-
Creo que se trata del compilador el que pone por defecto esas referencias, de todas formas yo se lo dejaria claro por si hace alguna jugarreta.
Con la nueva funcionalidad de CCS se puede ver el emsamblador que produce el codigo en C. Si colocamos este codigo:
setup_adc_ports(AN0 | VSS_VDD); //Aqui indico las referencias VDD y VSS
setup_adc( ADC_CLOCK_DIV_16 );
set_adc_channel(0);
En ensamblador vemos esto:
.................... setup_adc_ports(AN0 | VSS_VDD); //Aqui indico las referencias VDD y VSS
01E2: MOVF FC1,W
01E4: ANDLW C0
01E6: IORLW 0E
01E8: MOVWF FC1
.................... setup_adc( ADC_CLOCK_DIV_16 );
01EA: BSF FC0.0
01EC: BCF FC0.1
01EE: BSF FC0.2
01F0: BCF FC0.7
01F2: BSF FC2.0
.................... set_adc_channel(0);
01F4: MOVLW 00
01F6: MOVWF 01
01F8: MOVF FC2,W
01FA: ANDLW C3
01FC: IORWF 01,W
01FE: MOVWF FC2
Ahora cambiando el codigo:
setup_adc_ports(AN0);//Aqui no indico referencias a ver que toma por defecto CCS
setup_adc( ADC_CLOCK_DIV_16 );
set_adc_channel(0);
optenemos:
.................... setup_adc_ports(AN0); //Aqui no indico referencias a ver que toma por defecto CCS
01E2: MOVF FC1,W
01E4: ANDLW C0
01E6: IORLW 0E
01E8: MOVWF FC1
.................... setup_adc( ADC_CLOCK_DIV_16 );
01EA: BSF FC0.0
01EC: BCF FC0.1
01EE: BSF FC0.2
01F0: BCF FC0.7
01F2: BSF FC2.0
.................... set_adc_channel(0);
01F4: MOVLW 00
01F6: MOVWF 01
01F8: MOVF FC2,W
01FA: ANDLW C3
01FC: IORWF 01,W
01FE: MOVWF FC2
....................
Con lo cual creo que si es cierto que por defecto el compilador toma VDD y VSS como referencias si no se expecifican otras.
-
Con lo cual creo que si es cierto que por defecto el compilador toma VDD y VSS como referencias si no se expecifican otras.
Es que pensé que hablaban del HARDWARE del pic, no del compilador.
El compilador en este punto es secundario, ya que "supuestamente" el problema es del hardware...
En realidad por ahí se entremezcla el lenguaje y no es que el compilador "tome tal o cual cosa por defecto" es la función del setup_adc() la que setea esas cosas, el compilador solo cumple la labor de, valga la redundancia, compilarlo.
Es una pena que la gente de CCS no disponga de códigos fuente como trae el C18, realmente es muy útil saber cómo se implementa una cierta función ya que a veces uno no quiere 'exactamente' eso que está ahí escrito, sino cambiarlo levemente.
Todas estas conjeturas, las quise disipar desde el principio y si releemos varios posts atrás Post #4 del hilo (http://www.todopic.com.ar/foros/index.php?topic=16237.msg105995#msg105995) pedí que se lea el ADCONx en el MPLAB para ver cómo quedaban seteados... eso disipa toda duda de cómo queda configurado el módulo del hardware del pic ante el comando seleccionado.
Jamás tuve respuesta de eso (del estado de los ADCON) y eso me hace pensar que 'algo' en la comunicación entre posteadores no está funcionando bien lo cual es una pena.
Saludos
-
Creo que no es posible ver el estado del ADCON con CCS, no hay funcion que lo permita. Unicamente el estado del ADCON se puede ver en el ensamblador que he puesto, solo que al parecer CCS lo nombra como FC0, FC1 y FC2.
No soy muy experto en ensamblador, creo que FC1 es el equivalente de ADCON1 y tiene sus bits 4 y 5 a 0, con lo que seleccionamos VSS y VDD como referencias.
Me asalta la duda de si FC0 se refiere al ADCON2 y FC2 al ADCON0, seria de la manera que me cuadra la configuracion que puse en C en el mensaje anterior.
-
Creo que no es posible ver el estado del ADCON con CCS, no hay funcion que lo permita. Unicamente el estado del ADCON se puede ver en el ensamblador que he puesto, solo que al parecer CCS lo nombra como FC0, FC1 y FC2.
No soy muy experto en ensamblador, creo que FC1 es el equivalente de ADCON1 y tiene sus bits 4 y 5 a 0, con lo que seleccionamos VSS y VDD como referencias.
Me asalta la duda de si FC0 se refiere al ADCON2 y FC2 al ADCON0, seria de la manera que me cuadra la configuracion que puse en C en el mensaje anterior.
5GTT no creo que sea tan complicado.
Yo usé el ccs 3 o 4 veces en mi vida. Es perfectamente posible acoplarlo al MPLAB y en el WatchWindow se puede ver cualquier registro del pic.
También se podría sacar el valor del ADCONx por algún display, usart, o donde sea.
Esto es así para cualquier compilador, no importa que sea basic, pascal o el que sea.
De todas formas, lo que me preocupa es que cómo dije antes, estamos volviendo al principio donde si hubiera habido mejor comunicación no estaríamos 2 semanas después posteando esto que ya fue posteado. Eso es lo más preocupante.
Saludos
-
Otra forma seria en proteus. te deja ir paso a paso, y pues como lo que se quiere es probar la conversion AD, no estaria mal. Yo creo que el punto que tocaron es muy importante. Si le calibras mal la frecuencia de reloj para el AD, lo que se hace es que no le des el tiempo suficiente al AD para sacar los 10 bits y tendras respuestas a medias.
-
la verdad es que con el rollo que se formó anteriormente creo que me faltó preguntar:
¿cuanto es la impedancia a la entrada del AN0?
si estan usando el 18F4550, debe ser <= 2.5K para obtener una precisión aceptable. ver página 266 de 39632c.pdf
si después de varios ensayos no llegan aún al resultado esperado, no les quedará de otra que empezar desde cero pero montando el código en ensamblador. es el último recurso.
Salu2
Pedro
-
si después de varios ensayos no llegan aún al resultado esperado, no les quedará de otra que empezar desde cero pero montando el código en ensamblador. es el último recurso.
Lo cual también fue dicho mucho antes, incluso hasta pedí el esquemático... 8)
-
5GTT no creo que sea tan complicado.
Yo usé el ccs 3 o 4 veces en mi vida. Es perfectamente posible acoplarlo al MPLAB y en el WatchWindow se puede ver cualquier registro del pic.
También se podría sacar el valor del ADCONx por algún display, usart, o donde sea.
Esto es así para cualquier compilador, no importa que sea basic, pascal o el que sea.
De todas formas, lo que me preocupa es que cómo dije antes, estamos volviendo al principio donde si hubiera habido mejor comunicación no estaríamos 2 semanas después posteando esto que ya fue posteado. Eso es lo más preocupante.
Saludos
Simplemente nunca he acoplado CCS con MPLAB y no se como hacerlo. He estado trasteando a ver si lo conseguia pero no he averiguado nada. Me gustaria saber como se realiza el acoplamiento ya que parece bastante util saber como andan todos los registros del PIC. Eso si, mirando en MPLAB en View-> watch a ver si lo conseguia, he aclarado mis dudas sobre cual ADCONX corresponde con cual FCX:
FC1 es ADCON1
FC2 es ADCON0
FC0 es ADCON2
Segun el ensamblador de antes:
-ADCON1 es 11001110 lo que indica que VDD y VSS son las referencias(bit 4 y 5 a 0) y que todo el puerto A es digital salvo AN0 (bit 3-0 = 1110)
-ADCON0 es 11000011 los bit del 5 al 2 estan a 0, lo que indica que se ha seleccionado el channel 0 (AN0)
-ADCON2 es 0xxxxx101 que indica que esta justificado a la izquierda (bit 7) y que divide la Frec del oscilador entre 16 (bits 2-0 = 101). No se que pasa con los otros bits, se que controlan los Tad pero no deduzco que valor tienen.
Me gustaria que me revisarais estos resultados que obtengo ya que, como digo, no soy experto en emsamblador.
En cuanto a lo de volver al principio, muchas veces es necesario. No debes preocuparte por lo que ya no se puede cambiar, se empezo mal, pero podemos sacar algo util, personalmente voy a empezar un robotito que va a medir las distancias por el conversor AD y va a llevar el 18F4550. Por eso tambien quiero averiguar donde esta el error.
-
Simplemente nunca he acoplado CCS con MPLAB y no se como hacerlo. He estado trasteando a ver si lo conseguia pero no he averiguado nada. Me gustaria saber como se realiza el acoplamiento ya que parece bastante util saber como andan todos los registros del PIC. Eso si, mirando en MPLAB en View-> watch a ver si lo conseguia, he aclarado mis dudas sobre cual ADCONX corresponde con cual FCX:
Cuando yo lo hice, venía con un pequeño programita un .exe que lo agregaba al MPLAB en la sección de TOOLS. De todas formas, creo que es bastante simple hacerlo a mano también.
C2 es ADCON0
FC0 es ADCON2
Segun el ensamblador de antes:
-ADCON1 es 11001110 lo que indica que VDD y VSS son las referencias(bit 4 y 5 a 0) y que todo el puerto A es digital salvo AN0 (bit 3-0 = 1110)
-ADCON0 es 11000011 los bit del 5 al 2 estan a 0, lo que indica que se ha seleccionado el channel 0 (AN0)
-ADCON2 es 0xxxxx101 que indica que esta justificado a la izquierda (bit 7) y que divide la Frec del oscilador entre 16 (bits 2-0 = 101). No se que pasa con los otros bits, se que controlan los Tad pero no deduzco que valor tienen.
Creo que está correcta tu apreciación.
En cuanto a lo de volver al principio, muchas veces es necesario. No debes preocuparte por lo que ya no se puede cambiar, se empezo mal, pero podemos sacar algo util, personalmente voy a empezar un robotito que va a medir las distancias por el conversor AD y va a llevar el 18F4550. Por eso tambien quiero averiguar donde esta el error.
Es necesario cuando uno trabaja 'solo' pero si te dicen "oye, fijate esto" y no te fijas, entonces es que uno ya se pone medio cabeza dura. Ese es el punto que quiero recalcar.
Sin rencores ni buscando culpables, solamente opino que a veces hay que ser menos estructurado y ver con otros ojos los consejos que nos dan.
Saludos
-
A ver si veo a Jose o se pasa por aqui y que pruebe las modificaciones y comente el resultado.
-
5GTT en la web del CCS dan un plugin (http://www.ccsinfo.com/downloads/setup_mplab_plugin.exe) para facilitarte el proceso de "entendimiento" con el MPLAB.
del resto en el menú view buscas la ventana de los SFR allí te van aparecer toditos, y podras ver el estado del registro que buscas.
Salu2
Pedro