Merge branch 'master' of gitorious.ghostdub.de:avr/thermocouple

master
Dario Ernst 15 years ago
commit 1a824d85dd

@ -166,7 +166,7 @@ int cnt, vid, pid;
fprintf(stderr, "%c", rxIndex); fprintf(stderr, "%c", rxIndex);
} }
} }
usleep(1000); usleep(100);
} }
} else { } else {
usage(); usage();

@ -1,5 +1,5 @@
#define SPI_BAUDRATE 10000 #define SPI_BAUDRATE 30000
#define SPI_MASTER #define SPI_MASTER
#define SPI_SS_PORT D #define SPI_SS_PORT D
#define SPI_SS_PIN 7 #define SPI_SS_PIN 7

@ -2,14 +2,30 @@
#include <avr/io.h> #include <avr/io.h>
#include <avr/pgmspace.h> #include <avr/pgmspace.h>
#include <util/twi.h> #include <util/twi.h>
#include <util/delay.h>
#include "i2c_simple.h" #include "i2c_simple.h"
#include "debug.h"
//#define I2C_WAIT() while(!(TWCR & _BV(TWINT)))
#define I2C_WAIT() i2c_wait();
void inline i2c_wait(){
uint16_t cntr=0;
while(!(TWCR & _BV(TWINT))){
cntr++;
if(cntr >= 1000){
dbgLog("i2c waittime exceeded!\n");
}
}
}
#define I2C_WAIT() while(!(TWCR & _BV(TWINT)))
void i2c_init() void i2c_init()
{ {
TWBR = 32;//bit rate TWBR = 32;//bit rate: 100kbit
TWSR = 0;//Prescaler TWSR = 0;//Prescaler
// TWAR = 0x80;//our address 1000 000, don't listen to general call // TWAR = 0x80;//our address 1000 000, don't listen to general call
@ -53,6 +69,7 @@ uint8_t i2c_read(uint8_t addr, uint8_t len, uint8_t *data)
data[done] = TWDR; data[done] = TWDR;
done++; done++;
TWCR |= _BV(TWINT) | _BV(TWSTO); TWCR |= _BV(TWINT) | _BV(TWSTO);
_delay_us(20); // wait about 2 bit periods
return done; return done;
} }
@ -91,6 +108,7 @@ uint8_t i2c_write_i(uint8_t addr, uint8_t len, uint8_t *data, uint8_t stop)
} }
if(stop) {TWCR |= _BV(TWINT) | _BV(TWSTO);} if(stop) {TWCR |= _BV(TWINT) | _BV(TWSTO);}
_delay_us(20); // wait about 2 bit periods
return done; return done;
} }

@ -11,6 +11,9 @@ uint16_t bar;
uint16_t timertmp; uint16_t timertmp;
uint16_t temperatures[4]; uint16_t temperatures[4];
int32_t temp_avg_cumul;
int16_t temp_avg_count;
void baz() { void baz() {
foo++; foo++;
@ -77,9 +80,21 @@ int __attribute__((noreturn)) main(void) {
if(mcpadc_has_new_data()) { if(mcpadc_has_new_data()) {
temperatures[0] = mcpadc_get_data(); temperatures[0] = mcpadc_get_data();
temperatures[2]++; temperatures[2]++;
int16_t temp = temperatures[0];
temp_avg_cumul += temp;
temp_avg_count += 1;
} }
temperatures[1] = 22; temperatures[1] = 22;
} }
SOFTTIMER(2,500){
int32_t temp = temp_avg_cumul;
temp /= temp_avg_count;
temp_avg_count = 0; temp_avg_cumul = 0;
int32_t nV = (temp * 625);
int32_t mK = nV/39;
dbgLog("temp: %6li (%li µV, %li mK)\n",temp,nV/1000, mK);
}
} }
} }

Loading…
Cancel
Save