Ana içeriğe git

Haberler

Konu: mcp41XXX (472 Kez okunmuş) önceki konu - sonraki konu

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.
mcp41XXX
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.
Kod: [Seç]

/**
        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.

Kod: [Seç]

#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

/**
        Kontrol Byte (gönderilen ilk 8 bit)
    -----------------------------------------------------------------
    | 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
    -----------------------------------------------------------------
*/


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
  • Son Düzenleme: Kasım 25, 2016, 19:27:51 - muhittin_kaplan

  • ashes
  • [*][*][*][*][*]
Ynt: mcp41XXX
Yanıt #1

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.
Kod: [Seç]

/**
        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.

Kod: [Seç]

#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

/**
        Kontrol Byte (gönderilen ilk 8 bit)
    -----------------------------------------------------------------
    | 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
    -----------------------------------------------------------------
*/


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


LCD parlaklığını dijital olarak ayarlama işleri için bire bir acaba başka neler için kullanılabilir.

Ynt: mcp41XXX
Yanıt #2
opamp kazanç,  dac olarak bile kullanılabilir.