Autor Tema: Problemas con Potenciometro digital AD5206  (Leído 1550 veces)

0 Usuarios y 2 Visitantes están viendo este tema.

Desconectado asantos

  • PIC10
  • *
  • Mensajes: 4
Problemas con Potenciometro digital AD5206
« en: 07 de Noviembre de 2011, 14:02:36 »

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


 

anything