TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: discobolo en 30 de Mayo de 2011, 12:52:47

Título: Programar un MCP6S22 con el pic 18F4550
Publicado por: discobolo en 30 de Mayo de 2011, 12:52:47
Soy nuevo en esto, y no se si he escogido bien el lugar donde colgar le tema, pero como ya he dicho soy novato jeje, asi todo...pido disculpas de antemano.
Mi situación es la isguiente:
Se me a pedido programar un amplificador(MCP6S22) de ganancia programable(de 1v/1v - 1v/32v) con el pic18f4550 mediante el bus SPI.
El problema está en que el componente no tiene librerias con las que pueda apoyar la programación, y configurando el dispositivo metiendo bit a bit tal y como dice en el libro de características lo único que he conseguido es cambiar el canal de entrada. La ganancia ni se inmuta, se mantiene fija en ganancia 1, lo que significa que que no se termina de configurar ya que esa configuración es la que dispone el dispotivo por defecto.

Si alguién me pudiese ayudar le estaría increiblemente agradecido.

Código: [Seleccionar]
#include <18F4550.h>
#fuses INTHS            //Selecciona el oscilador interno
#use delay(internal=8Mhz)   // Selecciona la velocidad del oscilador interno
#include <LCD.c>

////////////////////////////////////////////////////////////////////////////////////
// VARIABLES GLOBALES //////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
// FUNCIONES ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////
// PRINCIPAL ///////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
void main()
{
setup_spi(spi_MASTER | spi_L_to_H | spi_clk_div_16| SPI_XMIT_L_TO_H);

WHILE(1)
{
if(input(PIN_A1))                          
      {
        output_low(PIN_A0);//Pongo a nivel vajo el pin RA0 para comenzar la comunicación con el dispositivo
        spi_write(0b01000000);//Escribo el registro de escritura en el dispositivo
        delay_ms(10);
        spi_write(0b00000111);//Configuro la ganancia del dispositivo
        delay_ms(10);
        output_high(PIN_A0);//Pongo a nivel alto el pin RA0 para dejar configurado el dispositivo
      }
if(input(PIN_A2))                          
      {
        output_low(PIN_A0);//Pongo a nivel vajo el pin RA0 para comenzar la comunicación con el dispositivo
        spi_write(0b01000001);//Escribo el registro de escritura en el dispositivo
        delay_ms(10);
        spi_write(0b00000111);//Configuro la ganancia del dispositivo
        delay_ms(10);
        output_high(PIN_A0); //Pongo a nivel alto el pin RA0 para dejar configurado el dispositivo        
      }
}
}


Dejo una captura de pantalla del esquemático que he realizado en proteus.

(http://s3.subirimagenes.com:81/otros/previo/thump_6471586esquematico.jpg)

Para simular uso el entorno de proteus 7.7sp2
Gracias por decirme como puedo subir archivos, dejo un rar con lo que tengo para que lo puedan analizar mejor.
Título: Re: Programar un MCP6S22 con el pic 18F4550
Publicado por: AngelGris en 30 de Mayo de 2011, 14:22:30
  Para subir archivos tienes que ir a "Opcones adicionales", que está debajo del cuadro de escritura de mensaje
Título: Re: Programar un MCP6S22 con el pic 18F4550
Publicado por: Suky en 30 de Mayo de 2011, 15:41:59
Hay que configurar el puerto analógico, ya que utilizas los pines del puerto A y por default son analógicos.


Saludos!
Título: Re: Programar un MCP6S22 con el pic 18F4550
Publicado por: AngelGris en 30 de Mayo de 2011, 20:49:57
  Es verdad, no me había percatado de lo que indica Suky. Los pines A1 y A2 los estás utilizando como entradas digitales, pero por default (luego de poweronreset) quedan configurados como entradas analógicas y por ello no te va a tomar los pulsadores de entrada.
Título: Re: Programar un MCP6S22 con el pic 18F4550
Publicado por: AngelGris en 30 de Mayo de 2011, 23:26:25
  Acabo de probar manejarlo (al MCP) con un 16f876A y la simulación falla exactamente en lo mismo. Me deja seleccionar la entrada, pero la ganancia no la cambia, tampoco me deja ponerlo en modo shutdown. Al comprobar la actividad del bus con el "SPI debugge", supuestamente están bien los datos enviados... Tal vez sea un bug de proteus que no simula bien dicho dispositivo.
Título: Re: Programar un MCP6S22 con el pic 18F4550
Publicado por: discobolo en 31 de Mayo de 2011, 05:14:50
Lo primero muchas gracias por contestar tan rápido.
En cuanto a los de que están configurados como análogicos, gracias por el aporte,pero es un simple programilla que hice para comprovar si podía cambiar de canal facilmente...y si que pude. Lo que verdaderamente me interesa es porque se puede configurar el cambio de canal y no la ganancia o el modo de trabajo.
Si fuese cierto lo de que es un error del propio proteus, necesitaría saber el graco de certeza de eso.
Pero asi todo espero que si que se pueda realizar esa configuración y que pueda ser simulado con proteus, no se, sería una pena rendirse...

Gracias por la ayuda a todos.

Ps: he subido una imagen del esquemático y un rar con lo que tengo.
Título: Re: Programar un MCP6S22 con el pic 18F4550
Publicado por: AngelGris en 31 de Mayo de 2011, 09:27:07
  Podrías colocar un PIC y un MCP en un protoboard o placa experimental y probar si funciona. El proteus tiene varios fallos, así que no me extrañaría que esto sea un bug.