asd

I2C.cpp

Committer:
hemmer_matthias
Date:
2016-02-29
Revision:
0:d7de08989175

File content as of revision 0:d7de08989175:

#include "mbed.h"
#include "I2C.h"

I2C pc9555 (p28, p27);    //SDA,SCL

void bertl_PC9555_init()
{
    char data[2];
    
    // I2C Initialisierung
    pc9555.frequency(PC9555_FREQUENCY);
    
    // Port 0 = LEDs
    
    // Adresse, RW# = 0, Config Port 0 (6) = 0x00 (=OutPut), Stop
    data[0] = PC9555_Port0_DIR_IN;
    data[1] = 0x00;     // Output    
    pc9555.write(PC9555_ADDR, data, 2);  
    
    // Adresse, RW# = 0, Config Port 1 (7) = 0x00 (=InPut), Stop
    data[0] = PC9555_Port1_DIR_IN;
    data[1] = 0xFF;     // Input
    pc9555.write(PC9555_ADDR, data, 2);  
    
    // Adresse, RW# = 0, Polarity Inversion Port 0 (4) = 0xFF (= inverted) , Stop  
    data[0] = PC9555_Port0_INV;
    data[1] = 0xFF;
    pc9555.write(PC9555_ADDR, data, 2); 
    
     // Adresse, RW# = 0, Polarity Inversion Port 1 (5) = 0x00 (=NonInverted) , Stop
    data[0] = PC9555_Port1_INV;
    data[1] = 0x00;
    pc9555.write(PC9555_ADDR, data, 2);      
}

void bertl_PC9555_leds(unsigned char leds)
{
    char data[2];   // Two Bytes for Transmitt via I2C
    
    // Send leds to Port0 of PC9555 tp I2C: 
    // Start, Adress, RW# = 0, CMD I2C_Port0_OUT , leds, Stop
    data[0] = PC9555_Port0_OUT;
    data[1] = ~leds;        //bitwise inversion since HW is switched on with 0 (invers logic)
    pc9555.write(PC9555_ADDR, data, 2);
}

unsigned char bertl_PC9555_switches()
{
    char data[1];
    data[0] = PC9555_Port1_IN;
    pc9555.write(PC9555_ADDR, data, 1, true); // tell him, we want to read Port1, no STOP
    pc9555.read(PC9555_ADDR, data, 1, false); // read 1 byte, then send STOP
    return((unsigned char) data[0]);
}