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

master
Nidan 15 years ago
commit 3a7ac07aae

@ -3,6 +3,7 @@
#include <avr/pgmspace.h>
#include <avr/eeprom.h>
#include <util/delay.h>
#include <util/atomic.h>
#include <stdio.h>
#include <usbdrv/usbdrv.h>
@ -14,6 +15,28 @@
static uint8_t newThermoData = 1;
static uint16_t thermoData[] = {1024, 814, 2475, 2243};
volatile uint16_t timer1_acc;
#define SOFTTIMERNUMS 4
uint16_t softtimer_last[SOFTTIMERNUMS];
void softtimer_reset(uint8_t timernum){
softtimer_last[SOFTTIMERNUMS] = timer1_acc;
}
uint8_t softtimer(uint8_t timernum, uint16_t interval){
uint16_t timer1_acc_tmp = timer1_acc; // because of volatile
if((uint16_t)(timer1_acc_tmp - (uint16_t)(softtimer_last[timernum]) >= interval )){
softtimer_last[timernum] = timer1_acc_tmp;
return(1);
}
return(0);
}
#define SOFTTIMER(n,a) if(softtimer((n),(a*4)))
void hardinit() {
@ -100,7 +123,9 @@ int __attribute__((noreturn)) main(void) {
for(;;){
usbPoll();
updateDisplay();
SOFTTIMER(1,100){
updateDisplay();
}
thermoData[0]=thermoData[0]+5;
thermoData[1]=thermoData[1]+15;
@ -108,8 +133,6 @@ int __attribute__((noreturn)) main(void) {
thermoData[3]=thermoData[3]+18;
i++; if(i%200 == 0) newThermoData = 1;
}
}
/*
@ -119,3 +142,16 @@ int __attribute__((noreturn)) main(void) {
asm volatile ("out %1, %0\n" : "=r" (sreg_store) : "I" (_SFR_IO_ADDR(SREG)));
reti();
}*/
ISR(TIMER1_OVF_vect,ISR_NOBLOCK){
uint16_t temp;
temp=timer1_acc;
temp++;
ATOMIC_BLOCK(ATOMIC_FORCEON){
timer1_acc=temp;
}
/* the ATOMIC is acutally only needed if timer1_acc is never read from an ISR, which
* is probably the case.
* ATOMIC_FORCEON: the ISR_NOBLOCK sets sei() a few cycles before.
*/
}

@ -1,15 +1,12 @@
/* Anschlüsse sind:
* B0 - 1wire
* B0 - LCD (RS)
* B1 - Kontrast-PWM
* B2 - Backlight-PWM
* B3-B5 - ISP
* C0-C1 - 2farb-LED
* C2 - LED
* C3-C4 - Knopf-drehung
* C5 - Knopf-taster
* C6 - ISP
* D0-6 - LCD (DB4-7, RS, R/W, EN)
* D7 - LED
* B3-B5 - ISP/SPI
* C0-5 - LCD (DB4-7, R/W, EN)
* D2,D4 - USB
* D7 - SPI (SS master)
*
*/
@ -30,63 +27,8 @@
#define BACKLIGHTPIN 2
// button handling
#define BUTTPIN PINC
#define BUTTLPIN 5
#define BUTTRPIN 4
#define BUTTTPIN 3
#define BUTTEV_PUSH 1
#define BUTT_BOUNCE 25 //approx ms debounce time
extern uint8_t buttonevent;
extern int8_t buttoninc; // how much the button turned.
// you might want to subtract turns you consumed since the variable
// is updated in an interrupt
//uint8_t volatile timer1_acc;
#define FLOWTEMP_MAX 100
#define FLOWTEMP_MIN 5
#define FLOWTEMP_DEFAULT 70
#define FLOWTEMP_ALARM_MIN 50
#define FLOWTEMP_ALARM_MAX 100
#define FLOWTEMP_ALARM_DEFAULT 87
#define FLOWTEMP_RANGE_MAX 40
#define FLOWTEMP_RANGE_DEFAULT 15
extern uint8_t flowtemp_alarm;
extern uint8_t flowtemp_range;
extern uint8_t flowtemp;
void set_display_brightness(uint8_t display_brightness);
void store_display_brightness(uint8_t new_brightness);
uint8_t load_display_brightness();
void set_display_contrast(uint8_t display_contrast);
void store_display_contrast(uint8_t new_contrast);
uint8_t load_display_contrast();
void set_flowtemp(uint8_t new_flowtemp);
void store_flowtemp(uint8_t new_flowtemp);
uint8_t load_flowtemp();
void set_flowtemp_range(uint8_t new_flowtemp_range);
void store_flowtemp_range(uint8_t new_flowtemp_range);
uint8_t load_flowtemp_range();
void set_flowtemp_alarm(uint8_t new_flowtemp_alarm);
void store_flowtemp_alarm(uint8_t new_flowtemp_alarm);
uint8_t load_flowtemp_alarm();
// clock
extern struct clockfmt {
uint8_t hour;
uint8_t minute;
uint8_t second;
} clock;
#endif //__MAIN_H

Loading…
Cancel
Save