Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: jose2312 en 07 de Febrero de 2016, 16:10:33
Título: Duda con potenciometro Ds1804
Publicado por: jose2312 en 07 de Febrero de 2016, 16:10:33
Buenas tardes amigos
soy nuevo en el ambito de la programacion de c18,y ando con un proyecto y medio entiendo el ds1804 pero me gustara saber si alguien me puede ayudar con una guia para ver como enviarles los pulsos de un pic al potenciometro?
Título: Re:Duda con potenciometro Ds1804
Publicado por: KILLERJC en 07 de Febrero de 2016, 17:07:26
Hola Jose y bienvenido.
Creo que deberias utilizar XC8 y no C18. Junto con MPLAB X. Aunque sea la version FREE es suficiente para la mayoria de las personas. C18 es obsoleto y se cambio por XC8 ya hace un tiempo. Creo que ademas XC8 ya cumple con los estandares de C99.
Con respecto al ds1804 es bastante simple de manejar.
Tenes 3 pines que debes conectar a tu PIC.
El primero es el CS , ese pin cuando tiene un 0 ( 0V ) hace que el potenciometro pueda recibir los comandos a traves de sus otros pines. Es interesante por que por ahi queres poner un pin usado en el potenciometro en otro estado y para que el chip no te lo tome, pones el CS en 1.
El otro pin es UP/DOWN , U/D(negado) , es decir con esto controlas la direccion del potenciometro. Si tenes un 1 ( 3.3V o 5V segun tu PIC) quiere decir que el punto central del potenciometro (Wiper) va a subir o que es lo mismo que se va a acercar mas al terminal H, o si aun no te queda claro. la resistencia entre H y W va a ser menor y la resistencia entre W y L va a ser mayor. El mismo caso ocurre cuando tenes un 0, nomas que esta ves el punto central "baja" y ocurre lo contrario a lo expuesto arriba.
Y por ultimo tenes un pin al cual le das pulsos, que se llama INC(negado), Cuando en este PIN tenes un 1 ( 5V) y luego lo pones a 0 ( 0V ) el Wiper o punto central se mueve 1 paso, se va a mover en la direccion dada por el pin U/D como dijimos antes.
Supongamos un ejemplo rapido. Que el potenciometro tenga 8 pasos y comienze en la posicion 0.
pongo CS a 0, para que el chip tome los valores Pongo U/D a 1, asi va para arriba. Pongo un 1 en INC y luego pongo 0, esto lo repito 4 veces. pongo CS a 1 , para que cualquier error no me cambie el valor
Ahora el potenciometro esta en la posicion 4. Si quisiera ir a la posicion 2, estando en la posicion 4 tengo que hacer:
pongo CS a 0. pongo U/D a 0, para bajar. Pongo un 1 en INC y luego pongo 0, esto lo repito 2 veces. pongo CS a 1.
Tengo ahora el potenciometro en la posicion 2.
Esto es un ejemplo, ya que el potenciometro DS1804 posee 100 posiciones y no 8 como en mi ejemplo. Pero la aplicacion o como debe hacerse es igual.
Título: Re:Duda con potenciometro Ds1804
Publicado por: jose2312 en 10 de Febrero de 2016, 16:49:55
Muchas gracias por tu ayuda KILLERJC,me queda claro el uso del DS1804 y por la sugerencia de XC8,pero por si acaso no tienes un programa para guiarme un poco respecto al control del Ds1804 con un pic? te lo agradeciria mucho :)
Título: Re:Duda con potenciometro Ds1804
Publicado por: KILLERJC en 10 de Febrero de 2016, 18:38:46
Muchas gracias por tu ayuda KILLERJC,me queda claro el uso del DS1804 y por la sugerencia de XC8,pero por si acaso no tienes un programa para guiarme un poco respecto al control del Ds1804 con un pic? te lo agradeciria mucho :)
Es que tiene una relacion directa con lo que te dije, supongamos que creamos una funcion para aumentar el numero de posicion.
Código: C
void AumentarPosicion(unsignedchar x)
{
if(x==0)
{
return;// Proteccion por si se llama con 0
}
PORTBbits.RB0=0;// pongo CS a 0, para que el chip tome los valores
PORTBbits.RB1=1;// Pongo U/D a 1, asi va para arriba.
for(;x!=0;x--)
{
PORTBbits.RB2=1;// PORTBPongo un 1 en INC y luego pongo 0, repito x veces
PORTBbits.RB2=0;
}
PORTBbits.RB0=1;// pongo CS a 1 , para que cualquier error no me cambie el valor
}
Donde RB0 es CS, RB1 es U/D, RB2 es INC.
2 cosas nada mas. Aca yo no tuve en cuenta los tiempos... para eso vas a tener que ir al datasheet y ver el diagrama de tiempo para agregarle los delays necesarios en caso de necesitarlo. Y como ves es lo mismo que te escribi antes.
Respecto a los tiempos la tabla es la de la pagina 5 y mas abajo tenes el dibujito https://datasheets.maximintegrated.com/en/ds/DS1804.pdf
Casi todo esta en los nanosegundos, asi que no vas a tener problemas a 20Mhz. Lo que si hay que agregar es un delay una ves que se pone CS en 1 hasta que el Wiper se actualize de unos 10ms. Ademas al comienzo del programa tuyo esperar unos 50ms para que el potenciometro entre en funcionamiento, pagina 4, Power-Up Time
Cumpliendo con eso estaria..
Título: Re:Duda con potenciometro Ds1804
Publicado por: jose2312 en 11 de Febrero de 2016, 16:36:51
Muchas gracias por tu ayuda,muy buena explicacion :) ((:-))