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 :
Układ MCP23008 posiada 3 wejścia adresowe, co umożliwia zaadresowanie do
ośmiu układów na jednej magistrali I2C.
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.
void
MCP23008_write_reg(unsigned char devAddr, unsigned
char regAddr, unsigned char regVal)
{
twistart();
twiwrite(0x40 | (devAddr << 1));
twiwrite(regAddr);
twiwrite(regVal);
twistop();
} |
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;
} |
|