TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: ppyote en 30 de Diciembre de 2010, 12:38:15
-
Estoy retomando viejos proyectos que se me quedaron en el tintero y este es uno de ellos... quiero implementar a un circuito un potenciometro digital de 4 canales via i2c o spi y la verdad es que no tengo ni idea de como trabajar con el ccs y estos cacharritos tan majos...
alguien tiene algun ejemplo de su utilizacion? yo en comunicacion de i2c he trabajado con el ds1037 y con las eeprom 24cXXX pero esto se me escapa de las manos... En cuanto a la comunicacion spi, puedo asignar cualquier pin del pic? Pueden haber conectados varios dispositivos iguales al mismo canal de comunicacion?
tambien pediria un poco de consejo de cual es el mejor potenciometro relacion calidad/precio,vale la pena poner 4 potenciometros en un solo encapsulado o es mejor 4 separados? yo pienso mas en la segunda opcion...
un saludo y feliz navidad
-
Hola.
Yo hice algunas pruebas con el x9c103 .... pero no son i2c, de hecho son mas sencillos de usar, no se si te sirvan ...
Saludos
-
Hola.
Yo hice algunas pruebas con el x9c103 .... pero no son i2c, de hecho son mas sencillos de usar, no se si te sirvan ...
Saludos
gracias MLO_,le echare un vistazo, he visto en el ccs la libreria para el mcp4010 y la verdad es que es muy facil de usar
para enviar el valor set_pot (int data)
para memorizar el valor shutdown_pot ()
pero ahi va mi preguta... puedo conectar varios en los mismos pines del pic? tipo i2c?
-
Yo he usado los MCP4651 y sí se pueden colocar varios en el mismo bus.
-
Yo he usado los MCP4651 y sí se pueden colocar varios en el mismo bus.
como? en el proteus yo puedo controlar un mcp41010 con las siguientes lineas...
void pot_dig(){
cuenta=200; //valor para 3.9V
set_pot(cuenta); //envio el valor
delay_ms(1);
}
como haces para modificar el resto de mcp?
-
Colocando 0 y 1 en los pines A0, A1 y A2 obtienes combinaciones diferentes que te permiten diferenciar los MCPs en el mismo bus: ver página 48 de este datasheet (http://ww1.microchip.com/downloads/en/DeviceDoc/DS-22096a.pdf)
-
Colocando 0 y 1 en los pines A0, A1 y A2 obtienes combinaciones diferentes que te permiten diferenciar los MCPs en el mismo bus: ver página 48 de este datasheet (http://ww1.microchip.com/downloads/en/DeviceDoc/DS-22096a.pdf)
mira que ya me lo decia mi madre... lee mas hijo.... jajajajaja muchas gracias Nocturno.
La verdad es que mire el datasheet pero por encima un poco, por que tampoco sabia lo que haria al final.... muy buena opcion la verdad, voy a ver si el nene me deja acabarlo y os cuelgo el proyecto
aprobechando el post, sabeis de alguna libreria de proteus que tenga un ventilador con salida de encoder?
un saludo y gracias MLO_ y Nocturno.... sois la leche....
-
aprobechando el post, sabeis de alguna libreria de proteus que tenga un ventilador con salida de encoder?
Me autocito para contestarme... en la libreria de Electromechanical hay un motor en DC , se llama MOTOR-ENCODER que puede emular a el comportamiento de un ventilador con encoder...
Por cierto, estaba mirando de implantar al circuito varios mcp41010, que es uno de los potenciometros variables que tiene el proteus, y cual es mi sorpresa?
la gama mcp41XXX no pueden trabajar en el mismo, sin embargo en la gama mcp42XXX si que se puede pero no aparece entre las librerias del proteus.... joer...
mi gozo en un pozo.....
-
Los mcp41XXX si pueden trabajar en un mismo bus, solo que se necesita una linea CS para cada dispositivo( Es comunicación SPI) Los más conveniente para usar varios es alguno que implemente I2C.
Saludos!
-
Los mcp41XXX si pueden trabajar en un mismo bus, solo que se necesita una linea CS para cada dispositivo( Es comunicación SPI) Los más conveniente para usar varios es alguno que implemente I2C.
Saludos!
gracias por la info Suky pero tengo una idea mejor... y en el proteus me funciona de maravilla... esta es la libreria del mcp41010 del ccs
con set_pot(valor); lo que hace es ir a la libreria y ejecutar toda la funcion... pues ahi esta el truco....
set_pot1 (int data) {
BYTE i;
BYTE cmd[2];
cmd[0] = data;
cmd[1] = 0x11;
output_low(SCLK);
output_low(CS);
for(i=1;i<=16;++i) {
output_bit(SI, shift_left(cmd,2,0));
output_high(SCLK);
output_low(SCLK);
}
output_high(CS);
}
shutdown_pot1 () {
BYTE i;
BYTE cmd[2];
cmd[0] = 0;
cmd[1] = 0x21;
output_low(SCLK);
output_low(CS);
for(i=1;i<=16;++i) {
output_bit(SI, shift_left(cmd,2,0));
output_high(SCLK);
output_low(SCLK);
}
output_high(CS);
}
lo que yo hago es cambiar un dos pines del 2º mcp41010 con respecto al primero y edito la libreria cambiando los mismos pines y llamando a la funcion set_pot1(valor) y set_pot2(valor).... asi usare el mismo bus solo que a cada mcp lo modificara el trozo de codigo que este en la correcta posicion
set_pot1 (int data) {
BYTE i;
BYTE cmd[2];
cmd[0] = data;
cmd[1] = 0x11;
output_low(SCLK);
output_low(CS);
for(i=1;i<=16;++i) {
output_bit(SI, shift_left(cmd,2,0));
output_high(SCLK);
output_low(SCLK);
}
output_high(CS);
}
shutdown_pot1 () {
BYTE i;
BYTE cmd[2];
cmd[0] = 0;
cmd[1] = 0x21;
output_low(SCLK);
output_low(CS);
for(i=1;i<=16;++i) {
output_bit(SI, shift_left(cmd,2,0));
output_high(SCLK);
output_low(SCLK);
}
output_high(CS);
}
set_pot2 (int data) {
BYTE i;
BYTE cmd[2];
cmd[0] = data;
cmd[1] = 0x11;
output_low(SCLK);
output_low(SI);
for(i=1;i<=16;++i) {
output_bit(CS, shift_left(cmd,2,0));
output_high(SCLK);
output_low(SCLK);
}
output_high(SI);
}
shutdown_pot2 () {
BYTE i;
BYTE cmd[2];
cmd[0] = 0;
cmd[1] = 0x21;
output_low(SCLK);
output_low(SI);
for(i=1;i<=16;++i) {
output_bit(CS, shift_left(cmd,2,0));
output_high(SCLK);
output_low(SCLK);
}
output_high(SI);
}
-
No entendí. Lo único que hay que modificar es entrar con un parámetro más a la función que seleccione sobre que pin CS actuar y listo ;-)
Saludos!
-
No entendí. Lo único que hay que modificar es entrar con un parámetro más a la función que seleccione sobre que pin CS actuar y listo ;-)
Saludos!
Lo que pasa, es la falta de pines en el circuito, por eso no puedo poner un CS a cada mcp, y habia pensado en invertir el bus.... y asi controlar de manera correcta e inversa las mcp...
SI -> CS
CS-> SI
SCLK -> SCLK
no habia un ejemplo con un lcd 2x16 en solo 4 pines? me suena algo...
un saludo
-
Ya esta todo solucionado... al final he usado los 4 MCP41010 que trae el proteus con solo 5 pines.... vale la pena ver el ciruito os lo voy a colgar y me dais vuestra opinion y consejo
el circuito es facil de manejar y solo con un pulsador.... si lo pulsas una vez, cambian los valores de RPM y RPS de cada ventilador, si lo que quieres es darle caña al ventilador... mantienes pulsado el pulsador en el ventilador que deseas ajustar la velocidad, cuando este el valor que uno desee pues se suelta el pulsador y wala...
frontal para controlar 4 ventiladores del pc con un lcd y un pulsador 4 MCP41010 y un 16f628A...
os cuelgo un video...
un saludo a todos y muchas gracias a MLO_ ,Nocturno y a Suky..
-
Estoy jugueteando con un MCP41, y en CCS viene una libreria. La función "set_pot()", está claro su funcionamiento, sirve para posicionar el eje. Pero ¿Para que sirve la otra función "shutdown_pot ()"?
Las he usado antes y despues de posicionar el eje, y no observo ninguna diferencia.
Saludos.
-
Estoy jugueteando con un MCP41, y en CCS viene una libreria. La función "set_pot()", está claro su funcionamiento, sirve para posicionar el eje. Pero ¿Para que sirve la otra función "shutdown_pot ()"?
Las he usado antes y despues de posicionar el eje, y no observo ninguna diferencia.
Saludos.
pues facil, se guarda el valor en una eeprom interna y en el momento del encendido, el mcp retorna el valor guardado la verdad es que es una buena opcion para ahorrarte lineas de codigo...
un saludo
-
pues facil, se guarda el valor en una eeprom interna y en el momento del encendido, el mcp retorna el valor guardado la verdad es que es una buena opcion para ahorrarte lineas de codigo...
un saludo
Pues por las pruebas que hice, y lo que pone en el dataseet, creo que lo que hace es desconectar el pin del medio del potencihometro. En ningún momento guarda la posición. Cuando lo arranco de nuevo se situa siempre en el medio.
Saludos.
-
jejejjeje XD me cole... demasiado rapido conteste... si es cierto, pone al mcp en ahorro cortocircuitando las salidas B y W
lo siento un saludo
-
jejejjeje XD me cole... demasiado rapido conteste... si es cierto, pone al mcp en ahorro cortocircuitando las salidas B y W
lo siento un saludo
Tranquilo, yo me precipité en preguntar.
Saludos.
-
:shock: joder pues este tema se me paso!!!
y estoy buscando algo parecido, si no te importa Amigo ppyote de usar tu codigo para yo experimentar, me inmagino que usa Software PWM para mover los motores, en este caso quiero jugar con LED, pero pero, aqui viene mi pregunta, ¿ Se puede o podria usar mejor pulsadores ARRIBA/ABAJO y no usar potenciometro mecanico? voy a buscar Info del MCP41010 ya que el X9C103 es muy caro me sale a 4.90€ y este a 0.92€. lo que no se tampoco si el MCP4151 vale tambien , me bajare las hojas de datos de los dos.
Saludos
-
hola amigo stk500
si no te importa Amigo ppyote de usar tu codigo para yo experimenta
ni mucho menos.... es todo un placer que te sirva de ayuda y apoyo...
los mcp41010 son potenciometros digitales, el circuito no utiliza el PWM para mover los motores.... lo que se hace el pic es enviar un valor de 8bits al mcp,via spi, y este modifica el valor del potenciometro interno dependiendo del valor recibido....
ejemplo, el pic envia el valor 0x0F al mcp... osea 127.... posiciona el valor del potenciometro al 50%
un extremo del potenciometro esta conectado a VCC=5v el otro extremo a GND=0v lo que conseguiremos con esto un divisor de tension een el cursor del medio.... asi en el ejemplo de antes tendremos un valor en el cursor del potenciometro de 2,5V
si el pic envia otro valor.... ejemplo..0xC0 posicionara el potenciometro en 25% 75% sacando un voltage de salida de 1,25V
despues en la salida solo faltara el circuito de potencia
yo use los mcp por que en ccs hay una libreria la cual facilita el uso de los potenciometros digitales mcp41010, de momento no he construido el circuito ya que estoy pensando en usar MAX5387 que van por i2c
-
Muchas gracias ppyote!
todavia no he tenido tiempo de leer los datasheet, pero ya lo hare, por lo que a mi me interesaria es usar pulsadores.
voy a ver como me lo hago, el MAX5387 me iria estupendo tambien, pero habia que saber el precio.
Saludos
-
Epale STK500!
Aqui te adjunto un potenciometro digital del que andas buscando espero te se util :mrgreen: