initial commit

This commit is contained in:
2018-11-21 23:17:31 +01:00
parent 2ca484dd6f
commit d075ca521c
35 changed files with 68241 additions and 0 deletions

48
Software/src/charger.cpp Normal file
View File

@ -0,0 +1,48 @@
/*
* Charger.cpp
*
* Created on: 19.11.2018
* Author: Hendrik Schutter
*/
#include "openChargeMicro.h"
charger::charger(struct s_charger pCharger) {
charger_settings = pCharger;
}
charger::~charger() {
}
double charger::getCurrent() {
mux.setChannel(charger_settings.chI);
int tmp = (int) io.readAdc(0);
double ret = ((double) tmp) * 1.00; //TODO calibration and testing
return ret;
}
double charger::getVoltage() {
mux.setChannel(charger_settings.chU);
int tmp = (int) io.readAdc(0);
double ret = ((double) tmp) * 1.00; //TODO calibration and testing
return ret;
}
double charger::getCapacity() {
//TODO
return 1.1;
}
double charger::getChargeTime() {
//TODO
return 1.1;
}
void charger::getInfo() {
char buffer[50];
sprintf(buffer, "Nr: %i - Uch %i - Ich %i\r\n", charger_settings.nr,
charger_settings.chU, charger_settings.chI);
serialSend(buffer);
}

34
Software/src/charger.h Normal file
View File

@ -0,0 +1,34 @@
/*
* charger.h
*
* Created on: 20.11.2018
* Author: Hendrik Schutter
*/
#ifndef SRC_CHARGER_H_
#define SRC_CHARGER_H_
struct s_charger {
int nr;
int chU;
int chI;
};
class charger {
private:
struct s_charger charger_settings;
ioController io;
multiplexer mux;
public:
charger(struct s_charger pCharger);
~charger();
double getCurrent();
double getVoltage();
double getCapacity();
double getChargeTime();
void getInfo();
};
#endif /* SRC_CHARGER_H_ */

View File

@ -0,0 +1,96 @@
/*
* ioController.cpp
*
* Created on: 20.11.2018
* Author: Hendrik Schutter
*/
#include "openChargeMicro.h"
ioController::ioController() {
ports_init();
adc_init();
}
ioController::~ioController() {
}
double ioController::get5VProbe() {
int tmp = (int) readAdc(2);
double ret = ((double) tmp) * 0.006242;
return ret;
}
double ioController::get15VProbe() {
int tmp = (int) readAdc(1);
double ret = ((double) tmp) * 0.014968;
return ret;
}
void ioController::ports_init() {
DDRD |= 1 << WS2812B;
DDRB |= 1 << ACTIVELED;
DDRB |= 1 << BUZZER;
DDRB |= 1 << POWERON;
DDRD |= 1 << S2;
DDRD |= 1 << S1;
DDRD |= 1 << S0;
DDRC &= ~(1 << PROBE15V);
DDRC &= ~(1 << PROBE5V);
DDRC &= ~(1 << Z);
}
void ioController::activateChargers() {
PORTB &= ~(1 << POWERON); //OFF
}
void ioController::deactivateChargers() {
PORTB |= (1 << POWERON); //ON
}
void ioController::setActiveLED(bool pBool) {
if (pBool) {
PORTB |= (1 << ACTIVELED); //ON
} else {
PORTB &= ~(1 << ACTIVELED); //OFF
}
}
void ioController::adc_init(void) {
ADMUX = (1 << REFS0); //select AVCC as reference
ADCSRA = (1 << ADEN) | 7; //enable and prescale = 128 (16MHz/128 = 125kHz)
}
int ioController::readAdc(char ch) {
ADMUX = (1 << REFS0) | (ch & 0x0f); //select input and ref
ADCSRA |= (1 << ADSC); //start the conversion
while (ADCSRA & (1 << ADSC))
; //wait for end of conversion
return ADCW;
}
void ioController::setMultiplexer(bool pS2, bool pS1, bool pS0) {
if (pS0) {
PORTD |= (1 << S0); //ON
} else {
PORTD &= ~(1 << S0); //OFF
}
if (pS1) {
PORTD |= (1 << S1); //ON
} else {
PORTD &= ~(1 << S1); //OFF
}
if (pS2) {
PORTD |= (1 << S2); //ON
} else {
PORTD &= ~(1 << S2); //OFF
}
}

View File

@ -0,0 +1,29 @@
/*
* ioController.h
*
* Created on: 20.11.2018
* Author: Hendrik Schutter
*/
#ifndef SRC_IOCONTROLLER_H_
#define SRC_IOCONTROLLER_H_
class ioController {
private:
public:
ioController();
~ioController();
double get5VProbe();
double get15VProbe();
void ports_init();
void activateChargers();
void deactivateChargers();
void setActiveLED(bool pBool);
void adc_init(void);
int readAdc(char chan);
void setMultiplexer(bool pS2, bool pS1, bool pS0);
};
#endif /* SRC_IOCONTROLLER_H_ */

113
Software/src/main.cpp Normal file
View File

@ -0,0 +1,113 @@
#include "openChargeMicro.h"
int main(void) {
serialSetup();
serialSend("Hello World\r\n");
ioController io;
io.deactivateChargers();
_delay_ms(1000); //Startup delay
io.setActiveLED(true);
io.activateChargers();
/* create charger */
s_charger charger_settings;
charger_settings.chU = 0;
charger_settings.chI = 4;
charger_settings.nr = 0;
charger charger01 = charger(charger_settings);
charger01.getInfo();
charger_settings.chU = 1;
charger_settings.chI = 5;
charger_settings.nr = 1;
charger charger02 = charger(charger_settings);
charger02.getInfo();
charger_settings.chU = 2;
charger_settings.chI = 6;
charger_settings.nr = 2;
charger charger03 = charger(charger_settings);
charger03.getInfo();
charger_settings.chU = 3;
charger_settings.chI = 7;
charger_settings.nr = 3;
charger charger04 = charger(charger_settings);
charger04.getInfo();
/* create charger */
while (true) {
char charVal[10];
dtostrf(charger01.getVoltage(), 4, 2, charVal);
serialSend("Charger01 - ");
serialSend(charVal);
serialSend(" Volt\r\n");
dtostrf(charger01.getCurrent(), 4, 2, charVal);
serialSend("Charger01 - ");
serialSend(charVal);
serialSend(" mAh\r\n");
dtostrf(charger02.getVoltage(), 4, 2, charVal);
serialSend("Charger02 - ");
serialSend(charVal);
serialSend(" Volt\r\n");
dtostrf(charger02.getCurrent(), 4, 2, charVal);
serialSend("Charger02 - ");
serialSend(charVal);
serialSend(" mAh\r\n");
dtostrf(charger03.getVoltage(), 4, 2, charVal);
serialSend("Charger03 - ");
serialSend(charVal);
serialSend(" Volt\r\n");
dtostrf(charger03.getCurrent(), 4, 2, charVal);
serialSend("Charger03 - ");
serialSend(charVal);
serialSend(" mAh\r\n");
dtostrf(charger04.getVoltage(), 4, 2, charVal);
serialSend("Charger04 - ");
serialSend(charVal);
serialSend(" Volt\r\n");
dtostrf(charger04.getCurrent(), 4, 2, charVal);
serialSend("Charger04 - ");
serialSend(charVal);
serialSend(" mAh\r\n");
serialSend("\r\n");
_delay_ms(1000);
}
return 0;
}
void serialSetup(void) {
//Register settings
//High and low bits
UBRR0H = (BUAD_RATE_CALC >> 8);
UBRR0L = BUAD_RATE_CALC;
//transimit and recieve enable
UCSR0B = (1 << TXEN0) | (1 << TXCIE0) | (1 << RXEN0) | (1 << RXCIE0);
UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); //8 bit data format
}
void serialSend(const char* sendString) {
for (unsigned int i = 0; i < strlen(sendString); i++) {
while (( UCSR0A & (1 << UDRE0)) == 0) {
};
UDR0 = sendString[i];
}
}

View File

@ -0,0 +1,50 @@
/*
* multiplexer.cpp
*
* Created on: 20.11.2018
* Author: Hendrik Schutter
*/
#include "openChargeMicro.h"
multiplexer::multiplexer() {
}
multiplexer::~multiplexer() {
}
void multiplexer::setChannel(int pCh) {
// see http://www.ti.com/lit/ds/symlink/cd4051b.pdf
switch (pCh) {
case 0:
io.setMultiplexer(0, 0, 0);
break;
case 1:
io.setMultiplexer(0, 0, 1);
break;
case 2:
io.setMultiplexer(0, 1, 0);
break;
case 3:
io.setMultiplexer(0, 1, 1);
break;
case 4:
io.setMultiplexer(1, 0, 0);
break;
case 5:
io.setMultiplexer(1, 0, 1);
break;
case 6:
io.setMultiplexer(1, 1, 0);
break;
case 7:
io.setMultiplexer(1, 1, 1);
break;
default:
io.setMultiplexer(0, 0, 0);
break;
}
}

View File

@ -0,0 +1,22 @@
/*
* multiplexer.h
*
* Created on: 20.11.2018
* Author: Hendrik Schutter
*/
#ifndef SRC_MULTIPLEXER_H_
#define SRC_MULTIPLEXER_H_
class multiplexer {
private:
ioController io;
public:
multiplexer();
~multiplexer();
void setChannel(int pCh);
};
#endif /* SRC_MULTIPLEXER_H_ */

View File

@ -0,0 +1,31 @@
#include <avr/io.h>
#include <string.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdio.h>
#include <stdlib.h>
#include "ioController.h"
#include "multiplexer.h"
#include "charger.h"
/* PINS */
#define WS2812B PD2
#define ACTIVELED PB5
#define PROBE15V PC1
#define PROBE5V PC2
#define Z PC0
#define VTX PB3
#define VRX PB2
#define BUZZER PB1
#define POWERON PB0
#define S2 PD7
#define S1 PD6
#define S0 PD5
#define BUAD 9600
#define BUAD_RATE_CALC ((F_CPU/16/BUAD) - 1)
void serialSetup(void);
void serialSend(const char* sendString);