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| | Thermometer Representing Temperature|
| Starting with 0 the 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(){ void spi_mst_start_packet(){
#ifdef SPI_MASTER #ifdef SPI_MASTER
_delay_us(2*1e6/SPI_BAUDRATE);
SPI_SSOUT &= ~(_BV(SPI_SS_PIN)); SPI_SSOUT &= ~(_BV(SPI_SS_PIN));
_delay_us(1e6/SPI_BAUDRATE); _delay_us(2*1e6/SPI_BAUDRATE);
#endif #endif
} }
void spi_mst_end_packet(){ void spi_mst_end_packet(){
#ifdef SPI_MASTER #ifdef SPI_MASTER
_delay_us(1e6/SPI_BAUDRATE); _delay_us(2*1e6/SPI_BAUDRATE);
SPI_SSOUT |= _BV(SPI_SS_PIN); SPI_SSOUT |= _BV(SPI_SS_PIN);
_delay_us(1e6/SPI_BAUDRATE); _delay_us(2*1e6/SPI_BAUDRATE);
#endif #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 #ifndef SPI_MASTER
void spi_sla_handle_packet(){ 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_start_packet();
spi_mst_write_read(5,mst_buf); spi_mst_write_read(5,mst_buf);
spi_mst_end_packet(); spi_mst_end_packet();
spi_mst_packet_delay();
for(uint8_t i=0; i<5; ++i){ for(uint8_t i=0; i<5; ++i){
mst_buf[0] = 0; mst_buf[0] = 0;
mst_buf[1] = 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 if(mst_buf[1] == opcode && mst_buf[2] == addr){ // valid answer
return ((mst_buf[3] << 8) | mst_buf[4]); return ((mst_buf[3] << 8) | mst_buf[4]);
} }
spi_mst_packet_delay();
} }
// } // }
return 0xffff; // error-code 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; (*spi_proto_globals16[addr]) = data;
break; break;
case 6: 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. //TODO: prevent a function from being run several times because the message gets repeated.
break; break;
case 7: case 7:

@ -1,6 +1,7 @@
#include "filter.h" #include "filter.h"
#include <math.h> #include <math.h>
#include "debug.h"
Sensordata sensordata[4]; Sensordata sensordata[4];
float ambient_temp=25.; float ambient_temp=25.;
@ -13,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); // dbgLog("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;
@ -37,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 (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; int16_t data;
for(;;){ for(;;){
_delay_ms(4000);
dbgLog("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"); // dbgLog("starting temp measuring\n");
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);
@ -69,14 +70,15 @@ int __attribute__((noreturn)) main(void) {
data = mcpadc_get_data(); data = mcpadc_get_data();
process_thermocouple_value(data,active_sensor); process_thermocouple_value(data,active_sensor);
_delay_ms(1000);
} }
dbgLog("a"); dbgLog("a");
} }
dbgLog("now measuring offsets"); // dbgLog("now measuring offsets\n");
// 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); // dbgLog("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);
@ -84,7 +86,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", data); // dbgLog("retrieved offset data %i\n", data);
// TODO: what to do with the offset? // TODO: what to do with the offset?
offset_measure_stop(); offset_measure_stop();

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

Loading…
Cancel
Save