From c1fcceee0a93d6b3793c72ca331b2aede3c98da2 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 10 Dec 2010 20:40:19 +0100 Subject: [PATCH 1/6] working on softtimer/display-oddity stuff --- firmware/Makefile | 2 +- firmware/display.c | 4 ---- firmware/display.h | 3 ++- firmware/main.c | 46 +++++++++++++++++++++++++--------------------- firmware/main.h | 3 +-- 5 files changed, 29 insertions(+), 29 deletions(-) diff --git a/firmware/Makefile b/firmware/Makefile index bed7b54..6a7a846 100644 --- a/firmware/Makefile +++ b/firmware/Makefile @@ -1,6 +1,6 @@ DEFINES += -DF_CPU=16000000 CFLAGS += -save-temps -CFLAGS += -std=gnu99 # implements C99, for +CFLAGS += -std=gnu99 -Wall # implements C99, for # this removes dead code and does global linker optimization #CFLAGS += -ffunction-sections -Wl,--gc-sections -Wl,--relax diff --git a/firmware/display.c b/firmware/display.c index ec56c27..3b9b18e 100644 --- a/firmware/display.c +++ b/firmware/display.c @@ -255,10 +255,6 @@ void display_bar(int8_t value, int8_t min, int8_t max) { } } - - - - void updateTemperature() { if(newThermoData==1) { newThermoData = 0; diff --git a/firmware/display.h b/firmware/display.h index 6447319..f65a79b 100644 --- a/firmware/display.h +++ b/firmware/display.h @@ -5,6 +5,7 @@ #include "lcd/lcd.h" #include "main.h" + #define LCD_CHAR_HALFBAR 0x01 #define LCD_CHAR_BAR 0x02 #define LCD_CHAR_DEGREE 0x03 @@ -33,6 +34,6 @@ extern void display_puthex(uint8_t outbyte); extern void display_bar(int8_t value, int8_t min, int8_t max); extern void display_putint(int16_t number); -void updateTemperature(); +extern void updateTemperature(); #endif diff --git a/firmware/main.c b/firmware/main.c index 4e0dda3..5f8b085 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -1,10 +1,10 @@ #include "main.h" -#define SOFTTIMERNUMS 4 +volatile uint16_t timer1_acc; uint16_t softtimer_last[SOFTTIMERNUMS]; void softtimer_reset(uint8_t timernum){ - softtimer_last[SOFTTIMERNUMS] = timer1_acc; + softtimer_last[timernum] = timer1_acc; } uint8_t softtimer(uint8_t timernum, uint16_t interval){ @@ -16,6 +16,7 @@ uint8_t softtimer(uint8_t timernum, uint16_t interval){ return(0); } +// SOFTTIMER( , ); #define SOFTTIMER(n,a) if(softtimer((n),(a*4))) @@ -35,6 +36,9 @@ void hardinit() { OCR1A = 15; // contrast OCR1B = 50; // brightness + + // enable softtimer isr + TIMSK1 |= _BV(TOIE1); // init LCD: lcd_init(1); @@ -51,27 +55,25 @@ void softinit() { int __attribute__((noreturn)) main(void) { - int i=0; hardinit(); softinit(); usbInit(); - display_puts("Hallo, Welt!\n\n"); - display_update(); - - for(;;){ usbPoll(); - SOFTTIMER(1,100){ - updateTemperature(); + SOFTTIMER(2,500) { + thermoData[0]=thermoData[0]+5; + thermoData[1]=thermoData[1]+15; + thermoData[2]=thermoData[2]+7; + thermoData[3]=thermoData[3]+18; + newThermoData = 1; + } + + SOFTTIMER(1,100) { + updateTemperature(); } - thermoData[0]=thermoData[0]+5; - thermoData[1]=thermoData[1]+15; - thermoData[2]=thermoData[2]+7; - thermoData[3]=thermoData[3]+18; - i++; if(i%200 == 0) newThermoData = 1; } } @@ -82,16 +84,18 @@ 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; - } + uint16_t tmp; + tmp=timer1_acc; + tmp++; + /* 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. */ -} + ATOMIC_BLOCK(ATOMIC_FORCEON){ + timer1_acc=tmp; + } +} diff --git a/firmware/main.h b/firmware/main.h index 213c57f..5008b1c 100644 --- a/firmware/main.h +++ b/firmware/main.h @@ -26,11 +26,10 @@ #include "spi.h" #include "usb.h" - static uint8_t newThermoData = 1; static uint16_t thermoData[] = {1024, 814, 2475, 2243}; -volatile uint16_t timer1_acc; +#define SOFTTIMERNUMS 4 #define LED1PORT PORTC #define LED1APIN 0 From bd37b567a3786b88b34ece6e330fb236abaab2fe Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 10 Dec 2010 20:47:14 +0100 Subject: [PATCH 2/6] finally works again --- firmware/display.h | 4 ++++ firmware/main.c | 6 +++++- firmware/main.h | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/firmware/display.h b/firmware/display.h index f65a79b..c085f61 100644 --- a/firmware/display.h +++ b/firmware/display.h @@ -11,6 +11,10 @@ #define LCD_CHAR_DEGREE 0x03 #define LCD_CHAR_BLANK 0x20 +extern uint8_t newThermoData1; +extern uint16_t thermoData[]; + + extern const prog_uint8_t lcd_halfbar_char[]; extern const prog_uint8_t lcd_bar_char[]; extern const prog_uint8_t lcd_degree_char[]; diff --git a/firmware/main.c b/firmware/main.c index 5f8b085..df2ee59 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -1,5 +1,9 @@ #include "main.h" +uint8_t newThermoData = 1; +uint16_t thermoData[] = {1024, 814, 2475, 2243}; + + volatile uint16_t timer1_acc; uint16_t softtimer_last[SOFTTIMERNUMS]; @@ -70,7 +74,7 @@ int __attribute__((noreturn)) main(void) { newThermoData = 1; } - SOFTTIMER(1,100) { + SOFTTIMER(1,250) { updateTemperature(); } diff --git a/firmware/main.h b/firmware/main.h index 5008b1c..fc9bc6a 100644 --- a/firmware/main.h +++ b/firmware/main.h @@ -26,8 +26,8 @@ #include "spi.h" #include "usb.h" -static uint8_t newThermoData = 1; -static uint16_t thermoData[] = {1024, 814, 2475, 2243}; +extern uint8_t newThermoData; +extern uint16_t thermoData[]; #define SOFTTIMERNUMS 4 From c3503c6b7938d17c259738f435e87ac37a23a0f1 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 10 Dec 2010 20:47:52 +0100 Subject: [PATCH 3/6] finally works again --- firmware/main.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/firmware/main.c b/firmware/main.c index df2ee59..e8f1835 100644 --- a/firmware/main.c +++ b/firmware/main.c @@ -3,7 +3,6 @@ uint8_t newThermoData = 1; uint16_t thermoData[] = {1024, 814, 2475, 2243}; - volatile uint16_t timer1_acc; uint16_t softtimer_last[SOFTTIMERNUMS]; @@ -21,7 +20,7 @@ uint8_t softtimer(uint8_t timernum, uint16_t interval){ } // SOFTTIMER( , ); -#define SOFTTIMER(n,a) if(softtimer((n),(a*4))) +#define SOFTTIMER(n,a) if(softtimer((n),(a*8))) void hardinit() { From 994bf4d7d8ec17903d8e53356634190c01e393b2 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 10 Dec 2010 21:04:28 +0100 Subject: [PATCH 4/6] updated todo --- TODO | 7 ++----- cmdline/read-temp.c | 8 ++++---- 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/TODO b/TODO index baa624c..7b6b24f 100644 --- a/TODO +++ b/TODO @@ -1,7 +1,7 @@ TODO für ersten funktionierenden Stand: Hardware: -- Analogteil +# Analogteil Software: - I2C-Code @@ -11,10 +11,7 @@ Software: Später: -- USB-Protokoll auf AVR -- USB-Client am Rechner -- Display-Code - PT1000 - Digitalansteuerung für muxer/offsetkompensatoren - Gehäuse -- Thermocouple-Buchsen +# Thermocouple-Buchsen diff --git a/cmdline/read-temp.c b/cmdline/read-temp.c index 1f960bc..449a6d8 100644 --- a/cmdline/read-temp.c +++ b/cmdline/read-temp.c @@ -74,8 +74,8 @@ int cnt, vid, pid; } rxValue = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); rxIndex = ((int)buffer[3] & 0xff) | (((int)buffer[2] & 0xff) << 8); - fprintf(stderr, "%3d.%02d*C||", rxValue/100, rxValue%100); - fprintf(stderr, "%3d.%02d*C\n", rxIndex/100, rxIndex%100); + fprintf(stderr, "%3d.%02d*C ", rxValue/100, rxValue%100); + fprintf(stderr, "%3d.%02d*C \n", rxIndex/100, rxIndex%100); cnt = usb_control_msg(handle, USB_TYPE_VENDOR | USB_RECIP_DEVICE | USB_ENDPOINT_IN, 2, value, index, buffer, sizeof(buffer), 5000); if(cnt < 0){ @@ -83,8 +83,8 @@ int cnt, vid, pid; } rxValue = ((int)buffer[1] & 0xff) | (((int)buffer[0] & 0xff) << 8); rxIndex = ((int)buffer[3] & 0xff) | (((int)buffer[2] & 0xff) << 8); - fprintf(stderr, "%3d.%02d*C||", rxValue/100, rxValue%100); - fprintf(stderr, "%3d.%02d*C\n", rxIndex/100, rxIndex%100); + fprintf(stderr, "%3d.%02d*C ", rxValue/100, rxValue%100); + fprintf(stderr, "%3d.%02d*C \n", rxIndex/100, rxIndex%100); usb_close(handle); From 4200e69a339714f248fa5859a0c3b0d5a0ae6260 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 10 Dec 2010 21:46:40 +0100 Subject: [PATCH 5/6] added SPI protocol --- documentation/SPI-Proto | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 documentation/SPI-Proto diff --git a/documentation/SPI-Proto b/documentation/SPI-Proto new file mode 100644 index 0000000..bf19dd5 --- /dev/null +++ b/documentation/SPI-Proto @@ -0,0 +1,26 @@ + 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 + +-------------+ +-------------+ +-------------+ +-------------+ + | OpCode | | Address | | ValueH | | ValueL | + +-------------+ +-------------+ +-------------+ +-------------+ + + +Where following values are Valid: +|--------------------------------------------------------------------------------------------------------------------------| +| Binary Hex Name Address ValueL ValueH Reply Description| +|--------------------------------------------------------------------------------------------------------------------------| +| 0000001 0x01 Read-Temp Number of None/Rand None/Rand A 16Bit Value Reads the | +| Thermometer Representing Temperature| +| Starting with 0 the Temperature | +|--------------------------------------------------------------------------------------------------------------------------| +| 0000002 0x02 Read-Var8 Number of the None/Rand None/Rand A 8Bit Value Reads 8Bit | +| var-DEFINE read from VAR Variable | +|--------------------------------------------------------------------------------------------------------------------------| +| 0000003 0x03 Read-Var16 Number of the None/Rand None/Rand A 16Bit Value Reads 16Bit| +| var-DEFINE read from VAR Variable | +|--------------------------------------------------------------------------------------------------------------------------| +| 0000004 0x04 Write-Var8 Number of the Value of Var None/Rand None/Rand Writes 8Bit| +| var-DEFINE to write Variable | +|--------------------------------------------------------------------------------------------------------------------------| +| 0000005 0x05 Write-Var16 Number of the Value of Var Value of Var None/Rand Writes 16 | +| var-DEFINE to write (HIGH) to write (LOW) Bit Var | +|--------------------------------------------------------------------------------------------------------------------------| From 9e41d6e261f96f36a6c647301942aad8b9e2d498 Mon Sep 17 00:00:00 2001 From: Dario Ernst Date: Fri, 10 Dec 2010 21:49:06 +0100 Subject: [PATCH 6/6] clearified --- documentation/SPI-Proto | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/documentation/SPI-Proto b/documentation/SPI-Proto index bf19dd5..980ee66 100644 --- a/documentation/SPI-Proto +++ b/documentation/SPI-Proto @@ -8,19 +8,19 @@ Where following values are Valid: |--------------------------------------------------------------------------------------------------------------------------| | Binary Hex Name Address ValueL ValueH Reply Description| |--------------------------------------------------------------------------------------------------------------------------| -| 0000001 0x01 Read-Temp Number of None/Rand None/Rand A 16Bit Value Reads the | +| 0000001 0x01 Read-Temp Number of zeroes/Rand zeroes/Rand A 16Bit Value Reads the | | Thermometer Representing Temperature| | Starting with 0 the Temperature | |--------------------------------------------------------------------------------------------------------------------------| -| 0000002 0x02 Read-Var8 Number of the None/Rand None/Rand A 8Bit Value Reads 8Bit | +| 0000002 0x02 Read-Var8 Number of the zeroes/Rand zeroes/Rand A 8Bit Value Reads 8Bit | | var-DEFINE read from VAR Variable | |--------------------------------------------------------------------------------------------------------------------------| -| 0000003 0x03 Read-Var16 Number of the None/Rand None/Rand A 16Bit Value Reads 16Bit| +| 0000003 0x03 Read-Var16 Number of the zeroes/Rand zeroes/Rand A 16Bit Value Reads 16Bit| | var-DEFINE read from VAR Variable | |--------------------------------------------------------------------------------------------------------------------------| -| 0000004 0x04 Write-Var8 Number of the Value of Var None/Rand None/Rand Writes 8Bit| +| 0000004 0x04 Write-Var8 Number of the Value of Var zeroes/Rand zeroes/Rand Writes 8Bit| | var-DEFINE to write Variable | |--------------------------------------------------------------------------------------------------------------------------| -| 0000005 0x05 Write-Var16 Number of the Value of Var Value of Var None/Rand Writes 16 | +| 0000005 0x05 Write-Var16 Number of the Value of Var Value of Var zeroes/Rand Writes 16 | | var-DEFINE to write (HIGH) to write (LOW) Bit Var | |--------------------------------------------------------------------------------------------------------------------------|