Hola a todos!!!
Estoy tratano de usar un potenciometro digital de Analog Devices, pero desconosco el porque me hace cosas raras.
Inicie leyendo el Datasheet y procedi a realizar una simulacion en Proteus y crei que ya estaba en la bolsa, pero a la hora de grabar mi programa(suelo hacer programas y probar antes de integrar algo en mi programa principal) en mi Pic 16F877A y armar la conexion no responde a como yo lo programe y simule. Tengo una gran duda espero alguien me pueda confirmar ya que este IC se comunica por SPI y acepta 11 bits de entrada los tres MSB son la direccion(pot0-5) y los otros 8 LSB son para determinar en que posicion colocar el Wiper, este IC especifica que primero hay que enviar MSB primeramente y lo que hago es mandar un Byte que lleva la direccion y luego otro byte que indica posicion wiper. anexo el codigo de CCS que estoy empleando.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include <16f877A.h>
#include <stdlib.h>
#fuses HS,NOWDT, NOPROTECT, BROWNOUT, PUT, NOLVP
#use DELAY(CLOCK=8000000)
#use STANDARD_IO (A)
#use STANDARD_IO (B)
#use STANDARD_IO (D)
#use spi( force_hw, bits=8, MODE=3)
#byte PA = 0x05
#byte PB = 0x06
#byte PC = 0x07
#byte PD = 0x08
#byte PE = 0x09
main(){
int x=0;
set_tris_A(0x02);
set_tris_B(0xFF);
set_tris_C(0x00);
set_tris_D(0x00);
set_tris_E(0x00);
setup_spi( spi_master | spi_clk_div_16 );
output_high(PIN_A0);
while(1){
if(input_state(PIN_A1)==1)
{
output_toggle(PIN_A5);
delay_ms(100);
output_toggle(PIN_A5);
delay_ms(100);
output_toggle(PIN_A5);
delay_ms(100);
output_toggle(PIN_A5);
delay_ms(100);
x=x+8;
output_low(PIN_A0);
delay_ms(10);
spi_write(0x00);
spi_write(x);
delay_ms(10);
output_high(PIN_A0);
delay_ms(10);
output_low(PIN_A0);
spi_write(0x01);
spi_write(x);
output_high(PIN_A0);
delay_ms(10);
output_low(PIN_A0);
spi_write(0x02);
spi_write(x);
output_high(PIN_A0);
delay_ms(10);
output_low(PIN_A0);
spi_write(0x03);
spi_write(x);
output_high(PIN_A0);
delay_ms(10);
output_low(PIN_A0);
spi_write(0x04);
spi_write(x);
output_high(PIN_A0);
delay_ms(10);
output_low(PIN_A0);
spi_write(0x05);
spi_write(x);
output_high(PIN_A0);
delay_ms(10);
}
}} //cierre de while y main
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
El proposito de este codigo es ver funcinar a todos los potes.
Saludos