Hola a todos, les comento: tengo un potenciometro digital de microchip, es el mcp 4131
y la verdad es que no se como ocuparlo, nunca e utilizado comunicacion spi asi que improvise una comunicacion pero no funciona bien, el codiigo que tengo es:
#include <16f628a.h> //pic a utilizar
#FUSES NOWDT //No Watch Dog Timer
//#FUSES HS //oscilador de tipo High Speed
#fuses INTRC_IO
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOMCLR //Master Clear pin disabled
#FUSES NOLVP //No low voltage prgming, B3(PIC16)
#FUSES NOCPD //No EE protection
//#use delay(clock=20000000)
#use delay(INTERNAL=4M)
#use standard_io(a)
#use standard_io(b)
#use rs232(baud=9600, xmit=PIN_B2,rcv=PIN_B1)
char received;
void clock(void);
void v_arriba(void);
void v_abajo(void);
/////pin B4 clock
//////pin B5 sdo
#int_rda
void rda_isr()
{
disable_interrupts(int_rda);
received=getc();
putc(received);
enable_interrupts(int_rda);
}
void main(void)
{
enable_interrupts(global);
enable_interrupts(int_rda);
while(true)
{
if(received=='w')
{
v_arriba();
received=' ';
}
if(received=='s')
{
v_abajo();
received=' ';
}
}
}
void clock(void)
{
output_high(PIN_B4);
#asm
nop
nop
#endasm
output_low(PIN_B4);
#asm
nop
nop
#endasm
}
void v_abajo(void) //envia a mano un 0000 0100 funcionaa
{
output_low(PIN_B5);
clock();
clock();
clock();
clock();
clock();
output_high(PIN_B5);
clock();
output_low(PIN_B5);
clock();
clock();
}
uso un 16f648 sin cristal por ahora. la idea de este codigo es que con una w aumente el valor del pot. y con una s lo disminuya esto enviado desde el puerto serie, lo hice asi solo porque quiero saber usar este potenciometro.
segun el datasheet tengo que enviar un dato para incrementar el pot. y otro para decrementarlo.
el cto tengo las lineas de clock y sdo conectadas directas al pic.
aveces funciona la funcion de bajar pero lo hace de manera demaciado brusca.
en resumen si alguen a usado este potenciometro o al menos a usado comunicacion spi, agradeceria su ayuda.