first working version, just sevensegments, still without leds
This commit is contained in:
parent
cc96b5baf3
commit
17be17b75c
File diff suppressed because one or more lines are too long
|
@ -7,6 +7,8 @@
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "uart.h"
|
#include "uart.h"
|
||||||
|
|
||||||
|
#define BUFSIZE 40
|
||||||
|
|
||||||
volatile uint16_t syscounter = 0;
|
volatile uint16_t syscounter = 0;
|
||||||
volatile uint8_t digitbuffer[6] = { 0,0,0,0,0,0 };
|
volatile uint8_t digitbuffer[6] = { 0,0,0,0,0,0 };
|
||||||
volatile uint8_t leddigitbuffer[4] = { 0,0,0,0 };
|
volatile uint8_t leddigitbuffer[4] = { 0,0,0,0 };
|
||||||
|
@ -25,8 +27,8 @@ uint16_t power_gen = 0;
|
||||||
uint16_t power_load = 0;
|
uint16_t power_load = 0;
|
||||||
|
|
||||||
unsigned char data_count = 0;
|
unsigned char data_count = 0;
|
||||||
unsigned char data_in[20];
|
unsigned char data_in[BUFSIZE];
|
||||||
char command_in[20];
|
char command_in[BUFSIZE];
|
||||||
|
|
||||||
const uint8_t digit_translate[10] = {
|
const uint8_t digit_translate[10] = {
|
||||||
63, 6, 91, 79, 102, 109, 125, 7, 127, 111
|
63, 6, 91, 79, 102, 109, 125, 7, 127, 111
|
||||||
|
@ -57,7 +59,6 @@ static void ports_init(void) {
|
||||||
LED_PORT = 0;
|
LED_PORT = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static void print_sevenseg(uint8_t display, uint16_t value) {
|
static void print_sevenseg(uint8_t display, uint16_t value) {
|
||||||
uint8_t d[3];
|
uint8_t d[3];
|
||||||
d[2] = (value % 1000 / 100 );
|
d[2] = (value % 1000 / 100 );
|
||||||
|
@ -75,69 +76,125 @@ static void print_sevenseg(uint8_t display, uint16_t value) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void receive_values_from_powerboard(void) {
|
#ifdef DEBUG
|
||||||
uint16_t uart_char;
|
void pretty_print_all_values(void) {
|
||||||
static char buffer[20];
|
uart_puts_P("Voltage: ");
|
||||||
// send a to request data from powerboard
|
uart_print_uint16(voltage);
|
||||||
uart_putc('a');
|
uart_puts_P("mV\r\n");
|
||||||
|
|
||||||
// input format is:
|
uart_puts_P("Load: ");
|
||||||
// A$voltage,$current_in,$current_out,$power_in,$power_out,loadsw,dumpsw,gensw\n
|
uart_print_uint16(current_out);
|
||||||
|
uart_puts_P("mA ");
|
||||||
|
uart_print_uint16( power_load);
|
||||||
|
uart_puts_P("W\r\n");
|
||||||
|
|
||||||
uart_char = uart_getc();
|
uart_puts_P("Generator: ");
|
||||||
|
uart_print_uint16(current_in);
|
||||||
|
uart_puts_P("mA ");
|
||||||
|
uart_print_uint16( power_gen);
|
||||||
|
uart_puts_P("W\r\n");
|
||||||
|
|
||||||
if(uart_char != UART_NO_DATA) {
|
uart_puts_P("switches (load, dump, gen): ");
|
||||||
|
uart_putc(48 + loadsw);
|
||||||
|
uart_putc(',');
|
||||||
|
uart_putc(48 + dumpsw);
|
||||||
|
uart_putc(',');
|
||||||
|
uart_putc(48 + gensw);
|
||||||
|
uart_puts_P("\r\n");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void process_command() {
|
||||||
|
if(strstr(command_in,"A") != NULL) {
|
||||||
|
// we have an A and B (from check in work_uart()
|
||||||
|
// so our message should be complete and consist of:
|
||||||
|
// A$voltage,$current_in,$current_out,$power_in,$power_out,loadsw,dumpsw,gensw\n
|
||||||
|
|
||||||
|
//A12.5,65464,00000,00000,00000,1,0,1B
|
||||||
|
|
||||||
|
char *token;
|
||||||
|
uint8_t tokencounter = 0;
|
||||||
|
|
||||||
|
char *start = strrchr(command_in, 'A');
|
||||||
|
|
||||||
|
// remove first (B is ignored by atoi)
|
||||||
|
start++;
|
||||||
|
|
||||||
|
#ifdef DEBUG
|
||||||
|
uart_puts_P("from start: ");
|
||||||
|
uart_puts(start);
|
||||||
|
uart_puts_P("\r\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
token = strtok(start, ",");
|
||||||
|
|
||||||
|
while( token ) {
|
||||||
|
#ifdef DEBUG
|
||||||
|
uart_puts_P("token= ");
|
||||||
|
uart_puts(token);
|
||||||
|
uart_puts_P("\r\n");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
switch(tokencounter) {
|
||||||
|
case 0:
|
||||||
|
voltage = atoi(token);
|
||||||
|
break;
|
||||||
|
case 1:
|
||||||
|
current_in = atoi(token);
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
current_out = atoi(token);
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
power_gen = atoi(token);
|
||||||
|
break;
|
||||||
|
case 4:
|
||||||
|
power_load = atoi(token);
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
if(atoi(token) == 1) loadsw = 1;
|
||||||
|
else loadsw = 0;
|
||||||
|
break;
|
||||||
|
case 6:
|
||||||
|
if(atoi(token) == 1) dumpsw = 1;
|
||||||
|
else dumpsw = 0;
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
if(atoi(token) == 1) gensw = 1;
|
||||||
|
else gensw = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
tokencounter++;
|
||||||
|
token = strtok(NULL, ",");
|
||||||
|
}
|
||||||
|
#ifdef DEBUG
|
||||||
|
pretty_print_all_values();
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
voltage = 12200;
|
|
||||||
current_in = 1500;
|
|
||||||
current_out = 1600;
|
|
||||||
power_gen += 1;
|
|
||||||
power_load += 2;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
void process_command() {
|
|
||||||
if(strstr(command_in,"a") != NULL) {
|
|
||||||
//
|
|
||||||
|
|
||||||
if(strcasestr(command_in,"?") != NULL)
|
|
||||||
print_value("goto", variable_goto);
|
|
||||||
else
|
|
||||||
variable_goto = parse_assignment(command_in);
|
|
||||||
}
|
|
||||||
else if(strcasestr(command_in,"A") != NULL){
|
|
||||||
if(strcasestr(command_in,"?") != NULL)
|
|
||||||
print_value("A", variable_A);
|
|
||||||
else
|
|
||||||
variable_A = parse_assignment(command_in);
|
|
||||||
}
|
|
||||||
} */
|
|
||||||
|
|
||||||
void work_uart(){
|
void work_uart(){
|
||||||
unsigned int c = uart_getc();
|
unsigned int c = uart_getc();
|
||||||
|
|
||||||
if ( !(c & UART_NO_DATA) ) {
|
if ( !(c & UART_NO_DATA) ) {
|
||||||
|
|
||||||
data_in[data_count] = c;
|
data_in[data_count] = c;
|
||||||
|
|
||||||
if (data_in[data_count] == '\n') { // finish reading when newline is received
|
if (data_in[data_count] == 'B') { // finish reading when newline is received
|
||||||
data_count = 0;
|
data_count = 0;
|
||||||
|
|
||||||
// copy_command
|
memcpy(command_in, data_in, BUFSIZE);
|
||||||
memcpy(command_in, data_in, 20);
|
|
||||||
// Now clear data_in, the UART can reuse it now
|
|
||||||
memset(data_in, 0, 20);
|
|
||||||
|
|
||||||
//process_command();
|
// Now clear data_in, the UART can reuse it now
|
||||||
} else {
|
memset(data_in, 0, BUFSIZE);
|
||||||
data_count++;
|
|
||||||
|
process_command();
|
||||||
|
} else {
|
||||||
|
data_count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -147,14 +204,14 @@ int main(void) {
|
||||||
ports_init();
|
ports_init();
|
||||||
timer_init();
|
timer_init();
|
||||||
uart_init(UART_BAUD_SELECT(19200,F_CPU));
|
uart_init(UART_BAUD_SELECT(19200,F_CPU));
|
||||||
|
memset(data_in, 0, BUFSIZE);
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
|
|
||||||
work_uart();
|
work_uart();
|
||||||
|
|
||||||
if(syscounter == 200) {
|
if(syscounter >= 200) {
|
||||||
|
uart_putc('a'); // send a to receive values
|
||||||
receive_values_from_powerboard();
|
|
||||||
|
|
||||||
print_sevenseg(0, power_gen);
|
print_sevenseg(0, power_gen);
|
||||||
print_sevenseg(1, power_load);
|
print_sevenseg(1, power_load);
|
||||||
|
|
Loading…
Reference in New Issue