- Created by Unknown User (terjero), last modified by Unknown User (halsaune) on 29.07.2015
You are viewing an old version of this page. View the current version.
Compare with Current View Page History
« Previous Version 13 Next »
Hvis du har for få inn-/ utganger kan du bruke en port expander. MCP23008 er en integrert krets som gir deg 8 ekstra inn-/ utganger ved å bruke bare to pinner på Arduino. Den kommuniserer via I²C. Denne kretsen har 3 adressepinner som må kobles enten høy (5V) eller lav (jord) for å bestemme adressen på kretsen. Det vil si at du kan koble opp 8 kretser på den samme bussen, og det vil gi 64 ekstra inn-/ utganger. Det finnes også en 16-ports versjon , MCP23017, som gjør at du maksimalt kan få 128 inn-/ utganger på I²C-bussen på en Arduino Uno.
Forklaring på pinnene
SCL: Klokkelinje I²C, kobles til A5 på Arduino Uno.
SDA: Datalinje I²C, kobles til A4 på Arduino Uno.
RESET: Denne kobles til +5V gjennom en 10kΩ motstand.
VDD: +5V.
VSS: Jord.
GP0..GP7: General purpose IO. Disse kan konfigureres som inn- eller utganger. De har også intern pullup som Arduino.
A0..A2: Adressepinner (se tabell under).
INT: Interrupt. Denne kan kobles til en interruptlinje på Arduino (D2 eller D3 på Uno). Den gir et signal når det er endring på en inngang.
NC: No connection.
Adressering:
For å kommunisere via I²C må Arduino vite adressen til kretsen den skal kommunisere med. På disse kretsene er det 3 adressepinner, A0, A1 og A2 som kobles enten høy eller lav etter følgende tabell:
A2 | A1 | A0 | Adresse |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 |
0 | 1 | 0 | 2 |
0 | 1 | 1 | 3 |
1 | 0 | 0 | 4 |
1 | 0 | 1 | 5 |
1 | 1 | 0 | 6 |
1 | 1 | 1 | 7 |
Eksempler fra biblioteket
Fra Adafruit biblioteket (som er inkludert i bibliotekene vi har lagt ut) er det to eksempler på bruk.
PLabExamples/examples/16.PortExpanderMCP23008/button - Et enkelt eksempel som leser en knapp og lyser en LED basert på hva den leser.
PLabExamples/examples/16.PortExpanderMCP23008/toggle - Et enkelt eksempel som blinker en utgang på port expanderen.
Eksempel med en inngang og en utgang
Her er det koblet inn en trykkbryter på GP0, og en LED på GP3. Alle adressepinnene er koblet til jord, altså I²C-adressen er 0.
#include <Wire.h> #include <Adafruit_MCP23008.h> const int addr = 0; Adafruit_MCP23008 mcp; void setup(){ mcp.begin(addr); mcp.pinMode(0, INPUT); mcp.pinMode(3, OUTPUT); } void loop(){ if(mcp.digitalRead(0)) mcp.digitalWrite(3, HIGH); else mcp.digitalWrite(3, LOW); }
GitHub: Examples/PortExpander/PortExpander.ino
Port expander og Zumo
Denne port expanderen bruker i2c for kommunikasjon, og kan derfor kobles sammen med Zumo roboten. Vi har lagd et eksempel i to varianter som gjør akkurat dette.
PLabExamples/examples/14.Zumo/SensorToPortExpanderLEDs.
PLabExamples/examples/14.Zumo/SensorToPortExpanderLEDsAdvanced.
Her bruker vi kun sensorene fra Zumoen. Vi leser verdiene, og får en LED per sensor til å lyse med intensistet basert på hva den tilsvarende sensoren leser. For å øke hastigheten på i2c kommunikasjonen, skriver vi til alle portene på port expanderen samtidig.
I den første varianten av eksempelet tvinger vi alle 8 portene til å være utganger, mens i den andre varianten kan du selv bestemme antallet utganger, hvilke som skal brukes og i hvilken rekkefølge utgangene skal være definert.
Begge eksemplene har lagt skrivingen i funksjoner som kan klippes ut og limes inn i andre prosjekter.
Oppkobling:
- No labels