MCP41100 sayısal potansiyometre

Başlatan muhittin_kaplan, 25 Kasım 2016, 19:12:09

muhittin_kaplan

Bu Malzeme, SPI arayüzüyle (ben Hardware kullanmadım) çalışan 10-50-100k ohmluk çeşitleri olan verdiğiniz değere göre potansiyometre direnç değerini değiştiren bir IC.

Paket içerisinde iki adet Potansiyometre olanı (14pin) ve tek potansiyometre barındıranı mevcut. (8pin)

Çalışması oldukça basit CE yi 0 a çek, CLK ile birlikte 16 bitlik bilgiyi gönder. Bu 16 bit in ilk 8 bit i konfig. Açıklaması aşağıda.
/**
        Kontrol Byte
    -----------------------------------------------------------------
    | x | x | C1 | C0 |                 | x | x | P0 | P1 |
    -----------------------------------------------------------------
    | x | x | 0  | 0  |None             | x | x |  0 |  0 |Dummy Code
    | x | x | 0  | 1  |Write Data       | x | x |  0 |  1 |Potentiometer 0.
    | x | x | 1  | 0  |Shutdown         | x | x |  1 |  0 |Potentiometer 1.
    | x | x | 1  | 1  |None             | x | x |  1 |  1 |both
    -----------------------------------------------------------------
 */


son 8 bit potansiyometrenin alacağı değer. Ben 100K lık olan ı kullandım her adım (100k /256)  390ohm civarlarına geliyor (tabik tam oturmuyor)

Ben stm 32f103 kullandım, ama heryerde kullanabilirsiniz.

#include "stm32f10x_conf.h"

#define SCL GPIO_Pin_7
#define SIO GPIO_Pin_5
#define CS GPIO_Pin_8
#define PORT GPIOA
#define RCC_PORT RCC_APB2Periph_GPIOA

#define KontrolByte 0x11

void resistorSet(uint8_t Value){
    uint8_t i=0;
    uint16_t ResValue=(KontrolByte<<8) | Value;
    GPIO_ResetBits(PORT,CS);
    for(i=0; i<16; i++)
    {
        GPIO_ResetBits(PORT,SCL);

        if((ResValue<<i)&(0x8000))
        {
            GPIO_SetBits(PORT,SIO);
        }
        else
        {
            GPIO_ResetBits(PORT,SIO);
        }

        GPIO_SetBits(PORT,SCL);
    }
    GPIO_ResetBits(PORT,SCL);
    GPIO_ResetBits(PORT,SIO);
    GPIO_SetBits(PORT,CS);
}

static void init_GPIO(void)
{
    RCC_APB2PeriphClockCmd(RCC_PORT, ENABLE);
   GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = SCL | SIO | CS;//SCLK SIO CS
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(PORT, &GPIO_InitStructure);

}


int main(void)
{
    init_GPIO();
    resistorSet(0x01);
    while(1)
    {

    }
}


datasheet için http://ww1.microchip.com/downloads/en/DeviceDoc/11195c.pdf

tekosis

hocam ben opampın kazancını ayarlamak için kullanıyorum güzel bir entegre.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.