radzio.dxp.pl

MCP23008
Układ MCP23008 jest 8-bitowym ekspanderem portów z interfejsem I2C produkowanym przez firmę Microchip. W stosunku do najpopularniejszego ekspandera PCF8574 firmy Philips układ ten cechuje się znacznie większymi możliwościami. Rozkład wyprowadzeń układu w obudowie DIP-18 przedstawia poniższy rysunek :

MCP23008

Układ MCP23008 posiada 3 wejścia adresowe, co umożliwia zaadresowanie do ośmiu układów na jednej magistrali I2C.

MCP23008

Układ zawiera 11 rejestrów konfigurujących pracę układu :

  • IODIR (adres 0)
    Rejestr wyboru kierunku pracy wyprowadzeń GP0-GP7. Rejestr zawiera następujące bity :
    IO7:IO0
    1 - wyprowadzenie jest skonfigurowane jako wejściowe
    0 - wyprowadzenie jest skonfigurowane jako wyjściowe
  • IPOL (adres 1)
    Rejestr konfigurujący polaryzację sygnałów wejściowych. Rejestr zawiera następujące bity :
    IP7:IP0
    1 - Bit rejestru GPIO zawiera zanegowany stan wyprowadzenia wejściowego.
    0 - Bit rejestru GPIO zawiera stan wyprowadzenia wejściowego.
  • GPINTEN (adres 2)
    Rejestr zezwolenia na przerwanie od zmiany stanu wybranego wyprowadzenia wejściowego. Rejestr zawiera następujące bity:
    GPINT7:GPINT0
    1 - zezwolenie na przerwanie od zmiany stanu wybranego wyprowadzenia.
    0 - brak zezwolenia na przerwanie od zmiany stanu wybranego wyprowadzenia
  • DEFVAL (adres 3)
    Rejestr domyślnej wartości wyprowadzenia. Jeśli stan wyprowadzenia jest przeciwny do stanu odpowiadającego mu bitu w tym rejestrze następuje przerwanie.
  • INTCON (adres 4)
    Rejestr ustalający sposób porównania stanu wyprowadzenia. Jeśli bit w rejestrze jest w stanie wysokim, stan odpowiadającego mu wyprowadzenia jest porównywany z zanegowanym stanem bitu rejestru DEFVAL. Jeśli bit w rejestrze INTCON jest w stanie niskim, stan odpowiadającego mu wyprowadzenia jest porównywany z poprzednim stanem tego wyprowadzenia.
  • IOCON (adres 5)
    Rejestr zawiera kilka bitów konfigurujących pracę układu :
    • bit 5 - SEQOP
      1 - dostęp w trybie sekwencyjnym wyłączony, wskaźnik adresowy nie jest inkrementowany
      0 - dostęp w trybie sekwencyjnym włączony, wskaźnik adresu jest inkrementowany
    • bit 4 - DISSLW
      1 - funkcja Slew Rate wyłączona
      0 - funkcja Slew Rate włączona
    • bit 2 - ODR
      1 - wyprowadzenie INT z otwartym drenem (wartość bitu INTPOL bez znaczenia)
      0 - wyprowadzenie INT przeciwsobne (polaryzacja ustalona bitem INTPOL)
    • bit 1 - INTPOL
      1 - aktywny stan wysoki
      0 - aktywny stan niski
  • GPPU (adres 6)
    Rejestr konfiguracji rezystorów podciągających na liniach GP7:GP0. Zawiera następujące bity :
    PU7:PU0
    1 - rezystory podciągające włączone
    0 - rezystory podciągające wyłączone
  • INTF (adres 7)
    Rejestr flag przerwań
  • INTCAP (adres 8)
    Rejestr przechowujący stan wyprowadzeń w momencie wystąpienia przerwania
  • GPIO (adres 9)
    Rejestr stanu wyprowadzeń GP7:GP0
  • OLAT (adres 10)
    Rejestr zatrzasków wyjściowych

Komunikacja mikrokontrolera z układem ekspandera

Procedury przedstawione na tej stronie korzystają ze sprzętowego układu TWI mikrokontrolerów Atmel AVR. Do projektu należy dołączyć pliki TWI.c i TWI.h znajdujące się na stronie TWI.

  • Procedura zapisu rejestru układu MCP23008

MCP23008

void MCP23008_write_reg(unsigned char devAddr, unsigned char regAddr, unsigned char regVal)
{
twistart();
twiwrite(0x40 | (devAddr << 1));
twiwrite(regAddr);
twiwrite(regVal);
twistop();
}
  • Procedura odczytu rejestru układu MCP23008

MCP23008

unsigned char MCP23008_read_reg(unsigned char devAddr, unsigned char regAddr)
{
unsigned char val;
twistart();
twiwrite(0x40 | (devAddr << 1));
twiwrite(regAddr);
twistart();
twiwrite(0x40 | (devAddr << 1) | 1);
val = twiread(NOACK);
twistop();
return val;
}

 

 
(c) Radosław Kwiecień