initial commit
This commit is contained in:
48
Software/src/charger.cpp
Normal file
48
Software/src/charger.cpp
Normal 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
34
Software/src/charger.h
Normal 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_ */
|
96
Software/src/ioController.cpp
Normal file
96
Software/src/ioController.cpp
Normal 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
|
||||
}
|
||||
|
||||
}
|
||||
|
29
Software/src/ioController.h
Normal file
29
Software/src/ioController.h
Normal 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
113
Software/src/main.cpp
Normal 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];
|
||||
}
|
||||
}
|
||||
|
50
Software/src/multiplexer.cpp
Normal file
50
Software/src/multiplexer.cpp
Normal 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;
|
||||
}
|
||||
|
||||
}
|
||||
|
22
Software/src/multiplexer.h
Normal file
22
Software/src/multiplexer.h
Normal 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_ */
|
31
Software/src/openChargeMicro.h
Normal file
31
Software/src/openChargeMicro.h
Normal 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);
|
||||
|
Reference in New Issue
Block a user