Obtendremos varios valores de resistencia mediante el potenciómetro digital MCP41010. Este integrado estará conectado al PIC por medio del bus serie SPI. Veremos los valores de resistencia en un LCD alfanumérico 16x2.
Descargar documentos.
Características:
Potenciómetro digital MCP41010:
Es un potenciómetro de 10K ajustable integrado. Al ser de 8bits se puede ajustar en 256 posiciones controlables por nuestro micro.
El potenciómetro consta de una EEPROM interna que almacena la última posición enviada y previene de desconexiones.
Este integrado solo se conecta a los pines CS, SDO y CLK del bus SPI.
Las salidas PA0, PW0 Y PB0 no podrán sobrepasar los 5v del integrado.
Nos ayudaremos de la librería mcp41010.c del CCSC para programar el PIC. También utilizaremos nuestra librería del LCD.
Diseño del esquemático:
- El microcontrolador utilizado será el PIC18F4550, con un reloj externo de 20Mz y un pulsador con circuito R-C a modo de reset:
- Utilizaremos el potenciómetro digital MCP41010 y un indicador de resistencia. Este integrado irá conectado a los pines SCK, SDO y CS del bus SPI de nuestro micro.
- Mostraremos el valor resistivo del potenciómetro en un LCD alfanumérico 16x2, tendrá un potenciómetro para modificar el contraste y un condensador de desacoplo.
- Utilizaremos el depurador SPI para depurar el programa.
Código:
////////////////////////////////////////////////////////////////////////////////////
// AUTOR: Daniel de Cos Noviembre/2011 //
////////////////////////////////////////////////////////////////////////////////////
// PROGRAMA: Potenciómetro VERSIÓN: 1.0
// DISPOSITIVO: PIC 18F4550 COMPILADOR: CCS vs4.023
// Entorno IDE: MPLAB ID v8.56 SIMULADOR: Proteus 7.7 sp2
// TARJETA DE APLICACIÓN: interface_2011 DEBUGGER: ICD3
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
// CABECERA ////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
#include <C:\H\18F4550.h>
//#FUSES INTHS //reloj interno
#FUSES HS //reloj de alta velocidad
#FUSES MCLR //Master clear pin enable
#use delay(clock=20000000) //20MHz
//#use delay(internal=1Mhz) // Selecciona la velocidad del oscilador interno
#include <mcp41010.c>
#include <LCD_flexible.c>
////////////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
float dato;
////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
void main()
{
//setup_spi(spi_master | spi_l_to_h | spi_clk_div_16); //Configuracion SPI
lcd_init();
lcd_putc("POT. MCP41010");
//7.5K
set_pot(192);
lcd_gotoxy(1, 2);
dato= (192* 10000.0)/256.0;
printf(lcd_putc, "%f Ohm", dato);
delay_ms(1000);
//5K
set_pot(128);
lcd_gotoxy(1, 2);
dato= (128* 10000.0)/256.0;
printf(lcd_putc, "%f Ohm", dato);
delay_ms(1000);
//2.5K
set_pot(64);
lcd_gotoxy(1, 2);
dato= (64* 10000.0)/256.0;
printf(lcd_putc, "%f Ohm", dato);
delay_ms(1000);
//1.25K
set_pot(32);
lcd_gotoxy(1, 2);
dato= (32* 10000.0)/256.0;
printf(lcd_putc, "%f Ohm", dato);
delay_ms(1000);
//625R
set_pot(16);
lcd_gotoxy(1, 2);
dato= (16* 10000.0)/256.0;
printf(lcd_putc, "%f Ohm", dato);
delay_ms(1000);
//312.5R
set_pot(8);
lcd_gotoxy(1, 2);
dato= (8* 10000.0)/256.0;
printf(lcd_putc, "%f Ohm", dato);
delay_ms(1000);
while(1);
}
Simulación:
El valor resistivo que nos da en la simulación no coincide con el de la realidad.
Comprobación programa:
Gracias Daniel.
ResponderEliminarPuedo usar el MCP41xxx sin microcontrolador pero con pulsadores up y down ? Me puedes ayudar con el esquemático ? me puedes enviar a julenrique55 de yahoo.com ?
como puedo controlar este potenciometro desde una gui en qt4?
ResponderEliminarpara poder compilar necesito las librerias podria subir de nuevo los archivos
ResponderEliminar