Hallo Leute,
ich versuche gerade meine PI mit einem MCP23S17 Port Expander zu betreiben.
Hat jemand einen Beispielcode in c der eine Diode blinken läßt?
Vielen Dank im voraus
Michael
SPI Beispielcode
-
mj1# -
30. Oktober 2012 um 21:54 -
Geschlossen -
Erledigt
-
-
SPI Beispielcode? Schau mal ob du hier fündig wirst!
-
Hallo,
für SPI könntest du mal nach raspicomm googlen. Dort kannst du dir den SPI-Code über git holen und entsprechend anpassen.
Grúss -
Ich benutze die bcm2835-Library von mikem: http://www.open.com.au/mikem/bcm2835
Dazu dann die Routinen:
Code
Alles anzeigenvoid mcp23s17_reg_write (char regnumber, char regvalue) { char a[2]; a[0]=0b01000000; a[1]=regnumber; a[2]=regvalue; bcm2835_spi_transfern(a,3); } char mcp23s17_reg_read (char regnumber) { char a[2]; a[0]=0b01000001; a[1]=regnumber; a[2]=0x55; bcm2835_spi_transfern(a,3); return a[2]; } void mcp23s17_init () { mcp23s17_reg_write (0x0A,0b10100000); // Bank=1 mcp23s17_reg_write (IODIRA,0b00000000); // 00 Port A Input 1=Input mcp23s17_reg_write (IPOLA,0b00000000); // 01 Port A Pol. reversed mcp23s17_reg_write (DEFVALA,0b00000000); // 03 Port A compare Value für Int mcp23s17_reg_write (INTCONA,0b00000000); // 04 Port A Pins compared against DEFVALA mcp23s17_reg_write (GPINTENA,0b00000000); // 02 Port A All pins Interupt Off mcp23s17_reg_write (GPPUA,0b00000000); // 06 Port A Pullups 1=Pullup mcp23s17_reg_write (IODIRB,0b00000000); // 10 Port B Input 1=Input mcp23s17_reg_write (IPOLB,0b00000000); // 11 Port B Pol. reversed mcp23s17_reg_write (DEFVALB,0b00000000); // 13 Port B compare Value für Int mcp23s17_reg_write (INTCONB,0b00000000); // 14 Port B Pins compared against DEFVALA mcp23s17_reg_write (GPINTENB,0b00000000); // 12 Port B All pins Interupt Off mcp23s17_reg_write (GPPUB,0b00000000); // 16 Port B Pullups } void mcp23s17_spi_init () { if (!bcm2835_init()) return; bcm2835_spi_begin(); bcm2835_spi_setBitOrder(BCM2835_SPI_BIT_ORDER_MSBFIRST); // The default bcm2835_spi_setDataMode(BCM2835_SPI_MODE0); // The default bcm2835_spi_setClockDivider(BCM2835_SPI_CLOCK_DIVIDER_64); // 65536 - 4khz 512 500khz 256 1Mhz 64 10Mhz bcm2835_spi_chipSelect(BCM2835_SPI_CS0); // The default bcm2835_spi_setChipSelectPolarity(BCM2835_SPI_CS0, LOW); // the default }
mit den Konstanten:Code
Alles anzeigen#define IODIRA 0x00 #define IODIRB 0x10 #define IPOLA 0x01 #define IPOLB 0x11 #define GPINTENA 0x02 #define GPINTENB 0x12 #define DEFVALA 0x03 #define DEFVALB 0x13 #define INTCONA 0x04 #define INTCONB 0x14 #define IOCONA 0x05 #define IOCONB 0x15 #define GPPUA 0x06 #define GPPUB 0x16 #define INTFA 0x07 #define INTFB 0x17 #define INTCAPA 0x08 #define INTCAPB 0x18 #define GPIOA 0x09 #define GPIOB 0x19 #define OLATA 0x0A #define OLATB 0x1A
Du fängst mit einem
'mcp23s17_spi_init ()'
an um den SPI zu starten, danach ein
'mcp23s17_init ()'
um die Register im MCP zu setzen. hier alle Ports auf Ausgang.
Mit
'mcp23s17_reg_write (GPIOA,0b10101010)'
setzt Du dann z.B. jeden 2.Pin vom Port a auf High.
Jetzt mitmachen!
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!