Merge remote-tracking branch 'origin/paul-dev'

Conflicts:
	firmware/slavechip/filter.c
	firmware/slavechip/main.c
master
Paul Goeser 15 years ago
commit 37bb9bde1e

@ -3,6 +3,7 @@
#ifndef SPI_MASTER #ifndef SPI_MASTER
#include "main.h" #include "main.h"
#include "filter.h"
#endif #endif
/***** MASTER *****/ /***** MASTER *****/

@ -2,7 +2,6 @@
#define SPI_PROTO_H #define SPI_PROTO_H
#include <stdint.h> #include <stdint.h>
/***** MASTER *****/ /***** MASTER *****/
#define SPI_WRITE_DATA 0x01 #define SPI_WRITE_DATA 0x01
@ -22,7 +21,6 @@ void call_func(uint8_t number);
/***** MASTER END *****/ /***** MASTER END *****/
/***** SLAVE *****/ /***** SLAVE *****/
#include "spi_pointers.h" #include "spi_pointers.h"
uint16_t spi_proto_slaveaction(uint8_t opcode, uint8_t addr, uint16_t data); uint16_t spi_proto_slaveaction(uint8_t opcode, uint8_t addr, uint16_t data);
/***** SLAVE END *****/ /***** SLAVE END *****/

@ -8,7 +8,7 @@ CFLAGS += -ffunction-sections -Wl,--gc-sections -Wl,--relax
COMPILE = avr-gcc $(CFLAGS) $(DEFINES) COMPILE = avr-gcc $(CFLAGS) $(DEFINES)
OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o muxer.o debug.o filter.o OBJECTS = main.o mcp_adc.o i2c_simple.o softtimer.o spi_proto.o spi.o spi_pointers.o muxer.o debug.o filter.o ringbuf_small.o
# symbolic targets: # symbolic targets:
all: firmware.hex all: firmware.hex

@ -1,38 +1,21 @@
#include "debug.h" #include "debug.h"
#include <stdio.h> #include "ringbuf_small.h"
char debugStr[DEBUGCHARS]; ringbuf_t rb;
volatile char dbgCurChar; char dbuf[DEBUGCHARS];
volatile uint8_t dbgStrFill; // amount of available chars in debugStr
volatile uint8_t dbgHasNewSPI;
void dbgLog(const char* fmt, ...) { FILE mystdout = FDEV_SETUP_STREAM(dbg_putchar, NULL,
uint8_t maxwrite = DEBUGCHARS - dbgStrFill; _FDEV_SETUP_WRITE);
va_list va;
va_start(va,fmt);
char* pos = debugStr + dbgStrFill;
dbgStrFill += vsnprintf(pos, maxwrite, fmt, va);
va_end(va);
}
uint8_t dbgHasNew() { void dbg_init() {
dbgHasNewSPI = (dbgStrFill > 0); ringbuf_init(&rb,dbuf,sizeof(dbuf));
return (dbgStrFill > 0);
} }
char dbgReadChar() { uint8_t dbg_putchar(char c, FILE *stream) {
if(dbgHasNew()) { return ringbuf_put(&rb, (uint8_t) c);
char ret = debugStr[0];
for(int i=0; i<dbgStrFill-1; i++) {
debugStr[i] = debugStr[i+1];
}
dbgStrFill--;
return ret;
} else {
return 0xFF;
}
} }
void dbgAdvanceChar() { int16_t dbg_getchar(int16_t dummy) {
dbgCurChar = dbgReadChar(); return ringbuf_get(&rb);
} }

@ -2,16 +2,18 @@
#define __DEBUG_H #define __DEBUG_H
#include <stdint.h> #include <stdint.h>
#include <stdio.h>
#include "ringbuf_small.h"
#define DEBUGCHARS 100 #define DEBUGCHARS 254
extern char debugStr[];
extern volatile uint8_t dbgStrFill; // amount of available chars in debugStr
extern volatile uint8_t dbgHasNewSPI;
extern volatile char dbgCurChar;
extern FILE mystdout;
ringbuf_t rb;
char dbuf[DEBUGCHARS];
void dbg_init();
int16_t dbg_getchar();
uint8_t dbg_putchar(char c, FILE* stream);
void dbgLog(const char* fmt, ...);
uint8_t dbgHasNew();
char dbgReadChar();
void dbgAdvanceChar();
#endif #endif

@ -1,7 +1,7 @@
#include "filter.h" #include "filter.h"
#include <math.h> #include <math.h>
#include "debug.h" #include <stdio.h>
Sensordata sensordata[4]; Sensordata sensordata[4];
float ambient_temp=25.; float ambient_temp=25.;
@ -14,7 +14,7 @@ float avg_noise[CHANNELCOUNT];
void process_thermocouple_value(int16_t raw_data, uint8_t channel){ void process_thermocouple_value(int16_t raw_data, uint8_t channel){
// dbgLog("procthermval, val %i, chan %i",raw_data,channel); printf("procthermval, val %i, chan %i",raw_data,channel);
// This function does everything that needs to be done to raw adc values // This function does everything that needs to be done to raw adc values
float a = raw_data; float a = raw_data;
a -= sensordata[channel].offset; a -= sensordata[channel].offset;
@ -38,7 +38,7 @@ void process_ambient_value(int16_t raw_data){
a = a * 0.03125; //adc to mV after amp a = a * 0.03125; //adc to mV after amp
a = a / 9.625; a = a / 9.625;
ambient_temp = a; ambient_temp = a;
dbgLog("ambient: %3.3f°C (value %i)\n",a, raw_data); printf("ambient: %3.3f°C (lastval %i)\n", a, raw_data);
} }

@ -16,7 +16,7 @@ void inline i2c_wait(){
while(!(TWCR & _BV(TWINT))){ while(!(TWCR & _BV(TWINT))){
cntr++; cntr++;
if(cntr >= 1000){ if(cntr >= 1000){
dbgLog("i2c waittime exceeded!\n"); printf("i2c waittime exceeded!\n");
} }
} }
} }

@ -4,9 +4,12 @@
#include "i2c_simple.h" #include "i2c_simple.h"
#include "mcp_adc.h" #include "mcp_adc.h"
#include "debug.h" #include "debug.h"
#include <math.h>
#include "filter.h" #include "filter.h"
#include <math.h>
#include <util/delay.h> #include <util/delay.h>
#include <stdio.h>
uint16_t timertmp; uint16_t timertmp;
uint16_t temperatures[4]; uint16_t temperatures[4];
@ -45,6 +48,8 @@ void hardinit() {
void softinit() { void softinit() {
mcpadc_init(ADC_GAIN_2|ADC_CONV_CONT|ADC_BITS_16); mcpadc_init(ADC_GAIN_2|ADC_CONV_CONT|ADC_BITS_16);
dbg_init();
stdout = &mystdout;
} }
@ -56,12 +61,11 @@ int __attribute__((noreturn)) main(void) {
int16_t data; int16_t data;
for(;;){ for(;;){
_delay_ms(4000); printf("loop iteration\n");
dbgLog("loop iteration\n");
// measure temps 5*2 times // measure temps 5*2 times
for(uint8_t i=0; i<5; i++) { for(uint8_t i=0; i<5; i++) {
// dbgLog("starting temp measuring\n"); printf("starting temp measuring");
for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two probes atm for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two probes atm
muxer_set(active_sensor); muxer_set(active_sensor);
while(!mcpadc_has_new_data()) _delay_ms(10); while(!mcpadc_has_new_data()) _delay_ms(10);
@ -72,13 +76,13 @@ int __attribute__((noreturn)) main(void) {
process_thermocouple_value(data,active_sensor); process_thermocouple_value(data,active_sensor);
_delay_ms(1000); _delay_ms(1000);
} }
dbgLog("a"); printf("a");
} }
// dbgLog("now measuring offsets\n"); printf("now measuring offsets");
// measure 2 offsets // measure 2 offsets
for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two offsets atm for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two offsets atm
// dbgLog("active sensor: %i",active_sensor); printf("active sensor: %i",active_sensor);
muxer_set(active_sensor); muxer_set(active_sensor);
offset_measure_start(active_sensor); offset_measure_start(active_sensor);
while(!mcpadc_has_new_data()) _delay_ms(10); while(!mcpadc_has_new_data()) _delay_ms(10);
@ -86,7 +90,7 @@ int __attribute__((noreturn)) main(void) {
while(!mcpadc_has_new_data()) _delay_ms(10); while(!mcpadc_has_new_data()) _delay_ms(10);
data = mcpadc_get_data(); data = mcpadc_get_data();
// dbgLog("retrieved offset data %i\n", data); printf("retrieved offset data %i", data);
// TODO: what to do with the offset? // TODO: what to do with the offset?
offset_measure_stop(); offset_measure_stop();

@ -1,3 +1,6 @@
#ifndef __RINGBSML_H
#define __RINGBSML_H
#include <stdint.h> #include <stdint.h>
typedef struct { typedef struct {
@ -9,4 +12,7 @@ typedef struct {
void ringbuf_init(ringbuf_t* rb, char* buf, int size); void ringbuf_init(ringbuf_t* rb, char* buf, int size);
uint8_t ringbuf_put(ringbuf_t *rb, uint8_t value);
int16_t ringbuf_get(ringbuf_t *rb);
#endif

@ -1,15 +1,13 @@
#include "spi_pointers.h" #include "spi_pointers.h"
#include "main.h" #include "main.h"
#include "debug.h"
uint8_t *spi_proto_globals8[] = { uint8_t *spi_proto_globals8[] = {
&dbgHasNewSPI,
&dbgCurChar
}; };
uint16_t *spi_proto_globals16[] = { uint16_t *spi_proto_globals16[] = {
}; };
funptr_t spi_proto_funcs[] = { funptr_t spi_proto_funcs[] = {
&dbgHasNew, &dbg_getchar
&dbgAdvanceChar
}; };

Loading…
Cancel
Save