changed protocol to support functions with parameters, fiddled spi timings a bit

master
Paul Goeser 15 years ago
parent 2aaeee4e55
commit 5d536975d2

Binary file not shown.

@ -30,3 +30,8 @@ Where following values are Valid:
| Thermometer Representing Temperature|
| Starting with 0 the Temperature |
|--------------------------------------------------------------------------------------------------------------------------|
Änderungen:
1 ist nun Echo.
7 ist read-temp

@ -83,16 +83,17 @@ void spi_init(){
void spi_mst_start_packet(){
#ifdef SPI_MASTER
_delay_us(2*1e6/SPI_BAUDRATE);
SPI_SSOUT &= ~(_BV(SPI_SS_PIN));
_delay_us(1e6/SPI_BAUDRATE);
_delay_us(2*1e6/SPI_BAUDRATE);
#endif
}
void spi_mst_end_packet(){
#ifdef SPI_MASTER
_delay_us(1e6/SPI_BAUDRATE);
_delay_us(2*1e6/SPI_BAUDRATE);
SPI_SSOUT |= _BV(SPI_SS_PIN);
_delay_us(1e6/SPI_BAUDRATE);
_delay_us(2*1e6/SPI_BAUDRATE);
#endif
}
@ -124,6 +125,11 @@ void spi_mst_write_read(uint8_t len, uint8_t *data){
}
}
void spi_mst_packet_delay(){
// wait for 2 byte
_delay_us(16*1e6/SPI_BAUDRATE);
}
#ifndef SPI_MASTER
void spi_sla_handle_packet(){

@ -20,6 +20,7 @@ uint16_t spi_master_transceive(uint8_t opcode, uint8_t addr, uint16_t value)
spi_mst_start_packet();
spi_mst_write_read(5,mst_buf);
spi_mst_end_packet();
spi_mst_packet_delay();
for(uint8_t i=0; i<5; ++i){
mst_buf[0] = 0;
mst_buf[1] = 0;
@ -33,6 +34,7 @@ uint16_t spi_master_transceive(uint8_t opcode, uint8_t addr, uint16_t value)
if(mst_buf[1] == opcode && mst_buf[2] == addr){ // valid answer
return ((mst_buf[3] << 8) | mst_buf[4]);
}
spi_mst_packet_delay();
}
// }
return 0xffff; // error-code
@ -90,7 +92,7 @@ uint16_t spi_proto_slaveaction(uint8_t opcode, uint8_t addr, uint16_t data) {
(*spi_proto_globals16[addr]) = data;
break;
case 6:
(*spi_proto_funcs[addr])();
retval = (*spi_proto_funcs[addr])(data);
//TODO: prevent a function from being run several times because the message gets repeated.
break;
case 7:

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

@ -56,11 +56,12 @@ int __attribute__((noreturn)) main(void) {
int16_t data;
for(;;){
_delay_ms(4000);
dbgLog("loop iteration\n");
// measure temps 5*2 times
for(uint8_t i=0; i<5; i++) {
dbgLog("starting temp measuring");
// dbgLog("starting temp measuring\n");
for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two probes atm
muxer_set(active_sensor);
while(!mcpadc_has_new_data()) _delay_ms(10);
@ -69,14 +70,15 @@ int __attribute__((noreturn)) main(void) {
data = mcpadc_get_data();
process_thermocouple_value(data,active_sensor);
_delay_ms(1000);
}
dbgLog("a");
}
dbgLog("now measuring offsets");
// dbgLog("now measuring offsets\n");
// measure 2 offsets
for(uint8_t active_sensor=0; active_sensor<2; active_sensor++) { // only measuring two offsets atm
dbgLog("active sensor: %i",active_sensor);
// dbgLog("active sensor: %i",active_sensor);
muxer_set(active_sensor);
offset_measure_start(active_sensor);
while(!mcpadc_has_new_data()) _delay_ms(10);
@ -84,7 +86,7 @@ int __attribute__((noreturn)) main(void) {
while(!mcpadc_has_new_data()) _delay_ms(10);
data = mcpadc_get_data();
dbgLog("retrieved offset data %i", data);
// dbgLog("retrieved offset data %i\n", data);
// TODO: what to do with the offset?
offset_measure_stop();

@ -3,7 +3,7 @@
#include <stdint.h>
typedef void(*funptr_t)();
typedef int16_t(*funptr_t)(int16_t);
extern uint8_t *spi_proto_globals8[];
extern uint16_t *spi_proto_globals16[];

Loading…
Cancel
Save