pca9555 is now working but need to be completed

master
Kerem Yollu 4 years ago
parent 63b4c1a0e8
commit cd82a567e8

1
.gitignore vendored

@ -1 +1,2 @@
*.o
runtest

@ -1,126 +0,0 @@
/*
* Authors : Kerem Yollu & Edwin Koch
* Date : 07.03.2021
*
* Description :
* TODO : Write description or doxygene
*
*/
#include <iostream>
#include <stdint.h>
#include <unistd.h>
#include <bitset>
#include "./management/errorHandling.h"
#include "./management/commandManager.h"
//#include "./drivers/bh1750/bh1750.h"
//#include "./drivers/pf8574/pf8574lcd.h"
#include "./algorithms/bitgestion.h"
//#include "./periferals/i2c/i2c.hpp"
#include "./pimpl/implementation.hpp"
ErrorHandler errorHandle;
CommandManager commander;
Device pimplTest;
//i2c_ch1_pImpL i2c(1, &errorHandle);
/*
char char_array[TOTAL_CHAR_CAP];
int freq = 0;
int initPlatform()
{
lcd_init(&i2c);
return 0;
}
void pca9685_test()
{
Pca9685 pwmGenarator(&i2c, &errorHandle);
pwmGenarator.setOnDutyPercent(0,50);
for(int i = 3 ; i <= 255; i++)
{
pwmGenarator.setPwmRaw(i);
strcpy(char_array, "Pwm Freq: ");
lcd_display_string(1,0,char_array,0);
std::string Msg = std::to_string(pwmGenarator.getPwmFreq());
strcpy(char_array, Msg.c_str());
lcd_display_string(1,10, char_array, 7);
strcpy(char_array, "Hz");
lcd_display_string(1,18, char_array, 7);
usleep(200000);
freq = getchar();
}
}
void bh1750_test()
{
Bh1750 lightSens(&i2c);
while(1)
{
// std::cout << "value "<< lightSens.continious(BH1750_CONTINUOUS_HIGH_RES_MODE_1,1) << " Lux" <<std::endl;
std::string Msg = std::to_string(lightSens.continious(BH1750_CONTINUOUS_HIGH_RES_MODE_1,1));
char char_array[TOTAL_CHAR_CAP];
strcpy(char_array, Msg.c_str());
lcd_display_string(2,0, char_array,5);
usleep(150*1000);
}
}
void dummy()
{
uint16_t conf = 0;
float conv = 0;
Ads1015 adc(&i2c,&errorHandle);
conf = adc.getConfig();
adc.setOperationMode(ADS1015_MODE_SINGLE);
adc.setMultiplexer(ADS1015_MUX_AIN0_GND);
adc.setGain(ADS1015_GAIN_6144);
adc.writeConfig();
adc.pointToConvReg();
conv = adc.getConversion();
conv = (5.0 * conv)/2047.0;
std::cout << "Convertion " << conv << std::endl;
exit(1);
}
int main(int argc, char *argv[])
{
// Init
initPlatform();
std::cout << "Main Begin" << std::endl;
commander.addNewCommand("bh1750", "The test command for testing the bh1750", bh1750_test);
commander.addNewCommand("pca9685", "The test command for testing the pca8695", pca9685_test);
commander.addNewCommand("dummy", "The test command for testing the test", dummy);
commander(argv[1]);
std::cout << "Main End" << std::endl;
return 1;
}
*/
int initPlatform()
{
return 0;
}
void dummy()
{
}
int main(int argc, char *argv[])
{
// Init
initPlatform();
std::cout << "Main Begin" << std::endl;
commander.addNewCommand("dummy", "The test command for testing the test", dummy);
commander(argv[1]);
std::cout << "Main End" << std::endl;
return 1;
}

@ -3,19 +3,118 @@
Pca9555::Pca9555(I2C *i2c)
{
i2c_pca9555 = i2c;
setAllOut();
setAllIn();
}
uint8_t Pca9555::readPin(uint8_t pin)
uint8_t Pca9555::readPin(uint8_t bank, uint8_t pin)
{
return pin;
if(bank == 0)
{
pinIo0State = i2c_pca9555->readByte(PCA9555_ADDR,PCA9555_INPUT_PORT_0_REG);
return getBitUint8(&pinIo0State, pin);
}
else if(bank == 1)
{
pinIo1State = i2c_pca9555->readByte(PCA9555_ADDR,PCA9555_INPUT_PORT_1_REG);
return getBitUint8(&pinIo1State, pin);
}
else
{
throwError(bankInvalid);
}
throwError(oufOfLoop);
return 2;
}
void Pca9555::setPin(uint8_t pin, uint8_t direction)
void Pca9555::writePin(uint8_t bank, uint8_t pin, uint8_t value)
{
if(bank == 0)
{
pinIo0State = i2c_pca9555->readByte(PCA9555_ADDR,PCA9555_OUTPUT_PORT_0_REG);
if(value == 0)
{
unsetBitUint8(&pinIo0State, pin);
}
else if (value == 1)
{
setBitUint8(&pinIo0State, pin);
}
else
{
throwError(invalidOut);
}
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_OUTPUT_PORT_0_REG,pinIo0State);
}
else if(bank == 1)
{
pinIo1State = i2c_pca9555->readByte(PCA9555_ADDR,PCA9555_INPUT_PORT_1_REG);
if(value == 0)
{
unsetBitUint8(&pinIo1State, pin);
}
else if (value == 1)
{
setBitUint8(&pinIo1State, pin);
}
else
{
throwError(invalidOut);
}
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_OUTPUT_PORT_1_REG,pinIo1State);
}
else
{
throwError(bankInvalid);
}
}
void Pca9555::setPin(uint8_t bank, uint8_t pin, uint8_t direction)
{
if(bank == 0)
{
pinIo0Direction = i2c_pca9555->readByte(PCA9555_ADDR,PCA9555_CONFIG_0_REG);
if(direction == 0)
{
unsetBitUint8(&pinIo0Direction, pin);
}
else if (direction == 1)
{
setBitUint8(&pinIo0Direction, pin);
}
else
{
throwError(invalidDir);
}
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_CONFIG_0_REG,pinIo0Direction);
}
else if(bank == 1)
{
pinIo1Direction = i2c_pca9555->readByte(PCA9555_ADDR,PCA9555_CONFIG_1_REG);
if(direction == 0)
{
unsetBitUint8(&pinIo1Direction, pin);
}
else if (direction == 1)
{
setBitUint8(&pinIo1Direction, pin);
}
else
{
throwError(invalidDir);
}
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_CONFIG_1_REG,pinIo1Direction);
}
else
{
throwError(bankInvalid);
}
}
void Pca9555::setPinPolarity(uint8_t pin, uint8_t polarity)
void Pca9555::setPinPolarity(uint8_t bank, uint8_t pin, uint8_t polarity)
{
}
@ -36,3 +135,22 @@ void Pca9555::setAllIn()
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_CONFIG_0_REG,0xFF);
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_CONFIG_1_REG,0xFF);
}
void Pca9555::setAllHigh()
{
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_OUTPUT_PORT_0_REG,0xFF);
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_OUTPUT_PORT_1_REG,0xFF);
}
void Pca9555::setAllLow()
{
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_OUTPUT_PORT_0_REG,0x00);
i2c_pca9555->writeWord(PCA9555_ADDR,PCA9555_OUTPUT_PORT_1_REG,0x00);
}
void Pca9555::throwError(Pca9555::errors error)
{
#ifdef LINUX
std::cout << "Linux Pca9555 Error No:" << error << std::endl;
exit(1);
#endif
}

@ -4,7 +4,7 @@
#include <iostream>
#include "../../communication/i2c/i2c.hpp"
#include "../../algorithms/bitgestion.h"
#define PCA9555_ADDR 0x20 // Device Adress
#define PCA9555_INPUT_PORT_0_REG 0x00
@ -19,13 +19,28 @@
class Pca9555
{
public:
enum errors
{
bankInvalid,
oufOfLoop,
pinInvalid,
invalidOut,
invalidDir,
regInvalid
};
Pca9555(I2C *i2c);
uint8_t readPin(uint8_t pin);
void setPin(uint8_t pin, uint8_t direction); // 1 = input 0 = output
void setPinPolarity(uint8_t pin, uint8_t polarity); // 1 = Inverted 0 = Normal
uint8_t readPin(uint8_t bank, uint8_t pin);
void writePin(uint8_t bank, uint8_t pin, uint8_t value);
void setPin(uint8_t bank, uint8_t pin, uint8_t direction); // 1 = input 0 = output
void setPinPolarity(uint8_t bank, uint8_t pin, uint8_t polarity); // 1 = Inverted 0 = Normal
uint8_t getInterrupt();
void setAllOut();
void setAllIn();
void setAllHigh();
void setAllLow();
private:
@ -33,6 +48,14 @@ class Pca9555
uint8_t intPinSrc;
uint8_t intPinDir;
uint8_t intPinPol;
uint8_t pinIo0Direction;
uint8_t pinIo1Direction;
uint8_t pinIo0State;
uint8_t pinIo1State;
uint8_t pinIo0Polarity;
uint8_t pinIo1Polarity;
void throwError(errors error);
};
#endif

@ -13,10 +13,12 @@
#include <bitset>
#include <functional>
// Management
#include "./management/command/commandManager.h"
// hardwareinterfaces
// Communication
#include "./communication/i2c/i2c.hpp"
#include "./systems/systemCall.h"
// drivers
#include "./drivers/bh1750/bh1750.h"
@ -24,9 +26,11 @@
#include "./drivers/pca9685/pca9685.h"
#include "./drivers/mcp4725/mcp4725.hpp"
#include "./drivers/pca9555/pca9555.h"
#include "./periferals/gpio/gpio.hpp"
// Periferals
#include "./periferals/gpio/gpio.hpp"
// Algorithms
#include "./algorithms/bitgestion.h"
@ -48,7 +52,20 @@ int initPlatform()
void pca9555_test()
{
uint8_t pinState = 0;
Pca9555 gpioExpander(&i2c);
gpioExpander.setAllOut();
gpioExpander.setAllHigh();
usleep(1000000);
gpioExpander.writePin(1,7,0);
gpioExpander.setPin(0,3,1);
while(1)
{
usleep(1000);
pinState = gpioExpander.readPin(0,3);
std::cout << "Pin State ; "<< unsigned(pinState) << std::endl;
}
}
@ -156,7 +173,7 @@ void dac_test_1()
void dummy()
{
std::cout << "Dummy" << std::endl;
}
void bh1750_test()

@ -1,21 +1,78 @@
#include "gpio.hpp"
#include "../../systems/systemCall.h"
#include <stdint.h>
#define PIN_COUNT 27
class Gpio::gpioImpl
{
public:
uint8_t pinCount = PIN_COUNT;
uint8_t currentPin = 0;
enum functionality
{
undefined,
gpio,
i2c,
spi,
pwm,
pcm,
uart,
eeprom,
clk
};
functionality pins[PIN_COUNT + 1];
gpioImpl()
{
printf("implementation of Gpio Sucsessfull\n");
pins[1] = eeprom;
pins[2] = i2c;
pins[3] = i2c;
pins[4] = clk;
pins[5] = gpio;
pins[6] = gpio;
pins[7] = spi;
pins[8] = spi;
pins[9] = spi;
pins[10] = spi;
pins[11] = spi;
pins[12] = pwm;
pins[13] = pwm;
pins[14] = uart;
pins[15] = uart;
pins[16] = gpio;
pins[17] = gpio;
pins[18] = pcm;
pins[19] = pcm;
pins[20] = pcm;
pins[21] = pcm;
pins[22] = gpio;
pins[23] = gpio;
pins[24] = gpio;
pins[25] = gpio;
pins[26] = gpio;
pins[27] = gpio;
for(currentPin = 0; currentPin <= pinCount; currentPin ++)
{
printf("Pin %d %d\n",currentPin, pins[currentPin]);
}
}
void setMode(uint8_t gpioNo, Gpio::pinMode mode)
{
}
void setOutputState(uint8_t gpioNo, Gpio::pinState state)
{
}
void setPullUpDonw(uint8_t gpioNo, Gpio::pinPullUpDown resistance)

Binary file not shown.
Loading…
Cancel
Save