Raspberry Pi Port Expander (2 / 3 steg)

Steg 2: Sambandet mellan hård - och mjukvara



För att prata via SPI vi setup hallon för att tillåta SPI kommunikation. Det enklaste sättet att göra detta är att SPI via raspi -config.

Hur pratar vi till MCP23S17? Via SPI, men vilken dos det betyda.

SPI är en master-slave kommunikationsbuss. Innebär att bussen, vi kan ansluta så mycket enheter som vi vill ha, beroende på möjligheterna våra marker och hur mycket chipselect vår styrelse har. Med hallon som fick 2 chipselect kan vi använda 8 marker två gånger. För mer information Läs gärna denna artikel.

Allt som allt, måste vi skicka binär kod att kommunicera med våra enheter. Den första byten vi måste skicka är alltid vår enhet opcode som innehåller maskinvaruadressen för vår enhet (0b0100) samt adressen till det chip som vi vill tillgång (0b000 och 0b001) och lite SKRIVSKYDD (0b00/0b01). För att göra en byte ut det här, måste vi använda en bitvis eller operatör.

Vi kan göra detta med denna kod i javascript:

var hard_addr = 0b01000000; Vi läggs 4 nollor för att undvika en bit SKIFT
var chip_addr = 0b0010; 0b0000 vi också bifogas ett noll till undvika en bit SKIFT
var read_code = 0b01; 0b00

A = hard_addr, B = chip_addr, C = read_code
AAAABBBC
var device_opcode = hard_addr | chip_addr | read_code; 0b01000011

Den andra byte är kommandot vi vill slaven att göra och den tredje byte är det värde vi vill skriva, om vi vill skriva. Om vi vill läsa skriva vi bara 0x00 för detta ytterligare byte innebär en annan fästing och tid för slaven att köra och svara. Det finns massor av olika kommandon du kan också se i denna pdf. Eftersom chipet kan hantera in- och utdata på egen hand, tilldela vi bara alla som utdata.

För kommunikation använder jag mcp23s17 biblioteket för nodejs. Här är ett kort exempel att ansluta, läsa och skriva data:

ladda biblioteket
MCPLib = require('mcp23s17');

Skapa ny instans bredden enhet och chip_adress
behövs standardinställningarna anges (fler alternativ följer)
mcp_1 = ny MCPLib.MCP23S17 ('/ dev/spidev0.0', 0);

ansluta decive
mcp_1.connect();

var status = 0b10000000;
setInterval (function() {
om (status == 0b00000000) {
status = 0b10000000;
} annat {
status = 0b00000000;
}
mcp_1.Write 'B', status.
mcp_1.Read ("B", funktion (s) {
Console.log (s);
});
}, 500);

Se Steg
Relaterade Ämnen

LinkIt ett – MCP23017 I2C Port Expander

MCP23017 chip är indata- och expander, som använder I2C kommunikationsprotokoll. Du kan ansluta den till din LinkIt One med två stift endast (SDA, SLC) och få 16 digitala I/O portar. Dessutom kan du ansluta upp till åtta expandrar i serien och får 12...

Ansluta 16 x 2 LCD till Raspberry Pi

när du är klar spelar med lysdioder, motorer, växlar etc nästa sak att göra är att ansluta en 16 × 2 alfanumerisk LCD modul. LCD-moduler är prisvärda (mindre än $10) och obesvärad till gränssnittet till Raspberry Pi. De har 16 data stift men vi skull...

PICAXE Raspberry Pi ADC

i detta instructable jag kommer att visa dig hur man använder en billig PICAXE mikro-controller som en flera kanal analog till digital omvandlare. Vi kommer att använda I2C tillgång PICAXE, som kommer att skriva adc värden in i register som minne.Ras...

XBMC Media Center med Raspberry Pi

Media Centers är användbara verktyg som tillåter användare att organisera och spela deras medier, inklusive videor, musik och bilder. Mediacenter gör det möjligt att strömma innehåll från flera datorer till ett hemmabiosystem eller andra centralt läg...

Barns Robot kostym med ljudeffekter, godis detektor och mer

jag gjorde min dotter denna robot kostym till halloween. Jag blev inspirerad av denna Kid Robot kostym. Jag tog mig i lite av en annan riktning och till några mer nyheter såsom lampor i antenner och öron, en big button-kontrollen med en ljudeffekt fö...

8 kanal programmerbar Timer

IntroduktionJag har använt mikrochips PIC sortiment av mikrokontroller för mina projekt sedan 1993 och har gjort alla mina programmering i assembler språk, med hjälp av Microchip MPLab IDE. Mina projekt varierade från enkla trafikljus och blinkande l...

Automatisk flera foto Taker (Photobooth stil)

detta är en handledning om hur du programmerar din DSLR kamera att ta bilder photobooth-stil. Det är en enkel Arduino inställning som tillåter dig att ta kontinuerlig bilder med 3-sekunders fördröjningsintervall. Detta byggdes för ett college elektro...

Binära väggklocka

Bygga en Intel Edison baserat binär väggklocka med WiFi NTP tidssynkronisering.På Intel Roadshow i München 2014 försökte vi bygga en smart binära väggklocka. Totala antalet 33 LED berätta dagens datum (YYMD) och tid (m h). Ett bra verktyg att berätta...

DIY I2C LCD-Display med ingångar

Den typiska parallella LCD används med en Arduino (16 x 2 eller 20 x 4) har 16 stift. Endast 6 I/O pins krävs på Arduino, men tänk om du kunde få det ner till två I/O stift, och har fortfarande de stift som är tillgänglig för andra enheter?I2C gränss...

Daft Punk tabell replika förare ombord

detta instructable presenterar en utgång expander kort för något som Daft Punk tabell repliken. Detta är ett pågående arbete och samarbeten på detta instructable är välkommen."Grafikkort" är bara en utgång expander. Bara tre microcontroller stif...

Interaktiva omgivande ljus

detta är min första instructable!Tänk med mig medan jag kämpar för att skriva korrekt engelska. Rätta mig gärna!Jag började detta projekt bara efter "Låt det glöd" tävlingen började. Jag önskar jag hade gjort mycket mer och avslutade vad jag vil...

RGB LED skulptur

jag beslutat att lägga upp detta projekt om du vill ange Instructable motivtävlingen och göra det glöd tävling. Detta är en logotyp som min vän har utformats för sitt band (Rhyme & anledning). Han gav mig möjlighet att föra hans band logotyp till liv...

Roterande Emotiphone

IntroduktionDen roterande Emotiphone är en vintage rotary telefon som tweets humör uttryckssymboler. Den har en fördefinierad lista över 10 emoticons, varje tilldelad en siffra, så att när du är glad / ledsen / berusad / etc., du plocka upp luren och...

170 slips poäng Prototyping

IntroduktionÖppen källkod hårdvara sfären av Arduino sköldar är en nästan bländande samling av varianter av form och kapacitet. Det finns alternativ i kala PCB, DIY Kit eller förmonterade moduler som kombinerar med layout och funktionalitet till en p...

Mer LCD s arbetar tillsammans...

Någonsin haft det problemet som du ville placera så mycket information om en LCD, att det hela såg proppfull tillsammans?Du kan prova att rulla data, göra olika sidor på det (genom att göra utslaget förändring av ett klick på en knapp), kan du prova...

RFID-doserare

Detta instructable skapades enlighet projektet kravet på Makecourse vid University of South Florida (www.makecourse.com)Har du någonsin haft behovet av att organisera din medicin för månaden men ha en sätt att begränsa tillgängligheten till dem så at...

Raspberry Pi - PCA9536 Input/Output Expander Java Tutorial

PCA9536 är en 8-stifts CMOS enhet som ger 4 bitar av General Purpose parallella Input/Output (GPIO) expansion för I2C-buss/SMBus program. Den består av en 4-bitars konfigurationen register att tjäna syftet med ingång eller utgång urval, 4-bitars Inpu...

Raspberry Pi - PCA9536 Input/output Expander Python Tutorial

PCA9536 är en 8-stifts CMOS enhet som ger 4 bitar av General Purpose parallella Input/Output (GPIO) expansion för I2C-buss/SMBus program. Den består av en 4-bitars konfigurationen register att tjäna syftet med ingång eller utgång urval, 4-bitars Inpu...

Konfigurera Raspberry Pi ethernet-port för fjärrkontrollen

detta instructable visar hur du snabbt konfigurera Raspberry Pi ethernet-port och kör det avsides. Detta eliminerar behovet av att ansluta en bildskärm, tangentbord och mus om du vill använda enheten.Detta är en mycket grundläggande Instructable för...