Autor Tema: Duda con potenciometro Ds1804  (Leído 2488 veces)

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

Desconectado jose2312

  • PIC10
  • *
  • Mensajes: 11
Duda con potenciometro Ds1804
« 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?

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda con potenciometro Ds1804
« Respuesta #1 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.

Desconectado jose2312

  • PIC10
  • *
  • Mensajes: 11
Re:Duda con potenciometro Ds1804
« Respuesta #2 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  :)

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Duda con potenciometro Ds1804
« Respuesta #3 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
  1. void AumentarPosicion(unsigned char x)
  2. {
  3.         if(x==0)
  4.         {
  5.                 return;         // Proteccion por si se llama con 0
  6.         }
  7.         PORTBbits.RB0 = 0;      // pongo CS a 0,  para que el chip tome los valores
  8.         PORTBbits.RB1 = 1;      // Pongo U/D a 1, asi va para arriba.
  9.         for(;x!=0;x--)
  10.         {
  11.                 PORTBbits.RB2=1;  // PORTBPongo un 1 en INC y luego pongo 0, repito x veces
  12.                 PORTBbits.RB2=0;
  13.         }
  14.         PORTBbits.RB0 = 1;      // pongo CS a 1 , para que cualquier error no me cambie el valor
  15. }

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..

Desconectado jose2312

  • PIC10
  • *
  • Mensajes: 11
Re:Duda con potenciometro Ds1804
« Respuesta #4 en: 11 de Febrero de 2016, 16:36:51 »
Muchas gracias por tu ayuda,muy buena explicacion  :) ((:-))


 

anything