]> jspc29.x-matter.uni-frankfurt.de Git - avr.git/commitdiff
added powerswitch files, first pt100 files and lcdlib
authorJan Michel <j.michel@gsi.de>
Mon, 3 Aug 2015 16:19:38 +0000 (18:19 +0200)
committerJan Michel <j.michel@gsi.de>
Mon, 3 Aug 2015 16:19:38 +0000 (18:19 +0200)
16 files changed:
powerswitch/Makefile [new file with mode: 0644]
powerswitch/PowerSwitch.c [new file with mode: 0755]
pt100/Makefile [new file with mode: 0644]
pt100/lcdlib/Fonts/digits_24px.c [new file with mode: 0644]
pt100/lcdlib/Fonts/digits_32px.c [new file with mode: 0644]
pt100/lcdlib/Fonts/font_fixed_16bit.c [new file with mode: 0644]
pt100/lcdlib/Fonts/font_proportional_16px.c [new file with mode: 0644]
pt100/lcdlib/Fonts/font_proportional_8px.c [new file with mode: 0644]
pt100/lcdlib/Fonts/symbols_16px.c [new file with mode: 0644]
pt100/lcdlib/Fonts/symbols_8px.c [new file with mode: 0644]
pt100/lcdlib/font.c [new file with mode: 0644]
pt100/lcdlib/font.h [new file with mode: 0644]
pt100/lcdlib/lcd-color-graphic.c [new file with mode: 0644]
pt100/lcdlib/lcd-color-graphic.h [new file with mode: 0644]
pt100/main.c [new file with mode: 0644]
pt100/main.h [new file with mode: 0644]

diff --git a/powerswitch/Makefile b/powerswitch/Makefile
new file mode 100644 (file)
index 0000000..143fc01
--- /dev/null
@@ -0,0 +1,223 @@
+# Hey Emacs, this is a -*- makefile -*-
+
+# AVR-GCC Makefile template, derived from the WinAVR template (which
+# is public domain), believed to be neutral to any flavor of "make"
+# (GNU make, BSD make, SysV make)
+
+
+MCU = attiny441
+FORMAT = ihex
+TARGET = PowerSwitch
+SRC = $(TARGET).c
+ASRC = 
+OPT = s
+
+# Name of this Makefile (used for "make depend").
+MAKEFILE = Makefile
+
+# Debugging format.
+# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
+# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
+DEBUG = stabs
+
+# Compiler flag to set the C Standard level.
+# c89   - "ANSI" C
+# gnu89 - c89 plus GCC extensions
+# c99   - ISO C99 standard (not yet fully implemented)
+# gnu99 - c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS =
+
+# Place -I options here
+CINCS =
+
+
+CDEBUG = -g$(DEBUG)
+CWARN = -Wall -Wstrict-prototypes
+CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA)
+
+
+#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#Additional libraries.
+
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+PRINTF_LIB = 
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+SCANF_LIB = 
+
+MATH_LIB = -lm
+
+# External memory options
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+# Programming support using avrdude. Settings and variables.
+
+AVRDUDE_PROGRAMMER = usbtiny
+AVRDUDE_PORT = usb
+
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER)
+
+
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+MV = mv -f
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+# Default target.
+all: build
+
+build: elf hex eep
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+       $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+       $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof
+
+
+.SUFFIXES: .elf .hex .eep .lss .sym
+
+.elf.hex:
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+.elf.eep:
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+       --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+.elf.lss:
+       $(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+.elf.sym:
+       $(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+$(TARGET).elf: $(OBJ)
+       $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+.c.o:
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+.c.s:
+       $(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+.S.o:
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+
+
+# Target: clean project.
+clean:
+       $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \
+       $(TARGET).map $(TARGET).sym $(TARGET).lss \
+       $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d)
+
+depend:
+       if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
+       then \
+               sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
+                       $(MAKEFILE).$$$$ && \
+               $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
+       fi
+       echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
+               >> $(MAKEFILE); \
+       $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
+
+.PHONY:        all build elf hex eep lss sym program coff extcoff clean depend
diff --git a/powerswitch/PowerSwitch.c b/powerswitch/PowerSwitch.c
new file mode 100755 (executable)
index 0000000..1f414d9
--- /dev/null
@@ -0,0 +1,370 @@
+#define F_CPU 6000000UL\r
+\r
+#include <avr/interrupt.h>\r
+#include <util/delay.h>\r
+#include <avr/io.h>\r
+#include <avr/eeprom.h>\r
+#include <string.h>\r
+\r
+#define FIRMWARE_VERSION 0x010\r
+\r
+//A0 Aref    In\r
+//A1 Adc2    In  (ADC1)\r
+//A2 Relay2  Out\r
+//A3 Relay1  Out\r
+//A4 RX      In\r
+//A5 TX      Out\r
+//A6 Switch1 In\r
+//A7 Adc1    In  (ADC7)\r
+\r
+//B0 X       --\r
+//B1 X       --\r
+//B2 Switch2 In \r
+//B3 Reset   --\r
+\r
+//all commands end in \n\r
+// cc          -- channel address in hex \r
+//Scc(0|1|/)   -- switch channel off/on/toggle\r
+//Scc?         -- read channel status - 2nd char: 'e' in case of overcurrent, 3rd char: enable 1/0\r
+//Ccc?         -- read current\r
+//Dcc?         -- read averaged current\r
+//Lccxxx       -- set current limit (hex)\r
+//Lcc?         -- read current limit\r
+//Axxx         -- answer - three hex digits or chars\r
+//Occ(0|1|2|3) -- switch ADC & set max scale:  off|2.2Vref|4.1Vref|VCCref (one setting for both ports)\r
+//Pcc(0|1)     -- Do a automatic power cycle (2 seconds long)\r
+//Rcc?         -- read ADC measurement of internal 1.1V reference (one register)\r
+//Icc?         -- Firmware Info\r
+\r
+#define STARTTX(i) txcnt = (i);UCSR1B |= (1<< UDRIE1)\r
+#define ISMYADDR() (rxbuf[1] == '0' && (rxbuf[2] == '0' || rxbuf[2] == '1') )\r
+\r
+volatile uint8_t settings_changed = 0;\r
+uint8_t  output_enable = 0x3;\r
+uint8_t  output_error = 0;\r
+uint8_t  adc_enable = 1;\r
+uint16_t adc[2];\r
+uint16_t avgadc[2] = {0,0};\r
+uint8_t  countdown[2] = {0,0};\r
+uint16_t adc_reference = 0;\r
+\r
+uint8_t rxcnt = 0, txcnt = 0, txpoint = 0;\r
+uint8_t rxbuf[7];\r
+uint8_t txbuf[7];\r
+uint16_t limit[2] = {0x0800,0x0800};\r
+\r
+\r
+uint8_t nib_to_hex(uint16_t in, uint8_t nib) {\r
+  uint8_t t = (in >> (nib*4)) & 0xF;\r
+  if (t <= 9) {return t + 0x30;}\r
+  return t - 10 + 0x61;\r
+  }\r
\r
+uint8_t hex_to_int(uint8_t h) { //assumes valid number\r
+  if (h < 0x40) return h-0x30;\r
+  if (h < 0x50) return h-0x41+10;\r
+                return h-0x61+10;\r
+  }\r
\r
+void sub2(uint8_t* c1, uint8_t* c2) {\r
+  uint8_t b = hex_to_int(*c1)*16 + hex_to_int(*c2);\r
+  b -= 2;\r
+  *c1 = nib_to_hex(b,1);\r
+  *c2 = nib_to_hex(b,0);\r
+  }\r
+\r
+void forward_msg(uint8_t i) {\r
+  sub2(&rxbuf[1],&rxbuf[2]);\r
+  memcpy ((uint8_t*)txbuf,(uint8_t*)rxbuf,i);\r
+  STARTTX(i);\r
+  }  \r
+\r
+uint8_t is_my_address(uint8_t s) {\r
+  if (ISMYADDR()) {\r
+    rxbuf[2] -= '0';\r
+    return 1;\r
+    }\r
+  else {\r
+    forward_msg(s);\r
+    return 0;\r
+    }\r
+  }\r
+  \r
+void send_answer_hex(uint16_t v) {\r
+  txbuf[0]='A';\r
+  txbuf[1]=nib_to_hex(v,2);\r
+  txbuf[2]=nib_to_hex(v,1);\r
+  txbuf[3]=nib_to_hex(v,0);\r
+  txbuf[4]='\n';\r
+  STARTTX(5);\r
+  }\r
+  \r
+void send_answer_chars(uint8_t a, uint8_t b, uint8_t c) {\r
+  txbuf[0]='A';\r
+  txbuf[1]=a;\r
+  txbuf[2]=b;\r
+  txbuf[3]=c;\r
+  txbuf[4]='\n';\r
+  STARTTX(5);\r
+  }\r
+\r
+  \r
+void switchoutput(uint8_t chan, int8_t to) {\r
+  if(to == -1) {\r
+    output_enable ^= (1<<chan);\r
+       output_error  &= ~(1<<chan);\r
+    }\r
+  else if (to == 0 || to == -2) {\r
+    output_enable &= ~(1<<chan);\r
+    }\r
+  else if (to == 1) {\r
+    output_enable |=  (1<<chan);\r
+       output_error  &= ~(1<<chan);\r
+       }\r
+\r
+  if(to >= -1) {settings_changed |= 4;}\r
+  \r
+  uint8_t en1 = ((output_enable & 1) && !(output_error & 1))?1:0;  //switched for open drain version\r
+  uint8_t en2 = ((output_enable & 2) && !(output_error & 2))?1:0;\r
+  \r
+  PORTA &= ~((1<<2) | (1<<3));\r
+  DDRA  = (DDRA & ~(3<<2)) | ((en1&1)<<3) | ((en2&1)<<2);\r
+  //PORTA = (PORTA & ~(3<<2)) | ((en1&1)<<3) | ((en2&1)<<2);\r
+\r
+  }\r
+\r
+void correct_adc(uint8_t channel) {\r
+    if(adc_enable == 1) return;\r
+    if(adc_enable == 2) {\r
+      adc[channel] = adc[channel]*2 - (adc[channel]>>3);\r
+      }\r
+    }\r
+  \r
+ISR(TIMER0_OVF_vect) {\r
+  static uint8_t dwncnt[2] = {0,0};\r
+  if(!(PINA & 0x40)) {dwncnt[0]++;} else {dwncnt[0] = 0;}\r
+  if(!(PINB & 0x04)) {dwncnt[1]++;} else {dwncnt[1] = 0;}\r
+         \r
+       \r
+  for(uint8_t i=0; i<=1;i++) {\r
+    if(dwncnt[i] == 50) {switchoutput(i,-1);}    \r
+    if(countdown[i] != 0) {\r
+      if(countdown[i] == 1) {\r
+        switchoutput(i,-1);\r
+        }\r
+      countdown[i]--;\r
+      }\r
+       }\r
+  \r
+  if(adc_enable) {ADCSRA |= (1<<ADSC);}\r
+  asm volatile("wdr");\r
+  }  \r
+  \r
+ISR(ADC_vect) {\r
+  static uint8_t channel = 0;\r
+  if(channel == 0) { \r
+    adc_reference = ADC;\r
+    ADMUXA = 7;  \r
+    ADCSRA |= (1<<ADSC); \r
+    channel = 1;\r
+    }\r
+  else if(channel == 1) { \r
+    adc[0] = ADC; \r
+    correct_adc(0);\r
+    ADMUXA = 1;  \r
+    ADCSRA |= (1<<ADSC); \r
+    channel = 2;\r
+    avgadc[0] -= avgadc[0]/8;\r
+    avgadc[0] += adc[0];\r
+    if(limit[0]*8<avgadc[0]) {\r
+      output_error |= 1;\r
+      switchoutput(0,-2);\r
+      }  \r
+    }\r
+  else if(channel == 2) { \r
+    adc[1] = ADC; \r
+    correct_adc(1);\r
+    ADMUXA = 0xD;\r
+    channel = 0;\r
+    avgadc[1] -= avgadc[1]/8;\r
+    avgadc[1] += adc[1];\r
+    if(limit[1]*8<avgadc[1]) {\r
+      output_error |= 2;\r
+      switchoutput(1,-2);\r
+      }    \r
+    }\r
+  }\r
+\r
+ISR(USART1_UDRE_vect) {\r
+  UDR1 = txbuf[txpoint++];\r
+  if(--txcnt == 0 || txpoint > 7) {  \r
+    txpoint = 0;\r
+    txcnt = 0;\r
+    UCSR1B &= ~(1<< UDRIE1);\r
+    }\r
+  }\r
+  \r
+ISR(USART1_RX_vect) {\r
+  uint8_t buf = UDR1;\r
+  if (rxcnt != 0 || (buf == 'S' || buf == 'A' || buf == 'L' || buf == 'C' || buf == 'I'\r
+                                || buf == 'D' || buf == 'O' || buf == 'P' || buf == 'R')) {\r
+    rxbuf[rxcnt++] = buf;\r
+    }\r
+  if (buf == '\n' || buf == '\r') {\r
+\r
+\r
+    if(rxcnt == 5) { //4 letter commands\r
+//Forward any incoming 4 letter answer    \r
+      if (rxbuf[0] == 'A') {\r
+        memcpy ((uint8_t*)txbuf,(uint8_t*)rxbuf,5);\r
+        STARTTX(5);\r
+        }\r
+        \r
+//Switch command  \r
+      if (rxbuf[0] == 'S' && is_my_address(5)) {  \r
+        if (rxbuf[3] != '?') {\r
+          switchoutput(rxbuf[2],rxbuf[3]-'0');\r
+          }\r
+        send_answer_chars('0', (output_error  & (1<<rxbuf[2]))?'e':'0', \r
+                               (output_enable & (1<<rxbuf[2]))?'1':'0');      \r
+        }\r
+\r
+//Power cycle command\r
+      if (rxbuf[0] == 'P' && is_my_address(5)) {  \r
+        if (rxbuf[3] != '?') {\r
+          switchoutput(rxbuf[2],rxbuf[3]-'0');\r
+          countdown[rxbuf[2]] = 200;\r
+          }\r
+        send_answer_chars('0', (output_error  & (1<<rxbuf[2]))?'e':'0', \r
+                               (output_enable & (1<<rxbuf[2]))?'1':'0');      \r
+        }\r
+        \r
+//Read current command\r
+      if (rxbuf[0] == 'C' && rxbuf[3] == '?' && is_my_address(5)) { \r
+        if(adc_enable == 3) {  send_answer_hex(adc[rxbuf[2]]+0x800);  }\r
+        else                {  send_answer_hex(adc[rxbuf[2]]);        }\r
+        }\r
+        \r
+//Read average current command\r
+      if (rxbuf[0] == 'D' && rxbuf[3] == '?' && is_my_address(5)) {\r
+        if(adc_enable == 3) {  send_answer_hex(avgadc[rxbuf[2]]/8+0x800);  }\r
+        else                {  send_answer_hex(avgadc[rxbuf[2]]/8);        }\r
+        }\r
+\r
+//Read firmware info\r
+      if (rxbuf[0] == 'I' && rxbuf[3] == '?' && is_my_address(5)) {\r
+           send_answer_hex(FIRMWARE_VERSION);\r
+        }\r
+        \r
+//Switch ADC\r
+      if (rxbuf[0] == 'O' && is_my_address(5)) {\r
+               if(rxbuf[3] != '?')\r
+                 adc_enable = rxbuf[3] - '0';\r
+        send_answer_hex(adc_enable);\r
+        settings_changed |= 8;\r
+        if (adc_enable == 1)  ADMUXB = (6 << REFS0);   //2.2V reference, with capacitor\r
+        if (adc_enable == 2)  ADMUXB = (7 << REFS0);   //4.096V as reference\r
+        if (adc_enable == 3)  ADMUXB = (0 << REFS0);   //Vcc as reference\r
+        }\r
+      \r
+//Read current limit    \r
+      if (rxbuf[0] == 'L' && rxbuf[3] == '?' && is_my_address(5)) {\r
+        send_answer_hex(limit[rxbuf[2]]);      \r
+        } \r
+\r
+//Read reference value\r
+      if (rxbuf[0] == 'R' && rxbuf[3] == '?' && is_my_address(5)) {\r
+        send_answer_hex(adc_reference);      \r
+        } \r
+      }\r
+      \r
+      \r
+//Set current limit\r
+    if (rxcnt == 7 && rxbuf[0] == 'L' && is_my_address(7)) {\r
+      if(rxbuf[3] != '?') {\r
+        uint16_t lim = hex_to_int(rxbuf[3])*256 + hex_to_int(rxbuf[4])*16 + hex_to_int(rxbuf[5]);\r
+        limit[rxbuf[2]] = lim;\r
+        }\r
+      send_answer_hex(limit[rxbuf[2]]); \r
+      settings_changed |= rxbuf[2]+1;        \r
+      }\r
+    }      \r
+    \r
+  if (rxcnt >= 7 || buf == '\n' || buf == '\r') { rxcnt = 0; }  \r
+    \r
+} \r
+\r
+\r
+  \r
+__attribute__((naked)) int main(void) {\r
+       // Configure ports\r
+       \r
+  PORTA = 0b00001100;\r
+  PUEA  = 0b01010000;\r
+  DDRA  = 0b00101100; \r
+  \r
+  DDRB  = 0b00000000;\r
+  PUEB  = 0b00001100;\r
+  PORTB = 0b00000000;\r
+  \r
+  output_enable = eeprom_read_byte((uint8_t*)0x24);\r
+  switchoutput(0,-3); \r
+  limit[0]   = eeprom_read_byte((uint8_t*)0x21)<<8;\r
+  limit[0]  |= eeprom_read_byte((uint8_t*)0x20);\r
+  limit[1]   = eeprom_read_byte((uint8_t*)0x23)<<8;\r
+  limit[1]  |= eeprom_read_byte((uint8_t*)0x22);  \r
+  adc_enable = eeprom_read_byte((uint8_t*)0x25);\r
+  \r
+  //CCP = 0xD8;        //allow writing of CLKPR\r
+  CLKPR = (0 << CLKPS0); // no prescaler  \r
+  PRR   =  (1 << PRTWI)  | (0 << PRUSART1) | (1 << PRUSART0) | (1 << PRSPI) \r
+          |(1 << PRTIM2) | (1 << PRTIM1)   | (0 << PRTIM0)   | (0 << PRADC);  \r
+   \r
+  TCCR0B = (4 << CS00);  //prescaler 256 -> 6M/256*256 = 91.5 Hz\r
+  TIMSK0 = (1 << TOIE0); //Overflow interrupt`\r
+  \r
+  ADMUXA = 7;  //(1 (Out2),7 (Out1))\r
+  if (adc_enable == 1)  ADMUXB = (6 << REFS0);   //2.2V reference, with capacitor\r
+  if (adc_enable == 2)  ADMUXB = (7 << REFS0);   //4.096V reference\r
+  if (adc_enable == 3)  ADMUXB = (0 << REFS0);   //Vcc reference\r
+  ADCSRA = (1 << ADEN) | (1 << ADSC) | (1 << ADIE) | (6 << ADPS0); //enable, start, irq, /128\r
+  ADCSRB = 0;\r
+  DIDR0  = (1<<ADC1D) | (1<< ADC7D); //disable digital inputs\r
+  \r
+  UCSR1A = (1 << U2X1);\r
+  UCSR1B = (1 << RXCIE1) | (0 << TXCIE1) | (0 << RXEN1) | (1 << TXEN1);\r
+  UCSR1C = (3 << UCSZ10); //8 Bit\r
+  UBRR1  = 0x0C; //57600\r
+  \r
+  _delay_ms(100);\r
+  UCSR1B |= (1 << RXEN1);\r
+\r
+  CCP = 0xD8;\r
+  WDTCSR = (1<<WDE) | (5<<WDP0);  //Watchdog at .5 seconds\r
+  sei();  \r
+  \r
+  \r
+  while(1) {\r
+    _delay_ms(3000);  \r
+    if(settings_changed != 0) {\r
+      if (settings_changed & 1) {\r
+        settings_changed &= ~1;\r
+        eeprom_update_byte((uint8_t*)0x20,limit[0]&0xFF);\r
+        eeprom_update_byte((uint8_t*)0x21,(limit[0]>>8)&0xFF);\r
+        }\r
+      if (settings_changed & 2) {\r
+        settings_changed &= ~2;\r
+        eeprom_update_byte((uint8_t*)0x22,limit[1]&0xFF);\r
+        eeprom_update_byte((uint8_t*)0x23,(limit[1]>>8)&0xFF);\r
+        }\r
+      if (settings_changed & 4) {\r
+        settings_changed &= ~4;\r
+        eeprom_update_byte((uint8_t*)0x24,output_enable);\r
+        }\r
+      if (settings_changed & 8) {\r
+        settings_changed &= ~8;\r
+        eeprom_update_byte((uint8_t*)0x25,adc_enable);\r
+        }\r
+      }\r
+    }\r
+  }
\ No newline at end of file
diff --git a/pt100/Makefile b/pt100/Makefile
new file mode 100644 (file)
index 0000000..143fc01
--- /dev/null
@@ -0,0 +1,223 @@
+# Hey Emacs, this is a -*- makefile -*-
+
+# AVR-GCC Makefile template, derived from the WinAVR template (which
+# is public domain), believed to be neutral to any flavor of "make"
+# (GNU make, BSD make, SysV make)
+
+
+MCU = attiny441
+FORMAT = ihex
+TARGET = PowerSwitch
+SRC = $(TARGET).c
+ASRC = 
+OPT = s
+
+# Name of this Makefile (used for "make depend").
+MAKEFILE = Makefile
+
+# Debugging format.
+# Native formats for AVR-GCC's -g are stabs [default], or dwarf-2.
+# AVR (extended) COFF requires stabs, plus an avr-objcopy run.
+DEBUG = stabs
+
+# Compiler flag to set the C Standard level.
+# c89   - "ANSI" C
+# gnu89 - c89 plus GCC extensions
+# c99   - ISO C99 standard (not yet fully implemented)
+# gnu99 - c99 plus GCC extensions
+CSTANDARD = -std=gnu99
+
+# Place -D or -U options here
+CDEFS =
+
+# Place -I options here
+CINCS =
+
+
+CDEBUG = -g$(DEBUG)
+CWARN = -Wall -Wstrict-prototypes
+CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums
+#CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
+CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA)
+
+
+#ASFLAGS = -Wa,-adhlns=$(<:.S=.lst),-gstabs 
+
+
+#Additional libraries.
+
+# Minimalistic printf version
+PRINTF_LIB_MIN = -Wl,-u,vfprintf -lprintf_min
+
+# Floating point printf version (requires MATH_LIB = -lm below)
+PRINTF_LIB_FLOAT = -Wl,-u,vfprintf -lprintf_flt
+
+PRINTF_LIB = 
+
+# Minimalistic scanf version
+SCANF_LIB_MIN = -Wl,-u,vfscanf -lscanf_min
+
+# Floating point + %[ scanf version (requires MATH_LIB = -lm below)
+SCANF_LIB_FLOAT = -Wl,-u,vfscanf -lscanf_flt
+
+SCANF_LIB = 
+
+MATH_LIB = -lm
+
+# External memory options
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# used for variables (.data/.bss) and heap (malloc()).
+#EXTMEMOPTS = -Wl,--section-start,.data=0x801100,--defsym=__heap_end=0x80ffff
+
+# 64 KB of external RAM, starting after internal RAM (ATmega128!),
+# only used for heap (malloc()).
+#EXTMEMOPTS = -Wl,--defsym=__heap_start=0x801100,--defsym=__heap_end=0x80ffff
+
+EXTMEMOPTS =
+
+#LDMAP = $(LDFLAGS) -Wl,-Map=$(TARGET).map,--cref
+LDFLAGS = $(EXTMEMOPTS) $(LDMAP) $(PRINTF_LIB) $(SCANF_LIB) $(MATH_LIB)
+
+
+# Programming support using avrdude. Settings and variables.
+
+AVRDUDE_PROGRAMMER = usbtiny
+AVRDUDE_PORT = usb
+
+AVRDUDE_WRITE_FLASH = -U flash:w:$(TARGET).hex
+#AVRDUDE_WRITE_EEPROM = -U eeprom:w:$(TARGET).eep
+
+
+# Uncomment the following if you want avrdude's erase cycle counter.
+# Note that this counter needs to be initialized first using -Yn,
+# see avrdude manual.
+#AVRDUDE_ERASE_COUNTER = -y
+
+# Uncomment the following if you do /not/ wish a verification to be
+# performed after programming the device.
+#AVRDUDE_NO_VERIFY = -V
+
+# Increase verbosity level.  Please use this when submitting bug
+# reports about avrdude. See <http://savannah.nongnu.org/projects/avrdude> 
+# to submit bug reports.
+#AVRDUDE_VERBOSE = -v -v
+
+AVRDUDE_BASIC = -p $(MCU) -P $(AVRDUDE_PORT) -c $(AVRDUDE_PROGRAMMER)
+AVRDUDE_FLAGS = $(AVRDUDE_BASIC) $(AVRDUDE_NO_VERIFY) $(AVRDUDE_VERBOSE) $(AVRDUDE_ERASE_COUNTER)
+
+
+CC = avr-gcc
+OBJCOPY = avr-objcopy
+OBJDUMP = avr-objdump
+SIZE = avr-size
+NM = avr-nm
+AVRDUDE = avrdude
+REMOVE = rm -f
+MV = mv -f
+
+# Define all object files.
+OBJ = $(SRC:.c=.o) $(ASRC:.S=.o) 
+
+# Define all listing files.
+LST = $(ASRC:.S=.lst) $(SRC:.c=.lst)
+
+# Combine all necessary flags and optional flags.
+# Add target processor to flags.
+ALL_CFLAGS = -mmcu=$(MCU) -I. $(CFLAGS)
+ALL_ASFLAGS = -mmcu=$(MCU) -I. -x assembler-with-cpp $(ASFLAGS)
+
+
+# Default target.
+all: build
+
+build: elf hex eep
+
+elf: $(TARGET).elf
+hex: $(TARGET).hex
+eep: $(TARGET).eep
+lss: $(TARGET).lss 
+sym: $(TARGET).sym
+
+
+# Program the device.  
+program: $(TARGET).hex $(TARGET).eep
+       $(AVRDUDE) $(AVRDUDE_FLAGS) $(AVRDUDE_WRITE_FLASH) $(AVRDUDE_WRITE_EEPROM)
+
+
+
+
+# Convert ELF to COFF for use in debugging / simulating in AVR Studio or VMLAB.
+COFFCONVERT=$(OBJCOPY) --debugging \
+--change-section-address .data-0x800000 \
+--change-section-address .bss-0x800000 \
+--change-section-address .noinit-0x800000 \
+--change-section-address .eeprom-0x810000 
+
+
+coff: $(TARGET).elf
+       $(COFFCONVERT) -O coff-avr $(TARGET).elf $(TARGET).cof
+
+
+extcoff: $(TARGET).elf
+       $(COFFCONVERT) -O coff-ext-avr $(TARGET).elf $(TARGET).cof
+
+
+.SUFFIXES: .elf .hex .eep .lss .sym
+
+.elf.hex:
+       $(OBJCOPY) -O $(FORMAT) -R .eeprom $< $@
+
+.elf.eep:
+       -$(OBJCOPY) -j .eeprom --set-section-flags=.eeprom="alloc,load" \
+       --change-section-lma .eeprom=0 -O $(FORMAT) $< $@
+
+# Create extended listing file from ELF output file.
+.elf.lss:
+       $(OBJDUMP) -h -S $< > $@
+
+# Create a symbol table from ELF output file.
+.elf.sym:
+       $(NM) -n $< > $@
+
+
+
+# Link: create ELF output file from object files.
+$(TARGET).elf: $(OBJ)
+       $(CC) $(ALL_CFLAGS) $(OBJ) --output $@ $(LDFLAGS)
+
+
+# Compile: create object files from C source files.
+.c.o:
+       $(CC) -c $(ALL_CFLAGS) $< -o $@ 
+
+
+# Compile: create assembler files from C source files.
+.c.s:
+       $(CC) -S $(ALL_CFLAGS) $< -o $@
+
+
+# Assemble: create object files from assembler source files.
+.S.o:
+       $(CC) -c $(ALL_ASFLAGS) $< -o $@
+
+
+
+# Target: clean project.
+clean:
+       $(REMOVE) $(TARGET).hex $(TARGET).eep $(TARGET).cof $(TARGET).elf \
+       $(TARGET).map $(TARGET).sym $(TARGET).lss \
+       $(OBJ) $(LST) $(SRC:.c=.s) $(SRC:.c=.d)
+
+depend:
+       if grep '^# DO NOT DELETE' $(MAKEFILE) >/dev/null; \
+       then \
+               sed -e '/^# DO NOT DELETE/,$$d' $(MAKEFILE) > \
+                       $(MAKEFILE).$$$$ && \
+               $(MV) $(MAKEFILE).$$$$ $(MAKEFILE); \
+       fi
+       echo '# DO NOT DELETE THIS LINE -- make depend depends on it.' \
+               >> $(MAKEFILE); \
+       $(CC) -M -mmcu=$(MCU) $(CDEFS) $(CINCS) $(SRC) $(ASRC) >> $(MAKEFILE)
+
+.PHONY:        all build elf hex eep lss sym program coff extcoff clean depend
diff --git a/pt100/lcdlib/Fonts/digits_24px.c b/pt100/lcdlib/Fonts/digits_24px.c
new file mode 100644 (file)
index 0000000..e0af34c
--- /dev/null
@@ -0,0 +1,118 @@
+/*
+    created with FontEditor written by H. Reddmann   HaReddmann at t-online dot de
+    using template file by J. Michel     jan at mueschelsoft.de
+
+    File Name           : digits_24px.c
+    Date                : 13.03.2010
+    Font size in bytes  : 0x05AC, 1452
+    Font width          : 19
+    Font height         : 24
+    Font first char     : 0x25
+    Font last char      : 0xBE
+    Font bits per pixel : 1
+*/
+
+#include "../font.h"
+#ifdef FONTS_INCLUDE_digits_24px
+
+
+
+const uint8_t digits_24px_data[] PROGMEM = {
+    0x12, 0x00, 0x03, 0x05, 0x05, 0x00, 0x0D, 0x06, 0x08, 0x04, 0x0E, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 
+    0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x04, 0x00, 0x11, 0x11, 0x11, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x0D, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x0D, 0x09, 0x09, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x11, 0x11, 0x11, 
+    0xF0, 0x00, 0x00, 0xFC, 0x83, 0x01, 0x0C, 0xC3, 0x00, 0x06, 0xC6, 0x00, 0x06, 0x46, 0x00, 0x06, 
+    0x66, 0x00, 0x06, 0x26, 0x00, 0x0C, 0x33, 0x00, 0xFC, 0x33, 0x1E, 0xF0, 0x98, 0x7F, 0x00, 0x98, 
+    0x61, 0x00, 0xC8, 0xC0, 0x00, 0xCC, 0xC0, 0x00, 0xC4, 0xC0, 0x00, 0xC6, 0xC0, 0x00, 0x86, 0x61, 
+    0x00, 0x83, 0x7F, 0x00, 0x00, 0x1E, 0xFE, 0x01, 0x00, 0xFE, 0x01, 0x00, 0xFE, 0x01, 0x00, 0x00, 
+    0xFF, 0x01, 0xF0, 0xFF, 0x1F, 0xF8, 0xFF, 0x3F, 0x7C, 0x00, 0x7C, 0x0C, 0x00, 0x60, 0x0C, 0x00, 
+    0x60, 0x7C, 0x00, 0x7C, 0xF8, 0xFF, 0x3F, 0xF0, 0xFF, 0x1F, 0x00, 0xFF, 0x01, 0x00, 0x38, 0x00, 
+    0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0xE0, 0xFF, 0x0F, 0xE0, 
+    0xFF, 0x0F, 0xE0, 0xFF, 0x0F, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 
+    0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xF0, 0x00, 0x80, 0x7F, 0x00, 0x80, 0x3F, 
+    0x00, 0x80, 0x0F, 0x00, 0x80, 0x07, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 
+    0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x00, 
+    0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x80, 0x00, 0x00, 0xE0, 
+    0x00, 0x00, 0xFC, 0x00, 0x00, 0x7F, 0x00, 0xC0, 0x1F, 0x00, 0xF0, 0x03, 0x00, 0xFC, 0x00, 0x00, 
+    0x3F, 0x00, 0xE0, 0x0F, 0x00, 0xF8, 0x03, 0x00, 0xFE, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0x00, 
+    0x00, 0x01, 0x00, 0x00, 0xC0, 0xFF, 0x01, 0xF0, 0xFF, 0x07, 0xFC, 0xFF, 0x1F, 0x7E, 0x00, 0x3F, 
+    0x0E, 0x00, 0x3C, 0x0F, 0x00, 0x78, 0x07, 0x08, 0x70, 0x07, 0x1C, 0x70, 0x07, 0x08, 0x70, 0x0F, 
+    0x00, 0x78, 0x0E, 0x00, 0x38, 0x7E, 0x00, 0x3F, 0xFC, 0xFF, 0x1F, 0xF0, 0xFF, 0x07, 0xC0, 0xFF, 
+    0x01, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x0E, 0x00, 0x70, 0x0E, 0x00, 0x70, 0x0F, 0x00, 0x70, 
+    0x07, 0x00, 0x70, 0x07, 0x00, 0x70, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0x00, 
+    0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x0E, 0x00, 
+    0x70, 0x0E, 0x00, 0x78, 0x07, 0x00, 0x7C, 0x07, 0x00, 0x7E, 0x07, 0x00, 0x77, 0x07, 0x80, 0x77, 
+    0x07, 0xC0, 0x73, 0x07, 0xE0, 0x71, 0x07, 0xF0, 0x70, 0x07, 0xF8, 0x70, 0x0E, 0x7C, 0x70, 0x1E, 
+    0x3E, 0x70, 0xFC, 0x1F, 0x70, 0xFC, 0x0F, 0x70, 0xF0, 0x03, 0x70, 0x00, 0x00, 0x38, 0x0E, 0x00, 
+    0x38, 0x0E, 0x00, 0x70, 0x07, 0x00, 0x70, 0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 
+    0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 0x0F, 0x1F, 0x70, 0x0E, 0x1B, 0x38, 0xFE, 0x3B, 0x3C, 0xFC, 
+    0xF1, 0x1F, 0xF8, 0xF0, 0x1F, 0x00, 0xC0, 0x07, 0x00, 0xC0, 0x03, 0x00, 0xE0, 0x03, 0x00, 0xF8, 
+    0x03, 0x00, 0xBE, 0x03, 0x00, 0x8F, 0x03, 0xC0, 0x83, 0x03, 0xE0, 0x81, 0x03, 0x78, 0x80, 0x03, 
+    0x1E, 0x80, 0x03, 0x0F, 0x80, 0x03, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0xFF, 0xFF, 0x7F, 0x00, 
+    0x80, 0x03, 0x00, 0x80, 0x03, 0x00, 0x00, 0x38, 0xFF, 0x0F, 0x38, 0xFF, 0x07, 0x70, 0xFF, 0x07, 
+    0x70, 0x07, 0x07, 0x70, 0x07, 0x07, 0x70, 0x07, 0x07, 0x70, 0x07, 0x07, 0x70, 0x07, 0x07, 0x70, 
+    0x07, 0x0F, 0x78, 0x07, 0x0E, 0x38, 0x07, 0x1E, 0x3C, 0x07, 0xFC, 0x1F, 0x00, 0xF8, 0x0F, 0x00, 
+    0xE0, 0x03, 0x80, 0xFF, 0x01, 0xF0, 0xFF, 0x0F, 0xF8, 0xFF, 0x1F, 0xFC, 0x30, 0x3C, 0x1E, 0x1C, 
+    0x38, 0x0F, 0x0C, 0x70, 0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 
+    0x07, 0x1E, 0x78, 0x07, 0x3C, 0x3C, 0x0E, 0xFC, 0x3F, 0x00, 0xF8, 0x1F, 0x00, 0xE0, 0x07, 0x07, 
+    0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0x00, 0x40, 0x07, 0x00, 0x78, 0x07, 0x00, 
+    0x7E, 0x07, 0xC0, 0x3F, 0x07, 0xF0, 0x0F, 0x07, 0xFE, 0x01, 0x87, 0x7F, 0x00, 0xF7, 0x0F, 0x00, 
+    0xFF, 0x03, 0x00, 0xFF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xC0, 0x07, 0xF8, 
+    0xF0, 0x1F, 0xFC, 0xF9, 0x3F, 0xFE, 0x3B, 0x3C, 0x0F, 0x1B, 0x78, 0x07, 0x0E, 0x70, 0x07, 0x0E, 
+    0x70, 0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 0x07, 0x0E, 0x70, 0x0F, 0x1B, 0x78, 0xFE, 0x3B, 0x3C, 
+    0xFC, 0xF9, 0x3F, 0xF8, 0xF0, 0x1F, 0x00, 0xC0, 0x07, 0xF0, 0x03, 0x00, 0xFC, 0x0F, 0x00, 0xFE, 
+    0x1F, 0x38, 0x1E, 0x1E, 0x70, 0x0F, 0x3C, 0x70, 0x07, 0x38, 0x70, 0x07, 0x38, 0x70, 0x07, 0x38, 
+    0x70, 0x07, 0x38, 0x70, 0x07, 0x18, 0x78, 0x0E, 0x1C, 0x3C, 0x1E, 0x86, 0x1F, 0xFC, 0xFF, 0x0F, 
+    0xF8, 0xFF, 0x07, 0xC0, 0xFF, 0x00, 0xF0, 0x01, 0x1F, 0xF0, 0x01, 0x1F, 0xF0, 0x01, 0x1F, 0xF0, 
+    0x01, 0x1F, 0x00, 0x30, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0xFC, 0x00, 0x00, 0xFC, 
+    0x00, 0x00, 0xCC, 0x00, 0x00, 0xCE, 0x01, 0x00, 0x86, 0x01, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 
+    0x00, 0x03, 0x03, 0x80, 0x03, 0x07, 0x80, 0x03, 0x07, 0xC0, 0x01, 0x0E, 0xC0, 0x01, 0x0E, 0xC0, 
+    0x00, 0x0C, 0xE0, 0x00, 0x1C, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 
+    0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 
+    0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 
+    0x87, 0x03, 0x00, 0x87, 0x03, 0x00, 0x87, 0x03, 0xE0, 0x00, 0x1C, 0xC0, 0x00, 0x0C, 0xC0, 0x01, 
+    0x0E, 0xC0, 0x01, 0x0E, 0x80, 0x03, 0x07, 0x80, 0x03, 0x07, 0x00, 0x03, 0x03, 0x00, 0x87, 0x03, 
+    0x00, 0x87, 0x03, 0x00, 0x86, 0x01, 0x00, 0xCE, 0x01, 0x00, 0xCC, 0x00, 0x00, 0xFC, 0x00, 0x00, 
+    0xFC, 0x00, 0x00, 0x78, 0x00, 0x00, 0x78, 0x00, 0x00, 0x30, 0x00, 0x1C, 0x00, 0x00, 0x0E, 0x00, 
+    0x00, 0x0E, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 0xF0, 0x79, 0x07, 0xFC, 0x79, 0x07, 0xFE, 0x79, 
+    0x07, 0x1F, 0x00, 0x8F, 0x07, 0x00, 0xFE, 0x03, 0x00, 0xFC, 0x01, 0x00, 0xF8, 0x00, 0x00, 0x00, 
+    0x78, 0x00, 0x00, 0x38, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x1C, 
+    0x00, 0x00, 0x1C, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x38, 0x00, 0x00, 0x38, 0x00, 0x00, 0x70, 0x00, 
+    0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x70, 0x00, 0x00, 0x38, 0x00, 0x00, 
+    0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0x80, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x00, 
+    0x00, 0x1F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x80, 0x00, 0x00, 0xE0, 0x00, 0x00, 0x7F, 0x00, 0x00, 
+    0x3F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0xE0, 
+    0x00, 0x00, 0x7F, 0x00, 0x00, 0x3F, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x0F, 0x00, 0x00, 0x78, 0x00, 
+    0x00, 0xFE, 0x01, 0x00, 0x86, 0x01, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 0x03, 0x03, 0x00, 
+    0x03, 0x03, 0x00, 0x86, 0x01, 0x00, 0xFE, 0x01, 0x00, 0x78, 0x00, 0x00, 0x00, 0x07, 0x1C, 0x00, 
+    0x07, 0x1C, 0x00, 0x07, 0x1C, 0x00, 0x07, 0x1C, 0x00, 0x07, 0x1C, 0xF8, 0xFF, 0x1C, 0xF8, 0xFF, 
+    0x1C, 0xF8, 0xFF, 0x1C, 0x00, 0x07, 0x1C, 0x00, 0x07, 0x1C, 0x00, 0x07, 0x1C, 0x00, 0x07, 0x1C, 
+    0x00, 0x07, 0x1C, 0x06, 0x18, 0x00, 0x03, 0x1C, 0x00, 0x03, 0x1E, 0x00, 0x03, 0x1F, 0x00, 0x83, 
+    0x1B, 0x00, 0xC3, 0x19, 0x00, 0xE7, 0x18, 0x00, 0x7E, 0x18, 0x00, 0x3C, 0x18, 0x00, 0x06, 0x0C, 
+    0x00, 0x03, 0x18, 0x00, 0x03, 0x18, 0x00, 0x63, 0x18, 0x00, 0x63, 0x18, 0x00, 0x63, 0x18, 0x00, 
+    0xF7, 0x1C, 0x00, 0xFE, 0x0F, 0x00, 0x9C, 0x07, 0x00, 0x06, 0x18, 0x00, 0x06, 0x18, 0x00, 0x03, 
+    0x18, 0x00, 0xFF, 0x1F, 0x00, 0xFF, 0x1F, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 
+    0x00, 0x06, 0x00, 0x00, 0x06, 0x18, 0x00, 0x03, 0x18, 0x10, 0xFF, 0x1F, 0x08, 0xFF, 0x1F, 0x06, 
+    0x00, 0x18, 0x01, 0x00, 0x98, 0x00, 0x00, 0x40, 0x1C, 0x00, 0x30, 0x1E, 0x00, 0x88, 0x1B, 0x00, 
+    0xC4, 0x18, 0x00, 0x62, 0x18, 0x80, 0x39, 0x18, 0x40, 0xF8, 0xFF, 0x20, 0xF8, 0xFF, 0x00, 0x00, 
+    0x18, 0x00, 0x00, 0x18, 0x06, 0x00, 0x00, 0x06, 0x18, 0x00, 0x03, 0x18, 0x10, 0xFF, 0x1F, 0x0C, 
+    0xFF, 0x1F, 0x02, 0x00, 0x18, 0x01, 0x00, 0xD8, 0x00, 0x00, 0x20, 0x00, 0x00, 0x10, 0xC0, 0x00, 
+    0x0C, 0xE0, 0x00, 0x32, 0xF0, 0x00, 0x19, 0xF8, 0xC0, 0x18, 0xDC, 0x20, 0x18, 0xCE, 0x10, 0x38, 
+    0xC7, 0x00, 0xF0, 0xC3, 0x00, 0xE0, 0xC1, 0x06, 0x0C, 0x00, 0x03, 0x18, 0x00, 0x03, 0x18, 0x10, 
+    0x63, 0x18, 0x08, 0x63, 0x18, 0x04, 0x63, 0x18, 0x03, 0xF7, 0x9C, 0x00, 0xFE, 0x47, 0x1C, 0x9C, 
+    0x27, 0x1E, 0x00, 0x90, 0x1B, 0x00, 0xC8, 0x18, 0x00, 0x66, 0x18, 0x00, 0x39, 0x18, 0x80, 0xF8, 
+    0xFF, 0x40, 0xF8, 0xFF, 0x00, 0x00, 0x18, 0x00, 0x00, 0x18, 0x00
+};
+
+const struct font_info digits_24px PROGMEM = {0xAC+(0x05<<8),0x13,0x18,0x25,0xBE,digits_24px_data,(uint8_t*)digits_24px_data+0xBE -0x25+1};
+
+#endif
+
+
diff --git a/pt100/lcdlib/Fonts/digits_32px.c b/pt100/lcdlib/Fonts/digits_32px.c
new file mode 100644 (file)
index 0000000..b7a3d1b
--- /dev/null
@@ -0,0 +1,112 @@
+/*
+    created with FontEditor written by H. Reddmann   HaReddmann at t-online dot de
+    using template file by J. Michel     jan at mueschelsoft.de
+
+    File Name           : digits_32px.c
+    Date                : 08.10.2011
+    Font size in bytes  : 0x0544, 1348
+    Font width          : 28
+    Font height         : 32
+    Font first char     : 0x2B
+    Font last char      : 0x3A
+    Font bits per pixel : 1
+*/
+
+#include "../font.h"
+#ifdef FONTS_INCLUDE_digits_32px
+
+
+
+const uint8_t digits_32px_data[] PROGMEM = {
+    0x1B, 0x00, 0x1B, 0x08, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x09, 
+    
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0xE0, 0xFF, 0xFF, 0xFF, 
+    0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 0xE0, 0xFF, 0xFF, 0xFF, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 
+    0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 
+    0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF8, 0x1F, 0x00, 0x80, 0xFF, 0xFF, 0x01, 
+    0xE0, 0xFF, 0xFF, 0x07, 0xF0, 0xFF, 0xFF, 0x0F, 0xF8, 0xFF, 0xFF, 0x1F, 0xFC, 0xFF, 0xFF, 0x3F, 
+    0xFC, 0xFF, 0xFF, 0x3F, 0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0x03, 0xC0, 0x7F, 0x7F, 0x00, 0x00, 0xFE, 
+    0x3F, 0x00, 0x00, 0xFC, 0x1F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0xF8, 
+    0x3F, 0x00, 0x00, 0xFC, 0x7F, 0x00, 0x00, 0xFE, 0xFE, 0x03, 0xC0, 0x7F, 0xFE, 0xFF, 0xFF, 0x7F, 
+    0xFC, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0x3F, 0xF8, 0xFF, 0xFF, 0x1F, 0xF0, 0xFF, 0xFF, 0x0F, 
+    0xE0, 0xFF, 0xFF, 0x07, 0x80, 0xFF, 0xFF, 0x01, 0x00, 0xF8, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0xF0, 0x03, 0x00, 0xFC, 0xF0, 0x03, 0x00, 0xFC, 0xF8, 0x01, 0x00, 0xFC, 0xF8, 0x01, 0x00, 0xFC, 
+    0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xFC, 0xFC, 0x00, 0x00, 0xFC, 0x7E, 0x00, 0x00, 0xFC, 
+    0x7E, 0x00, 0x00, 0xFC, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 
+    0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 
+    0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 
+    0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 
+    0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x01, 0x00, 0xF8, 0xFC, 0x01, 0x00, 0xFC, 
+    0xFC, 0x00, 0x00, 0xFE, 0x7E, 0x00, 0x00, 0xFF, 0x7E, 0x00, 0x80, 0xFF, 0x3E, 0x00, 0xC0, 0xFF, 
+    0x3E, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xE0, 0xFF, 0x1F, 0x00, 0xF0, 0xFF, 0x1F, 0x00, 0xF8, 0xFF, 
+    0x1F, 0x00, 0xFC, 0xFF, 0x1F, 0x00, 0xFE, 0xFD, 0x1F, 0x00, 0xFF, 0xFC, 0x3F, 0x80, 0x7F, 0xFC, 
+    0x3F, 0xC0, 0x3F, 0xFC, 0xFF, 0xE0, 0x3F, 0xFC, 0xFF, 0xFF, 0x1F, 0xFC, 0xFE, 0xFF, 0x0F, 0xFC, 
+    0xFE, 0xFF, 0x07, 0xFC, 0xFC, 0xFF, 0x03, 0xFC, 0xFC, 0xFF, 0x01, 0xFC, 0xF8, 0xFF, 0x00, 0xFC, 
+    0xF0, 0x7F, 0x00, 0xFC, 0xC0, 0x1F, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x7E, 0x7E, 0x00, 0x00, 0x7C, 0x3E, 0x00, 0x00, 0x7C, 0x3E, 0x00, 0x00, 0xFC, 
+    0x3F, 0x00, 0x00, 0xFC, 0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 
+    0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 
+    0x1F, 0xE0, 0x03, 0xF8, 0x3F, 0xF0, 0x03, 0xF8, 0x3F, 0xF0, 0x07, 0xFC, 0x7F, 0xF8, 0x07, 0xFC, 
+    0xFF, 0xFF, 0x1F, 0x7E, 0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0xBF, 0xFF, 0x7F, 
+    0xFC, 0xBF, 0xFF, 0x3F, 0xFC, 0x1F, 0xFF, 0x3F, 0xF8, 0x0F, 0xFE, 0x1F, 0xE0, 0x07, 0xFC, 0x0F, 
+    0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x03, 0x00, 0x00, 0xFE, 0x03, 
+    0x00, 0x00, 0xFF, 0x03, 0x00, 0xC0, 0xFF, 0x03, 0x00, 0xE0, 0xFF, 0x03, 0x00, 0xF8, 0xF7, 0x03, 
+    0x00, 0xFC, 0xF3, 0x03, 0x00, 0xFE, 0xF1, 0x03, 0x80, 0x7F, 0xF0, 0x03, 0xC0, 0x3F, 0xF0, 0x03, 
+    0xF0, 0x0F, 0xF0, 0x03, 0xF8, 0x07, 0xF0, 0x03, 0xFE, 0x03, 0xF0, 0x03, 0xFE, 0x00, 0xF0, 0x03, 
+    0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 
+    0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0xFE, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0xF0, 0x03, 
+    0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x3F, 0xFE, 0xFF, 0x01, 0x7E, 0xFE, 0xFF, 0x00, 0x7E, 0xFE, 0xFF, 0x00, 0x7C, 
+    0xFE, 0xFF, 0x00, 0x7C, 0xFE, 0x7F, 0x00, 0xFC, 0xFE, 0x7F, 0x00, 0xF8, 0x7E, 0x7C, 0x00, 0xF8, 
+    0x7E, 0x7C, 0x00, 0xF8, 0x7E, 0x7C, 0x00, 0xF8, 0x7E, 0x7C, 0x00, 0xF8, 0x7E, 0x7C, 0x00, 0xF8, 
+    0x7E, 0xFC, 0x00, 0xFC, 0x7E, 0xFC, 0x00, 0xFC, 0x7E, 0xFC, 0x01, 0xFE, 0x7E, 0xFC, 0x03, 0x7F, 
+    0x7E, 0xF8, 0xFF, 0x7F, 0x7E, 0xF8, 0xFF, 0x7F, 0x7E, 0xF0, 0xFF, 0x3F, 0x7E, 0xF0, 0xFF, 0x3F, 
+    0x7E, 0xE0, 0xFF, 0x1F, 0x7E, 0xC0, 0xFF, 0x0F, 0x7E, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xFE, 0x01, 
+    0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x01, 0xC0, 0xFF, 0xFF, 0x07, 
+    0xE0, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0x1F, 0xF8, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0x7F, 
+    0xFC, 0xFF, 0xFF, 0x7F, 0xFE, 0xE3, 0xFF, 0x7F, 0xFE, 0xF0, 0x03, 0xFE, 0x7F, 0xF0, 0x01, 0xFC, 
+    0x3F, 0xF8, 0x00, 0xF8, 0x3F, 0xF8, 0x00, 0xF8, 0x3F, 0xF8, 0x00, 0xF8, 0x1F, 0xF8, 0x00, 0xF8, 
+    0x1F, 0xF8, 0x00, 0xF8, 0x1F, 0xF8, 0x01, 0xFC, 0x1F, 0xF8, 0x03, 0xFE, 0x1F, 0xF8, 0xFF, 0x7F, 
+    0x1F, 0xF0, 0xFF, 0x7F, 0x3F, 0xF0, 0xFF, 0x7F, 0x3F, 0xE0, 0xFF, 0x3F, 0x3E, 0xE0, 0xFF, 0x1F, 
+    0x7E, 0xC0, 0xFF, 0x0F, 0x00, 0x80, 0xFF, 0x07, 0x00, 0x00, 0xFC, 0x01, 0x00, 0x00, 0x00, 0x00, 
+    0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 
+    0x7E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0xC0, 0x7E, 0x00, 0x00, 0xF0, 0x7E, 0x00, 0x00, 0xFC, 
+    0x7E, 0x00, 0x00, 0xFF, 0x7E, 0x00, 0xC0, 0xFF, 0x7E, 0x00, 0xF8, 0xFF, 0x7E, 0x00, 0xFE, 0xFF, 
+    0x7E, 0x80, 0xFF, 0xFF, 0x7E, 0xE0, 0xFF, 0x3F, 0x7E, 0xF8, 0xFF, 0x0F, 0x7E, 0xFE, 0xFF, 0x03, 
+    0xFE, 0xFF, 0xFF, 0x00, 0xFE, 0xFF, 0x3F, 0x00, 0xFE, 0xFF, 0x07, 0x00, 0xFE, 0xFF, 0x01, 0x00, 
+    0xFE, 0x7F, 0x00, 0x00, 0xFE, 0x1F, 0x00, 0x00, 0xFE, 0x07, 0x00, 0x00, 0xFE, 0x01, 0x00, 0x00, 
+    0x7E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF0, 0x03, 0xE0, 0x07, 0xFC, 0x0F, 
+    0xF8, 0x1F, 0xFE, 0x1F, 0xFC, 0x3F, 0xFE, 0x3F, 0xFC, 0x3F, 0xFF, 0x7F, 0xFE, 0x7F, 0xFF, 0x7F, 
+    0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x0F, 0xFE, 0x7F, 0xF8, 0x07, 0xFC, 
+    0x3F, 0xF0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 0x1F, 0xE0, 0x03, 0xF8, 
+    0x3F, 0xF0, 0x03, 0xF8, 0x7F, 0xF8, 0x07, 0xFC, 0xFF, 0xFF, 0x0F, 0xFE, 0xFE, 0xFF, 0xFF, 0xFF, 
+    0xFE, 0xFF, 0xFF, 0x7F, 0xFE, 0x7F, 0xFF, 0x7F, 0xFC, 0x3F, 0xFF, 0x7F, 0xFC, 0x3F, 0xFE, 0x3F, 
+    0xF8, 0x1F, 0xFE, 0x1F, 0xE0, 0x07, 0xFC, 0x0F, 0x00, 0x00, 0xF0, 0x03, 0x00, 0x00, 0x00, 0x00, 
+    0x80, 0x3F, 0x00, 0x00, 0xE0, 0xFF, 0x01, 0x00, 0xF0, 0xFF, 0x03, 0x7E, 0xF8, 0xFF, 0x07, 0x7C, 
+    0xFC, 0xFF, 0x07, 0xFC, 0xFE, 0xFF, 0x0F, 0xFC, 0xFE, 0xFF, 0x0F, 0xF8, 0xFE, 0xFF, 0x1F, 0xF8, 
+    0x7F, 0xC0, 0x1F, 0xF8, 0x3F, 0x80, 0x1F, 0xF8, 0x1F, 0x00, 0x1F, 0xF8, 0x1F, 0x00, 0x1F, 0xF8, 
+    0x1F, 0x00, 0x1F, 0xFC, 0x1F, 0x00, 0x1F, 0xFC, 0x3F, 0x80, 0x0F, 0xFE, 0x7F, 0xC0, 0x0F, 0x7F, 
+    0xFE, 0xFF, 0xC7, 0x7F, 0xFE, 0xFF, 0xFF, 0x3F, 0xFE, 0xFF, 0xFF, 0x3F, 0xFC, 0xFF, 0xFF, 0x1F, 
+    0xF8, 0xFF, 0xFF, 0x0F, 0xF0, 0xFF, 0xFF, 0x07, 0xE0, 0xFF, 0xFF, 0x03, 0x80, 0xFF, 0xFF, 0x00, 
+    0x00, 0xFC, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 
+    0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 0xC0, 0x3F, 
+    0xC0, 0x3F, 0xC0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+
+const struct font_info digits_32px PROGMEM = {0x44+(0x05<<8),0x1C,0x20,0x2B,0x3A,digits_32px_data,(uint8_t*)digits_32px_data+0x3A-0x2B+1};
+
+#endif
+
+
diff --git a/pt100/lcdlib/Fonts/font_fixed_16bit.c b/pt100/lcdlib/Fonts/font_fixed_16bit.c
new file mode 100644 (file)
index 0000000..34b5ce2
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+    created with FontEditor written by H. Reddmann   HaReddmann at t-online dot de
+    using template file by J. Michel     jan at mueschelsoft.de
+
+    File Name           : 16bit_fixed.c
+    Date                : 24.12.2013
+    Font size in bytes  : 2002
+    Font width          : 10
+    Font height         : 16
+    Font first char     : 0x20
+    Font last char      : 0x7E
+    Font bits per pixel : 1
+*/
+
+#include "../font.h"
+#ifdef FONTS_INCLUDE_font_fixed_16px
+
+
+const uint8_t font_fixed_16px_data[] PROGMEM={ 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x33, 0xFF, 0x33, 0xFF, 0x33, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x1F, 0x00, 0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x32, 0x20, 0x3F, 0xF8, 0x0F, 0xFE, 0x02, 
+    0x26, 0x32, 0xA0, 0x3F, 0xF8, 0x0F, 0x7E, 0x02, 0x26, 0x02, 0x20, 0x00, 0x38, 0x30, 0x7C, 0x70, 
+    0xFE, 0x60, 0xC6, 0x60, 0xFF, 0xFF, 0xFF, 0xFF, 0x06, 0x63, 0x06, 0x3F, 0x04, 0x1C, 0x00, 0x00, 
+    0x3C, 0x60, 0x7E, 0x38, 0x42, 0x1C, 0x7E, 0x0E, 0xFE, 0x3F, 0xFC, 0x7F, 0x70, 0x7E, 0x38, 0x42, 
+    0x1C, 0x7E, 0x06, 0x3C, 0x00, 0x1E, 0x00, 0x3F, 0xBC, 0x7F, 0xFE, 0x71, 0xFE, 0x63, 0xE6, 0x67, 
+    0x3E, 0x7F, 0x1C, 0x7C, 0x00, 0x7F, 0x00, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0x00, 
+    0x1F, 0x00, 0x1F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x03, 
+    0xF0, 0x0F, 0xFC, 0x3F, 0x3E, 0x7C, 0x0E, 0x70, 0x07, 0xE0, 0x03, 0xC0, 0x03, 0xC0, 0x00, 0x00, 
+    0x00, 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x07, 0xE0, 0x0E, 0x70, 0x3E, 0x7C, 0xFC, 0x3F, 0xF0, 0x0F, 
+    0xC0, 0x03, 0x00, 0x00, 0x18, 0x00, 0x98, 0x00, 0xD8, 0x01, 0xDE, 0x01, 0x4E, 0x00, 0xDE, 0x01, 
+    0xD8, 0x01, 0x98, 0x00, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 
+    0xF0, 0x3F, 0xF0, 0x3F, 0xF0, 0x3F, 0x00, 0x03, 0x00, 0x03, 0x00, 0x03, 0x00, 0x00, 0x00, 0x4E, 
+    0x00, 0x7E, 0x00, 0x7E, 0x00, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 
+    0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x38, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x78, 0x00, 0x7F, 
+    0xE0, 0x1F, 0xF8, 0x07, 0xFE, 0x00, 0x1E, 0x00, 0x06, 0x00, 0x00, 0x00, 0xF0, 0x0F, 0xF8, 0x1F, 
+    0xFC, 0x3F, 0x1E, 0x78, 0x06, 0x60, 0x06, 0x60, 0x1E, 0x78, 0xFC, 0x3F, 0xFC, 0x1F, 0xF0, 0x0F, 
+    0x00, 0x60, 0x18, 0x60, 0x1C, 0x60, 0x0C, 0x60, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x60, 
+    0x00, 0x60, 0x00, 0x60, 0x0C, 0x70, 0x0E, 0x78, 0x06, 0x7C, 0x06, 0x6E, 0x06, 0x67, 0x8E, 0x63, 
+    0xFE, 0x61, 0xFC, 0x60, 0x78, 0x60, 0x00, 0x60, 0x00, 0x00, 0x0C, 0x60, 0xCE, 0x60, 0xC6, 0x60, 
+    0xC6, 0x60, 0xE6, 0x71, 0xFE, 0x7F, 0xBE, 0x3F, 0x1C, 0x1E, 0x00, 0x00, 0x00, 0x06, 0x80, 0x07, 
+    0xC0, 0x07, 0xE0, 0x06, 0x78, 0x06, 0x1C, 0x06, 0xFE, 0x7F, 0xFE, 0x7F, 0xFE, 0x7F, 0x00, 0x06, 
+    0x00, 0x00, 0xFE, 0x60, 0xFE, 0x60, 0xFE, 0x60, 0xC6, 0x60, 0xC6, 0x71, 0xC6, 0x7F, 0x86, 0x3F, 
+    0x06, 0x1F, 0x06, 0x0E, 0xE0, 0x0F, 0xF8, 0x3F, 0xFC, 0x3F, 0x9E, 0x71, 0xCE, 0x60, 0xC6, 0x60, 
+    0xC6, 0x71, 0xC6, 0x7F, 0x84, 0x3F, 0x00, 0x1F, 0x06, 0x00, 0x06, 0x60, 0x06, 0x7C, 0x06, 0x7F, 
+    0xC6, 0x1F, 0xF6, 0x03, 0xFE, 0x00, 0x3E, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x00, 0x1E, 0x3C, 0x3F, 
+    0x7C, 0x7F, 0xFE, 0x71, 0xE6, 0x61, 0xC6, 0x61, 0xFE, 0x73, 0x7E, 0x7F, 0x3C, 0x3F, 0x00, 0x1E, 
+    0xF8, 0x00, 0xFC, 0x21, 0xFE, 0x63, 0x8E, 0x63, 0x06, 0x63, 0x06, 0x73, 0x8E, 0x79, 0xFC, 0x3F, 
+    0xFC, 0x1F, 0xF0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x1C, 0x38, 0x1C, 0x38, 0x1C, 
+    0x38, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x9C, 0x38, 0xFC, 0x38, 0xFC, 
+    0x38, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 
+    0xC0, 0x03, 0xE0, 0x07, 0x60, 0x06, 0x70, 0x0E, 0x30, 0x0C, 0x38, 0x1C, 0x18, 0x18, 0x18, 0x18, 
+    0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 
+    0x30, 0x03, 0x30, 0x03, 0x18, 0x18, 0x18, 0x18, 0x38, 0x1C, 0x30, 0x0C, 0x70, 0x0E, 0x60, 0x06, 
+    0xE0, 0x07, 0xC0, 0x03, 0x80, 0x01, 0x80, 0x01, 0x0E, 0x00, 0x0E, 0x00, 0x06, 0x00, 0x06, 0x66, 
+    0x06, 0x67, 0x86, 0x67, 0xCE, 0x01, 0xFE, 0x00, 0x7C, 0x00, 0x3C, 0x00, 0xF0, 0x0F, 0xFC, 0x3F, 
+    0x1C, 0x38, 0xC6, 0x67, 0xE2, 0x4F, 0x32, 0x4C, 0x36, 0x4C, 0x3E, 0x6C, 0xFC, 0x6F, 0xF8, 0x0F, 
+    0x00, 0x38, 0x80, 0x3F, 0xE0, 0x1F, 0xFC, 0x07, 0x3C, 0x06, 0x3C, 0x06, 0xFC, 0x07, 0xE0, 0x1F, 
+    0x80, 0x3F, 0x00, 0x38, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0x31, 
+    0xCC, 0x33, 0xFC, 0x3F, 0x78, 0x1F, 0x78, 0x1E, 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0x38, 0x1C, 
+    0x1C, 0x38, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x1C, 0x30, 0x18, 0x10, 0xFC, 0x3F, 0xFC, 0x3F, 
+    0xFC, 0x3F, 0x0C, 0x30, 0x0C, 0x30, 0x1C, 0x38, 0x3C, 0x3C, 0xF8, 0x1F, 0xF8, 0x0F, 0xE0, 0x07, 
+    0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0x31, 0x8C, 0x31, 
+    0x0C, 0x30, 0x0C, 0x30, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x8C, 0x01, 0x8C, 0x01, 0x8C, 0x01, 
+    0x8C, 0x01, 0x8C, 0x01, 0x0C, 0x00, 0x0C, 0x00, 0xE0, 0x07, 0xF0, 0x0F, 0xF8, 0x1F, 0x38, 0x1C, 
+    0x1C, 0x38, 0x0C, 0x30, 0x8C, 0x31, 0x8C, 0x31, 0x9C, 0x3F, 0x98, 0x1F, 0xFC, 0x3F, 0xFC, 0x3F, 
+    0xFC, 0x3F, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0x80, 0x01, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 
+    0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x0C, 0x30, 0x0C, 0x30, 
+    0x0C, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x30, 0x0C, 0x38, 
+    0xFC, 0x3F, 0xFC, 0x1F, 0xFC, 0x0F, 0x00, 0x00, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xC0, 0x03, 
+    0xE0, 0x07, 0x78, 0x0F, 0x3C, 0x1E, 0x1C, 0x3C, 0x0C, 0x38, 0x04, 0x30, 0xFC, 0x3F, 0xFC, 0x3F, 
+    0xFC, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x00, 
+    0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xF8, 0x00, 0xF0, 0x07, 0xC0, 0x07, 0xE0, 0x07, 0xF8, 0x00, 
+    0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xF8, 0x00, 0xF0, 0x03, 0xC0, 0x0F, 
+    0x00, 0x1F, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0xE0, 0x07, 0xF8, 0x1F, 0xF8, 0x1F, 0x1C, 0x38, 
+    0x0C, 0x30, 0x0C, 0x30, 0x1C, 0x38, 0xF8, 0x1F, 0xF8, 0x1F, 0xE0, 0x07, 0xFC, 0x3F, 0xFC, 0x3F, 
+    0xFC, 0x3F, 0x8C, 0x01, 0x8C, 0x01, 0x8C, 0x01, 0xCC, 0x01, 0xFC, 0x01, 0xF8, 0x00, 0x78, 0x00, 
+    0xE0, 0x07, 0xF8, 0x0F, 0xF8, 0x1F, 0x1C, 0x38, 0x0C, 0x30, 0x0C, 0x70, 0x1C, 0xF8, 0xF8, 0xDF, 
+    0xF8, 0xCF, 0xE0, 0x87, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x8C, 0x01, 0x8C, 0x03, 0xCC, 0x07, 
+    0xFC, 0x1F, 0xFC, 0x3E, 0x78, 0x38, 0x00, 0x30, 0x78, 0x18, 0xF8, 0x38, 0xFC, 0x38, 0xCC, 0x30, 
+    0x8C, 0x31, 0x8C, 0x31, 0x8C, 0x33, 0x1C, 0x3F, 0x18, 0x1F, 0x00, 0x0E, 0x00, 0x00, 0x0C, 0x00, 
+    0x0C, 0x00, 0x0C, 0x00, 0xFC, 0x3F, 0xFC, 0x3F, 0xFC, 0x3F, 0x0C, 0x00, 0x0C, 0x00, 0x0C, 0x00, 
+    0xFC, 0x0F, 0xFC, 0x1F, 0xFC, 0x3F, 0x00, 0x38, 0x00, 0x30, 0x00, 0x30, 0x00, 0x38, 0xFC, 0x3F, 
+    0xFC, 0x1F, 0xFC, 0x0F, 0x0C, 0x00, 0xFC, 0x00, 0xF8, 0x03, 0xE0, 0x1F, 0x80, 0x3F, 0x00, 0x3C, 
+    0x80, 0x3F, 0xE0, 0x1F, 0xFC, 0x03, 0x3C, 0x00, 0x00, 0x00, 0xFC, 0x07, 0xFC, 0x1F, 0x00, 0x3F, 
+    0xC0, 0x1F, 0xE0, 0x07, 0xC0, 0x1F, 0x00, 0x3F, 0xFC, 0x1F, 0xFC, 0x07, 0x00, 0x00, 0x0C, 0x30, 
+    0x1C, 0x38, 0x78, 0x1E, 0xE0, 0x07, 0xC0, 0x03, 0xE0, 0x07, 0x78, 0x1E, 0x1C, 0x38, 0x0C, 0x30, 
+    0x00, 0x00, 0x1C, 0x00, 0x7C, 0x00, 0xF0, 0x00, 0xE0, 0x3F, 0x80, 0x3F, 0xE0, 0x3F, 0xF0, 0x00, 
+    0x7C, 0x00, 0x1C, 0x00, 0x0C, 0x38, 0x0C, 0x3C, 0x0C, 0x3E, 0x0C, 0x3F, 0x8C, 0x37, 0xCC, 0x33, 
+    0xEC, 0x31, 0xFC, 0x30, 0x7C, 0x30, 0x1C, 0x30, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 
+    0x1F, 0x00, 0xFF, 0x00, 0xF8, 0x07, 0xE0, 0x1F, 0x00, 0xFF, 0x00, 0xF8, 0x00, 0xE0, 0x00, 0x00, 
+    0x00, 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x01, 0xE0, 0x01, 0xFC, 0x00, 0x1E, 0x00, 0x1E, 0x00, 
+    0xFC, 0x00, 0xE0, 0x01, 0x80, 0x01, 0x00, 0x00, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 
+    0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x06, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x1C, 0x60, 0x3E, 0x70, 0x3F, 0x30, 0x33, 0x30, 0x31, 0x30, 0x39, 0xF0, 0x1F, 0xF0, 0x3F, 
+    0xE0, 0x3F, 0x00, 0x30, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x3F, 0x60, 0x38, 0x30, 0x30, 0x30, 0x30, 
+    0x70, 0x38, 0xF0, 0x3F, 0xE0, 0x1F, 0xC0, 0x07, 0x80, 0x07, 0xE0, 0x1F, 0xE0, 0x1F, 0x70, 0x38, 
+    0x30, 0x38, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x20, 0x10, 0x80, 0x0F, 0xE0, 0x1F, 
+    0xF0, 0x3F, 0x70, 0x38, 0x30, 0x30, 0x30, 0x30, 0x70, 0x38, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x3F, 
+    0x80, 0x0F, 0xE0, 0x1F, 0xE0, 0x1F, 0x70, 0x3B, 0x30, 0x33, 0x30, 0x33, 0x70, 0x33, 0xF0, 0x33, 
+    0xE0, 0x3B, 0xC0, 0x1B, 0x60, 0x00, 0x60, 0x00, 0x60, 0x00, 0xFC, 0x3F, 0xFE, 0x3F, 0xFF, 0x3F, 
+    0x63, 0x00, 0x63, 0x00, 0x63, 0x00, 0x63, 0x00, 0x80, 0x0F, 0xE0, 0x4F, 0xF0, 0xDF, 0x70, 0xDC, 
+    0x30, 0xD8, 0x30, 0xD8, 0x70, 0xD8, 0xF0, 0xFF, 0xF0, 0xFF, 0xF0, 0x7F, 0xFE, 0x3F, 0xFE, 0x3F, 
+    0xFE, 0x3F, 0x60, 0x00, 0x70, 0x00, 0x30, 0x00, 0x30, 0x00, 0xF0, 0x3F, 0xF0, 0x3F, 0xE0, 0x3F, 
+    0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0x30, 0x00, 0xF3, 0x3F, 0xF3, 0x3F, 0xF3, 0x3F, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x60, 0x30, 0xE0, 0x30, 0xC0, 0x30, 0xC0, 0x30, 0xC0, 
+    0xF3, 0xFF, 0xF3, 0x7F, 0xF3, 0x3F, 0x00, 0x00, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x3F, 0x80, 0x07, 
+    0xE0, 0x0F, 0xF0, 0x1F, 0x70, 0x3C, 0x30, 0x38, 0x10, 0x30, 0x00, 0x20, 0x00, 0x00, 0x06, 0x00, 
+    0x06, 0x00, 0x06, 0x00, 0x06, 0x00, 0xFE, 0x3F, 0xFE, 0x3F, 0xFE, 0x3F, 0x00, 0x00, 0x00, 0x00, 
+    0xF0, 0x3F, 0xF0, 0x3F, 0xF0, 0x3F, 0x70, 0x00, 0xF0, 0x3F, 0xE0, 0x3F, 0x70, 0x00, 0xF0, 0x3F, 
+    0xF0, 0x3F, 0xE0, 0x3F, 0xF0, 0x3F, 0xF0, 0x3F, 0xF0, 0x3F, 0x60, 0x00, 0x70, 0x00, 0x30, 0x00, 
+    0x30, 0x00, 0xF0, 0x3F, 0xF0, 0x3F, 0xE0, 0x3F, 0x80, 0x07, 0xE0, 0x1F, 0xE0, 0x1F, 0x70, 0x38, 
+    0x30, 0x30, 0x30, 0x30, 0x70, 0x38, 0xE0, 0x1F, 0xE0, 0x1F, 0x80, 0x07, 0xF0, 0xFF, 0xF0, 0xFF, 
+    0xF0, 0xFF, 0x70, 0x1C, 0x30, 0x18, 0x30, 0x18, 0x70, 0x1C, 0xF0, 0x1F, 0xE0, 0x0F, 0xC0, 0x07, 
+    0x80, 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0x70, 0x1C, 0x30, 0x18, 0x30, 0x18, 0x70, 0x1C, 0xF0, 0xFF, 
+    0xF0, 0xFF, 0xF0, 0xFF, 0x00, 0x00, 0xF0, 0x3F, 0xF0, 0x3F, 0xF0, 0x3F, 0x70, 0x00, 0x30, 0x00, 
+    0x30, 0x00, 0x70, 0x00, 0x70, 0x00, 0x00, 0x00, 0xE0, 0x18, 0xF0, 0x39, 0xF0, 0x31, 0xB0, 0x33, 
+    0x30, 0x33, 0x30, 0x33, 0x30, 0x3F, 0x30, 0x1E, 0x00, 0x1C, 0x00, 0x00, 0x30, 0x00, 0x30, 0x00, 
+    0x30, 0x00, 0xFC, 0x1F, 0xFC, 0x3F, 0xFC, 0x3F, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30, 
+    0xF0, 0x1F, 0xF0, 0x3F, 0xF0, 0x3F, 0x00, 0x30, 0x00, 0x30, 0x00, 0x38, 0x00, 0x18, 0xF0, 0x3F, 
+    0xF0, 0x3F, 0xF0, 0x3F, 0x10, 0x00, 0xF0, 0x00, 0xF0, 0x03, 0xE0, 0x1F, 0x00, 0x3F, 0x00, 0x3C, 
+    0xC0, 0x3F, 0xF0, 0x0F, 0xF0, 0x01, 0x30, 0x00, 0x30, 0x00, 0xF0, 0x0F, 0xE0, 0x3F, 0x00, 0x1E, 
+    0xC0, 0x03, 0xC0, 0x03, 0x00, 0x1E, 0xE0, 0x3F, 0xF0, 0x0F, 0x30, 0x00, 0x10, 0x20, 0x30, 0x30, 
+    0xF0, 0x3C, 0xF0, 0x1F, 0xC0, 0x07, 0xC0, 0x0F, 0xE0, 0x3F, 0xF0, 0x3C, 0x30, 0x30, 0x10, 0x20, 
+    0x10, 0x00, 0xF0, 0x00, 0xF0, 0xC3, 0xE0, 0xCF, 0x00, 0xFF, 0x00, 0x7F, 0xC0, 0x0F, 0xF0, 0x01, 
+    0xF0, 0x00, 0x10, 0x00, 0x30, 0x30, 0x30, 0x38, 0x30, 0x3C, 0x30, 0x3E, 0x30, 0x37, 0xB0, 0x33, 
+    0xF0, 0x31, 0xF0, 0x30, 0x70, 0x30, 0x30, 0x30, 0x00, 0x00, 0x80, 0x01, 0x80, 0x01, 0xFE, 0x7F, 
+    0xFF, 0xFF, 0x7F, 0xFE, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x03, 0xC0, 0x03, 0xC0, 0x03, 0xC0, 0x7F, 0xFE, 0xFF, 0xFF, 0xFE, 0x7F, 0x80, 0x01, 
+    0x80, 0x01, 0x00, 0x00, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0x80, 0x01, 0x80, 0x03, 0x80, 0x03, 
+    0x00, 0x03, 0x00, 0x03, 0x80, 0x03, 0x80, 0x01, 0x00
+};
+
+const struct font_info font_fixed_16px PROGMEM = {2002,0x0A,0x10,0x20,0x7E,0,font_fixed_16px_data};
+
+
+#endif
+
+
diff --git a/pt100/lcdlib/Fonts/font_proportional_16px.c b/pt100/lcdlib/Fonts/font_proportional_16px.c
new file mode 100644 (file)
index 0000000..9d574f5
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+    created with FontEditor written by H. Reddmann   HaReddmann at t-online dot de
+    using template file by J. Michel     jan at mueschelsoft.de
+
+    File Name           : font_proportional_16px.c
+    Date                : 05.09.2010
+    Font size in bytes  : 0x0700, 1792
+    Font width          : 11
+    Font height         : 16
+    Font first char     : 0x20
+    Font last char      : 0xFC
+    Font bits per pixel : 1
+*/
+
+#include "../font.h"
+#ifdef FONTS_INCLUDE_font_proportional_16px
+
+
+
+const uint8_t font_proportional_16px_data[] PROGMEM = {
+    0x04, 0x02, 0x05, 0x08, 0x07, 0x09, 0x07, 0x02, 0x04, 0x04, 0x06, 0x07, 0x03, 0x05, 0x02, 0x07, 
+    0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x02, 0x03, 0x05, 0x08, 0x05, 0x06, 
+    0x09, 0x08, 0x07, 0x07, 0x07, 0x06, 0x06, 0x07, 0x07, 0x04, 0x05, 0x07, 0x06, 0x08, 0x07, 0x07, 
+    0x07, 0x07, 0x07, 0x07, 0x06, 0x07, 0x08, 0x0A, 0x08, 0x08, 0x06, 0x04, 0x05, 0x04, 0x08, 0x08, 
+    0x03, 0x06, 0x06, 0x05, 0x06, 0x06, 0x05, 0x06, 0x06, 0x02, 0x03, 0x06, 0x02, 0x08, 0x06, 0x06, 
+    0x06, 0x06, 0x05, 0x06, 0x05, 0x06, 0x07, 0x08, 0x06, 0x07, 0x06, 0x06, 0x02, 0x06, 0x07, 0x00, 
+    0x07, 0x00, 0x03, 0x00, 0x06, 0x08, 0x07, 0x07, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x03, 0x03, 0x06, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 
+    0x06, 0x09, 0x06, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x08, 0x0A, 0x0A, 0x0A, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x07, 
+    0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 
+    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xF8, 0x0D, 0xF8, 0x0D, 0x3C, 0x00, 0x3C, 0x00, 
+    0x00, 0x00, 0x3C, 0x00, 0x3C, 0x00, 0x00, 0x03, 0x60, 0x0F, 0xE0, 0x03, 0x78, 0x03, 0x60, 0x0F, 
+    0xE0, 0x03, 0x78, 0x03, 0x60, 0x00, 0x70, 0x04, 0xF8, 0x08, 0x88, 0x08, 0xFC, 0x1F, 0x88, 0x08, 
+    0x88, 0x0F, 0x10, 0x07, 0xF8, 0x00, 0x88, 0x00, 0xF8, 0x0C, 0x00, 0x03, 0x80, 0x00, 0x60, 0x00, 
+    0x98, 0x0F, 0x80, 0x08, 0x80, 0x0F, 0x70, 0x07, 0xF8, 0x0F, 0x88, 0x08, 0xF8, 0x09, 0x70, 0x07, 
+    0x00, 0x0E, 0x00, 0x0B, 0x3C, 0x00, 0x3C, 0x00, 0xE0, 0x0F, 0xF8, 0x3F, 0x1C, 0x70, 0x04, 0x40, 
+    0x04, 0x40, 0x1C, 0x70, 0xF8, 0x3F, 0xE0, 0x0F, 0x28, 0x00, 0x10, 0x00, 0x7C, 0x00, 0x7C, 0x00, 
+    0x10, 0x00, 0x28, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0xF0, 0x07, 0x80, 0x00, 0x80, 0x00, 
+    0x80, 0x00, 0x00, 0x18, 0x00, 0x1E, 0x00, 0x06, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 
+    0x80, 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x03, 0xC0, 0x00, 0x30, 0x00, 
+    0x0C, 0x00, 0x00, 0x00, 0xF0, 0x07, 0xF8, 0x0F, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x0F, 0xF0, 0x07, 
+    0x10, 0x08, 0x10, 0x08, 0xF8, 0x0F, 0xF8, 0x0F, 0x00, 0x08, 0x00, 0x08, 0x30, 0x0C, 0x08, 0x0E, 
+    0x08, 0x0B, 0x88, 0x09, 0xF8, 0x08, 0x70, 0x08, 0x10, 0x04, 0x08, 0x08, 0x88, 0x08, 0x88, 0x08, 
+    0xF8, 0x0F, 0x70, 0x07, 0x80, 0x01, 0x60, 0x01, 0x10, 0x01, 0xF8, 0x0F, 0xF8, 0x0F, 0x00, 0x01, 
+    0x00, 0x04, 0x78, 0x08, 0x78, 0x08, 0x48, 0x08, 0xC8, 0x0F, 0x88, 0x07, 0xE0, 0x07, 0xF0, 0x0F, 
+    0x58, 0x08, 0x48, 0x08, 0xC8, 0x0F, 0x80, 0x07, 0x08, 0x00, 0x08, 0x0E, 0x88, 0x0F, 0xE8, 0x01, 
+    0x78, 0x00, 0x18, 0x00, 0x70, 0x07, 0xF8, 0x0F, 0x88, 0x08, 0x88, 0x08, 0xF8, 0x0F, 0x70, 0x07, 
+    0xF0, 0x00, 0xF8, 0x09, 0x08, 0x09, 0x08, 0x0D, 0xF8, 0x07, 0xF0, 0x03, 0x60, 0x0C, 0x60, 0x0C, 
+    0x00, 0x18, 0x30, 0x1E, 0x30, 0x06, 0x80, 0x01, 0xC0, 0x03, 0x60, 0x06, 0x30, 0x0C, 0x18, 0x18, 
+    0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 0x30, 0x03, 
+    0x18, 0x18, 0x30, 0x0C, 0x60, 0x06, 0xC0, 0x03, 0x80, 0x01, 0x10, 0x00, 0x08, 0x00, 0x88, 0x0D, 
+    0xC8, 0x0D, 0x78, 0x00, 0x30, 0x00, 0xE0, 0x07, 0x10, 0x08, 0xC8, 0x13, 0xE8, 0x17, 0x28, 0x14, 
+    0xE8, 0x13, 0xE8, 0x17, 0x10, 0x14, 0xE0, 0x03, 0x00, 0x0C, 0x80, 0x0F, 0xE0, 0x03, 0x38, 0x01, 
+    0x38, 0x01, 0xE0, 0x03, 0x80, 0x0F, 0x00, 0x0C, 0xF8, 0x0F, 0xF8, 0x0F, 0x88, 0x08, 0x88, 0x08, 
+    0x88, 0x08, 0xF8, 0x0F, 0x70, 0x07, 0xF0, 0x07, 0xF8, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 
+    0x08, 0x08, 0x30, 0x06, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x18, 0x0C, 0xF0, 0x07, 
+    0xE0, 0x03, 0xF8, 0x0F, 0xF8, 0x0F, 0x88, 0x08, 0x88, 0x08, 0x88, 0x08, 0x08, 0x08, 0xF8, 0x0F, 
+    0xF8, 0x0F, 0x88, 0x00, 0x88, 0x00, 0x88, 0x00, 0x08, 0x00, 0xF0, 0x07, 0xF8, 0x0F, 0x08, 0x08, 
+    0x08, 0x08, 0x88, 0x08, 0x88, 0x0F, 0xB0, 0x0F, 0xF8, 0x0F, 0xF8, 0x0F, 0x80, 0x00, 0x80, 0x00, 
+    0x80, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x08, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x08, 0x00, 0x08, 
+    0x08, 0x08, 0x08, 0x08, 0xF8, 0x0F, 0xF8, 0x07, 0xF8, 0x0F, 0xF8, 0x0F, 0xC0, 0x01, 0x60, 0x03, 
+    0x30, 0x06, 0x18, 0x0C, 0x08, 0x08, 0xF8, 0x0F, 0xF8, 0x0F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 
+    0x00, 0x08, 0xF8, 0x0F, 0x78, 0x00, 0xE0, 0x01, 0x80, 0x07, 0x80, 0x01, 0x60, 0x00, 0xF8, 0x0F, 
+    0xF8, 0x0F, 0xF8, 0x0F, 0x18, 0x00, 0x78, 0x00, 0xE0, 0x01, 0x80, 0x07, 0x00, 0x0E, 0xF8, 0x0F, 
+    0xF0, 0x07, 0xF8, 0x0F, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0xF8, 0x0F, 0xF0, 0x07, 0xF8, 0x0F, 
+    0xF8, 0x0F, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0xF8, 0x01, 0xF0, 0x00, 0xF0, 0x07, 0xF8, 0x0F, 
+    0x08, 0x08, 0x08, 0x08, 0x08, 0x18, 0xF8, 0x1F, 0xF0, 0x17, 0xF8, 0x0F, 0xF8, 0x0F, 0x88, 0x00, 
+    0x88, 0x01, 0x88, 0x03, 0xF8, 0x06, 0x70, 0x0C, 0x70, 0x06, 0xF8, 0x08, 0x88, 0x08, 0x88, 0x08, 
+    0x88, 0x08, 0x88, 0x0F, 0x30, 0x07, 0x08, 0x00, 0x08, 0x00, 0xF8, 0x0F, 0xF8, 0x0F, 0x08, 0x00, 
+    0x08, 0x00, 0xF8, 0x07, 0xF8, 0x0F, 0x00, 0x08, 0x00, 0x08, 0x00, 0x08, 0xF8, 0x0F, 0xF8, 0x07, 
+    0x38, 0x00, 0xF8, 0x00, 0xC0, 0x03, 0x00, 0x0F, 0x00, 0x0F, 0xC0, 0x03, 0xF8, 0x00, 0x38, 0x00, 
+    0xF8, 0x03, 0xF8, 0x0F, 0x00, 0x0F, 0xC0, 0x03, 0xF0, 0x00, 0xF0, 0x00, 0xC0, 0x03, 0x00, 0x0F, 
+    0xF8, 0x0F, 0xF8, 0x03, 0x18, 0x0C, 0x38, 0x0E, 0x60, 0x03, 0xC0, 0x01, 0xC0, 0x01, 0x60, 0x03, 
+    0x38, 0x0E, 0x18, 0x0C, 0x18, 0x00, 0x78, 0x00, 0xE0, 0x00, 0x80, 0x0F, 0x80, 0x0F, 0xE0, 0x00, 
+    0x78, 0x00, 0x18, 0x00, 0x08, 0x0E, 0x08, 0x0F, 0x88, 0x09, 0xC8, 0x08, 0x78, 0x08, 0x38, 0x08, 
+    0xFC, 0x1F, 0xFC, 0x1F, 0x04, 0x10, 0x04, 0x10, 0x0C, 0x00, 0x30, 0x00, 0xC0, 0x00, 0x00, 0x03, 
+    0x00, 0x0C, 0x04, 0x10, 0x04, 0x10, 0xFC, 0x1F, 0xFC, 0x1F, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 
+    0x08, 0x00, 0x08, 0x00, 0x10, 0x00, 0x20, 0x00, 0x40, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 
+    0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x04, 0x00, 0x0C, 0x00, 0x08, 0x00, 
+    0x00, 0x06, 0x40, 0x0F, 0x20, 0x09, 0x20, 0x09, 0xE0, 0x0F, 0xC0, 0x0F, 0xFC, 0x0F, 0xFC, 0x0F, 
+    0x40, 0x08, 0x20, 0x08, 0xE0, 0x0F, 0xC0, 0x07, 0xC0, 0x07, 0xE0, 0x0F, 0x20, 0x08, 0x20, 0x08, 
+    0x40, 0x04, 0xC0, 0x07, 0xE0, 0x0F, 0x20, 0x08, 0x20, 0x04, 0xFC, 0x0F, 0xFC, 0x0F, 0xC0, 0x07, 
+    0xE0, 0x0F, 0x20, 0x09, 0x20, 0x09, 0xE0, 0x09, 0xC0, 0x05, 0x20, 0x00, 0xF8, 0x0F, 0xFC, 0x0F, 
+    0x24, 0x00, 0x04, 0x00, 0xC0, 0x27, 0xE0, 0x4F, 0x20, 0x48, 0x20, 0x44, 0xE0, 0x7F, 0xE0, 0x3F, 
+    0xFC, 0x0F, 0xFC, 0x0F, 0x40, 0x00, 0x20, 0x00, 0xE0, 0x0F, 0xC0, 0x0F, 0xEC, 0x0F, 0xEC, 0x0F, 
+    0x20, 0x40, 0xEC, 0x7F, 0xEC, 0x3F, 0xFC, 0x0F, 0xFC, 0x0F, 0x80, 0x03, 0xC0, 0x06, 0x60, 0x0C, 
+    0x20, 0x08, 0xFC, 0x0F, 0xFC, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0x20, 0x00, 0xE0, 0x0F, 0xC0, 0x0F, 
+    0x20, 0x00, 0xE0, 0x0F, 0xC0, 0x0F, 0xE0, 0x0F, 0xE0, 0x0F, 0x40, 0x00, 0x20, 0x00, 0xE0, 0x0F, 
+    0xC0, 0x0F, 0xC0, 0x07, 0xE0, 0x0F, 0x20, 0x08, 0x20, 0x08, 0xE0, 0x0F, 0xC0, 0x07, 0xE0, 0x7F, 
+    0xE0, 0x7F, 0x40, 0x08, 0x20, 0x08, 0xE0, 0x0F, 0xC0, 0x07, 0xC0, 0x07, 0xE0, 0x0F, 0x20, 0x08, 
+    0x20, 0x04, 0xE0, 0x7F, 0xE0, 0x7F, 0xE0, 0x0F, 0xE0, 0x0F, 0x40, 0x00, 0x60, 0x00, 0x60, 0x00, 
+    0xC0, 0x04, 0xE0, 0x09, 0xA0, 0x09, 0x20, 0x0B, 0x20, 0x0F, 0x40, 0x06, 0x20, 0x00, 0xF8, 0x07, 
+    0xF8, 0x0F, 0x20, 0x08, 0x20, 0x08, 0xE0, 0x07, 0xE0, 0x0F, 0x00, 0x08, 0x00, 0x04, 0xE0, 0x0F, 
+    0xE0, 0x0F, 0xE0, 0x00, 0xE0, 0x03, 0x00, 0x0F, 0x00, 0x0C, 0x00, 0x0F, 0xE0, 0x03, 0xE0, 0x00, 
+    0xE0, 0x00, 0xE0, 0x07, 0x00, 0x0E, 0xC0, 0x03, 0xC0, 0x03, 0x00, 0x0E, 0xE0, 0x07, 0xE0, 0x00, 
+    0x60, 0x0C, 0xE0, 0x0E, 0x80, 0x03, 0x80, 0x03, 0xE0, 0x0E, 0x60, 0x0C, 0xE0, 0x00, 0xE0, 0x03, 
+    0x00, 0x6F, 0x00, 0x7C, 0x00, 0x1F, 0xE0, 0x03, 0xE0, 0x00, 0x20, 0x0C, 0x20, 0x0E, 0x20, 0x0B, 
+    0xA0, 0x09, 0xE0, 0x08, 0x60, 0x08, 0x80, 0x00, 0x80, 0x00, 0xF8, 0x1F, 0x7C, 0x3F, 0x04, 0x20, 
+    0x04, 0x20, 0xFC, 0x3F, 0xFC, 0x3F, 0x04, 0x20, 0x04, 0x20, 0x7C, 0x3F, 0xF8, 0x1F, 0x80, 0x00, 
+    0x80, 0x00, 0x80, 0x03, 0xC0, 0x00, 0xC0, 0x00, 0x80, 0x01, 0x00, 0x03, 0x00, 0x03, 0xC0, 0x01, 
+    0xE0, 0x03, 0xF0, 0x07, 0x58, 0x0D, 0x48, 0x09, 0x48, 0x09, 0x48, 0x09, 0x10, 0x04, 0x00, 0x20, 
+    0x00, 0x3C, 0x00, 0x1C, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x1C, 
+    0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x0C, 
+    0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0xFC, 0x07, 0xFC, 0x07, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 
+    0x10, 0x01, 0x10, 0x01, 0xFC, 0x07, 0xFC, 0x07, 0x10, 0x01, 0x10, 0x01, 0x00, 0x00, 0x08, 0x00, 
+    0x0C, 0x00, 0x04, 0x00, 0x0C, 0x00, 0x08, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x20, 0x00, 0x20, 0x00, 
+    0x3C, 0x00, 0x1C, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x20, 0x00, 0x1C, 0x00, 0x3C, 0x00, 0x20, 0x00, 
+    0x20, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x20, 0x00, 0x3C, 0x00, 0x1C, 0x00, 0x00, 0x00, 0xC0, 0x03, 
+    0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xE0, 0x07, 0xC0, 0x03, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 
+    0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x80, 0x00, 0x00, 0x00, 0x80, 0x01, 0xC0, 0x03, 
+    0x60, 0x06, 0x00, 0x00, 0x80, 0x01, 0xC0, 0x03, 0x60, 0x06, 0x00, 0x00, 0x70, 0x00, 0x88, 0x00, 
+    0x88, 0x00, 0x88, 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 
+    0xF0, 0x0F, 0x80, 0x08, 0x80, 0x08, 0x80, 0x08, 0x00, 0x00, 0x10, 0x01, 0x88, 0x01, 0xC8, 0x01, 
+    0x78, 0x01, 0x30, 0x01, 0x00, 0x00, 0x90, 0x00, 0x08, 0x01, 0x28, 0x01, 0xF8, 0x01, 0xD0, 0x00, 
+    0xF0, 0x00, 0xF8, 0x01, 0x08, 0x01, 0x08, 0x01, 0xF8, 0x01, 0xF0, 0x00, 0x00, 0x00, 0x60, 0x06, 
+    0xC0, 0x03, 0x80, 0x01, 0x00, 0x00, 0x60, 0x06, 0xC0, 0x03, 0x80, 0x01, 0x10, 0x00, 0xF8, 0x09, 
+    0x00, 0x04, 0x00, 0x03, 0x80, 0x00, 0x60, 0x06, 0x10, 0x05, 0x88, 0x04, 0xC0, 0x0F, 0x00, 0x04, 
+    0x10, 0x00, 0xF8, 0x09, 0x00, 0x04, 0x00, 0x03, 0x80, 0x00, 0x60, 0x00, 0x90, 0x08, 0x48, 0x0C, 
+    0x40, 0x0A, 0x80, 0x09, 0x88, 0x00, 0xA8, 0x08, 0xD8, 0x04, 0x00, 0x02, 0x80, 0x01, 0x60, 0x06, 
+    0x10, 0x05, 0x88, 0x04, 0xC0, 0x0F, 0x00, 0x04, 0x00, 0x0C, 0x86, 0x0F, 0xE6, 0x03, 0x38, 0x01, 
+    0x38, 0x01, 0xE6, 0x03, 0x86, 0x0F, 0x00, 0x0C, 0xE0, 0x07, 0xF6, 0x0F, 0x16, 0x08, 0x10, 0x08, 
+    0x10, 0x08, 0x16, 0x08, 0xF6, 0x0F, 0xE0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x02, 
+    0x40, 0x01, 0x80, 0x00, 0x40, 0x01, 0x20, 0x02, 0xF0, 0x07, 0xF6, 0x0F, 0x06, 0x08, 0x00, 0x08, 
+    0x06, 0x08, 0xF6, 0x0F, 0xF0, 0x07, 0xF8, 0x0F, 0xFC, 0x0F, 0x04, 0x00, 0x44, 0x08, 0x7C, 0x08, 
+    0xF8, 0x0F, 0x80, 0x07, 0x00, 0x06, 0x4C, 0x0F, 0x2C, 0x09, 0x20, 0x09, 0x2C, 0x09, 0xEC, 0x0F, 
+    0xC0, 0x0F, 0xC0, 0x07, 0xEC, 0x0F, 0x2C, 0x08, 0x20, 0x08, 0x2C, 0x08, 0xEC, 0x0F, 0xC0, 0x07, 
+    0xC0, 0x17, 0xE0, 0x0F, 0x20, 0x0E, 0x20, 0x09, 0xE0, 0x08, 0xE0, 0x0F, 0xD0, 0x07, 0xE0, 0x07, 
+    0xEC, 0x0F, 0x0C, 0x08, 0x00, 0x08, 0x0C, 0x04, 0xEC, 0x0F, 0xE0, 0x0F
+};
+
+const struct font_info font_proportional_16px PROGMEM = {0x00+(0x07<<8),0x0B,0x10,0x20,0xFC,font_proportional_16px_data,(uint8_t*)font_proportional_16px_data+0xFC-0x20+1};
+
+#endif
+
+
diff --git a/pt100/lcdlib/Fonts/font_proportional_8px.c b/pt100/lcdlib/Fonts/font_proportional_8px.c
new file mode 100644 (file)
index 0000000..0d32ba8
--- /dev/null
@@ -0,0 +1,98 @@
+/*
+    created with FontEditor written by H. Reddmann (HaReddmann at t-online dot de)
+    using template file by J. Michel (jan at mueschelsoft.de)
+
+    File Name           : font_proportional_8px.c
+    Date                : 05.07.2009
+    Font size in bytes  : 0x0458, 1112
+    Font width          : 8
+    Font height         : 8
+    Font first char     : 0x20
+    Font last char      : 0xFF
+    Font bits per pixel : 1
+*/
+
+#include "../font.h"
+#ifdef FONTS_INCLUDE_font_proportional_8px
+
+
+
+const uint8_t font_proportional_8px_data[] PROGMEM = {
+    0x02, 0x01, 0x03, 0x05, 0x05, 0x07, 0x05, 0x01, 0x03, 0x03, 0x05, 0x05, 0x02, 0x03, 0x01, 0x04, 
+    0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x01, 0x01, 0x04, 0x05, 0x04, 0x04, 
+    0x07, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x03, 0x04, 0x05, 0x05, 0x05, 0x05, 0x05, 
+    0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x03, 0x04, 0x03, 0x05, 0x05, 
+    0x02, 0x05, 0x05, 0x04, 0x05, 0x05, 0x04, 0x05, 0x04, 0x01, 0x02, 0x04, 0x02, 0x05, 0x04, 0x04, 
+    0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x05, 0x07, 0x05, 0x04, 0x04, 0x04, 0x02, 0x04, 0x05, 0x00, 
+    0x04, 0x05, 0x02, 0x00, 0x04, 0x08, 0x03, 0x03, 0x04, 0x09, 0x00, 0x03, 0x06, 0x00, 0x00, 0x00, 
+    0x00, 0x02, 0x02, 0x04, 0x04, 0x04, 0x04, 0x00, 0x04, 0x06, 0x00, 0x03, 0x05, 0x00, 0x00, 0x00, 
+    0x00, 0x00, 0x04, 0x04, 0x05, 0x05, 0x02, 0x04, 0x05, 0x06, 0x03, 0x05, 0x04, 0x03, 0x07, 0x05, 
+    0x04, 0x05, 0x03, 0x03, 0x02, 0x04, 0x05, 0x02, 0x03, 0x02, 0x04, 0x05, 0x06, 0x06, 0x06, 0x04, 
+    0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 0x03, 
+    0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 
+    0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x03, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x03, 0x03, 
+    0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x05, 0x04, 0x04, 0x04, 0x04, 0x04, 0x03, 0x03, 0x03, 
+    
+    0x00, 0x00, 0x5F, 0x07, 0x00, 0x07, 0x74, 0x1C, 0x77, 0x1C, 0x17, 0x2E, 0x6A, 0x3E, 0x2B, 0x3A, 
+    0x06, 0x49, 0x36, 0x08, 0x36, 0x49, 0x30, 0x36, 0x49, 0x59, 0x76, 0x48, 0x07, 0x3C, 0x42, 0x81, 
+    0x81, 0x42, 0x3C, 0x0A, 0x04, 0x1F, 0x04, 0x0A, 0x08, 0x08, 0x3E, 0x08, 0x08, 0x80, 0x60, 0x08, 
+    0x08, 0x08, 0x40, 0xC0, 0x30, 0x0C, 0x03, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x44, 0x42, 0x7F, 0x40, 
+    0x40, 0x46, 0x61, 0x51, 0x49, 0x46, 0x22, 0x41, 0x49, 0x49, 0x36, 0x18, 0x14, 0x12, 0x7F, 0x10, 
+    0x27, 0x45, 0x45, 0x45, 0x39, 0x3E, 0x49, 0x49, 0x49, 0x30, 0x01, 0x01, 0x71, 0x0D, 0x03, 0x36, 
+    0x49, 0x49, 0x49, 0x36, 0x06, 0x49, 0x49, 0x29, 0x1E, 0x36, 0xD0, 0x08, 0x14, 0x22, 0x41, 0x14, 
+    0x14, 0x14, 0x14, 0x14, 0x41, 0x22, 0x14, 0x08, 0x02, 0x51, 0x09, 0x06, 0x3C, 0x42, 0x99, 0xA5, 
+    0xBD, 0x42, 0x1C, 0x7C, 0x12, 0x11, 0x12, 0x7C, 0x7F, 0x49, 0x49, 0x49, 0x36, 0x3E, 0x41, 0x41, 
+    0x41, 0x22, 0x7F, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x49, 0x49, 0x49, 0x41, 0x7F, 0x09, 0x09, 0x09, 
+    0x01, 0x3E, 0x41, 0x49, 0x49, 0x7A, 0x7F, 0x08, 0x08, 0x08, 0x7F, 0x41, 0x7F, 0x41, 0x40, 0x41, 
+    0x41, 0x3F, 0x7F, 0x08, 0x14, 0x22, 0x41, 0x7F, 0x40, 0x40, 0x40, 0x40, 0x7F, 0x06, 0x0C, 0x06, 
+    0x7F, 0x7F, 0x06, 0x08, 0x30, 0x7F, 0x3E, 0x41, 0x41, 0x41, 0x3E, 0x7F, 0x09, 0x09, 0x09, 0x06, 
+    0x3E, 0x41, 0x61, 0xC1, 0xBE, 0x7F, 0x09, 0x19, 0x29, 0x46, 0x26, 0x49, 0x49, 0x49, 0x32, 0x01, 
+    0x01, 0x7F, 0x01, 0x01, 0x3F, 0x40, 0x40, 0x40, 0x3F, 0x07, 0x38, 0x40, 0x38, 0x07, 0x1F, 0x60, 
+    0x1F, 0x60, 0x1F, 0x63, 0x14, 0x08, 0x14, 0x63, 0x01, 0x06, 0x78, 0x06, 0x01, 0x61, 0x51, 0x49, 
+    0x45, 0x43, 0x7F, 0x41, 0x41, 0x03, 0x0C, 0x30, 0xC0, 0x41, 0x41, 0x7F, 0x04, 0x02, 0x01, 0x02, 
+    0x04, 0x80, 0x80, 0x80, 0x80, 0x80, 0x01, 0x02, 0x20, 0x54, 0x54, 0x54, 0x78, 0x7F, 0x44, 0x44, 
+    0x44, 0x38, 0x38, 0x44, 0x44, 0x44, 0x38, 0x44, 0x44, 0x44, 0x7F, 0x38, 0x54, 0x54, 0x54, 0x58, 
+    0x08, 0x7E, 0x09, 0x01, 0x18, 0xA4, 0xA4, 0xA4, 0x78, 0x7F, 0x04, 0x04, 0x78, 0x7D, 0x80, 0x7D, 
+    0x7F, 0x10, 0x28, 0x44, 0x3F, 0x40, 0x7C, 0x04, 0x78, 0x04, 0x78, 0x7C, 0x04, 0x04, 0x78, 0x38, 
+    0x44, 0x44, 0x38, 0xFC, 0x24, 0x24, 0x24, 0x18, 0x18, 0x24, 0x24, 0x24, 0xFC, 0x7C, 0x08, 0x04, 
+    0x04, 0x48, 0x54, 0x54, 0x24, 0x04, 0x3F, 0x44, 0x40, 0x3C, 0x40, 0x40, 0x7C, 0x1C, 0x20, 0x40, 
+    0x20, 0x1C, 0x1C, 0x60, 0x60, 0x1C, 0x60, 0x60, 0x1C, 0x44, 0x28, 0x10, 0x28, 0x44, 0x9C, 0xA0, 
+    0x60, 0x1C, 0x64, 0x54, 0x54, 0x4C, 0x18, 0x7E, 0x81, 0x81, 0xFF, 0xFF, 0x81, 0x81, 0x7E, 0x18, 
+    0x18, 0x04, 0x08, 0x10, 0x0C, 0x14, 0x3E, 0x55, 0x55, 0xFF, 0x81, 0x81, 0x81, 0xFF, 0x80, 0x60, 
+    0x80, 0x60, 0x80, 0x60, 0x60, 0x60, 0x00, 0x60, 0x60, 0x00, 0x60, 0x60, 0x04, 0x7F, 0x04, 0x14, 
+    0x7F, 0x14, 0x02, 0x01, 0x01, 0x02, 0x46, 0x29, 0x16, 0x08, 0x34, 0x4A, 0x31, 0x48, 0x30, 0x00, 
+    0x18, 0x24, 0x3E, 0x41, 0x22, 0x7F, 0x49, 0x41, 0x03, 0x04, 0x04, 0x03, 0x03, 0x04, 0x03, 0x04, 
+    0x04, 0x03, 0x04, 0x03, 0x18, 0x3C, 0x3C, 0x18, 0x08, 0x08, 0x08, 0x08, 0x03, 0x01, 0x02, 0x03, 
+    0x02, 0x0E, 0x02, 0x0E, 0x06, 0x0E, 0x00, 0x48, 0x30, 0x38, 0x44, 0x38, 0x54, 0x48, 0x38, 0x44, 
+    0xFE, 0x44, 0x48, 0x7E, 0x49, 0x01, 0x44, 0x38, 0x28, 0x38, 0x44, 0x03, 0x14, 0x7C, 0x14, 0x03, 
+    0xE7, 0xE7, 0x4E, 0x55, 0x55, 0x39, 0x01, 0x01, 0x00, 0x01, 0x01, 0x1C, 0x2A, 0x55, 0x55, 0x22, 
+    0x1C, 0x1D, 0x15, 0x1E, 0x18, 0x24, 0x00, 0x18, 0x24, 0x08, 0x08, 0x08, 0x18, 0x08, 0x08, 0x08, 
+    0x3C, 0x42, 0xBD, 0x95, 0xA9, 0x42, 0x3C, 0x01, 0x01, 0x01, 0x01, 0x01, 0x06, 0x09, 0x09, 0x06, 
+    0x44, 0x44, 0x5F, 0x44, 0x44, 0x19, 0x15, 0x12, 0x15, 0x15, 0x0A, 0x02, 0x01, 0xFC, 0x20, 0x20, 
+    0x1C, 0x0E, 0x7F, 0x01, 0x7F, 0x01, 0x18, 0x18, 0x00, 0x80, 0x40, 0x02, 0x1F, 0x06, 0x09, 0x09, 
+    0x06, 0x24, 0x18, 0x00, 0x24, 0x18, 0x82, 0x4F, 0x30, 0x4C, 0x62, 0xF1, 0x82, 0x4F, 0x30, 0x0C, 
+    0xD2, 0xB1, 0x95, 0x5F, 0x30, 0x4C, 0x62, 0xF1, 0x30, 0x48, 0x45, 0x20, 0x60, 0x39, 0x2E, 0x38, 
+    0x60, 0x60, 0x38, 0x2E, 0x39, 0x60, 0x70, 0x1D, 0x13, 0x1D, 0x70, 0x72, 0x1D, 0x12, 0x1E, 0x71, 
+    0x70, 0x1D, 0x12, 0x1D, 0x70, 0x60, 0x3B, 0x25, 0x3B, 0x60, 0x7E, 0x11, 0x7F, 0x49, 0x41, 0x1E, 
+    0x21, 0x61, 0x92, 0x7C, 0x55, 0x56, 0x44, 0x7C, 0x56, 0x55, 0x44, 0x7C, 0x56, 0x55, 0x46, 0x7D, 
+    0x54, 0x54, 0x45, 0x45, 0x7E, 0x44, 0x44, 0x7E, 0x45, 0x46, 0x7D, 0x46, 0x45, 0x7C, 0x45, 0x08, 
+    0x7F, 0x49, 0x41, 0x3E, 0x7E, 0x09, 0x12, 0x22, 0x7D, 0x38, 0x45, 0x46, 0x44, 0x38, 0x38, 0x44, 
+    0x46, 0x45, 0x38, 0x38, 0x46, 0x45, 0x46, 0x38, 0x3A, 0x45, 0x45, 0x46, 0x39, 0x38, 0x45, 0x44, 
+    0x45, 0x38, 0x22, 0x14, 0x08, 0x14, 0x22, 0xBC, 0x62, 0x5A, 0x46, 0x3D, 0x3C, 0x41, 0x42, 0x3C, 
+    0x3C, 0x42, 0x41, 0x3C, 0x3C, 0x42, 0x41, 0x3E, 0x3D, 0x40, 0x40, 0x3D, 0x06, 0x08, 0xF2, 0x09, 
+    0x06, 0x7F, 0x22, 0x22, 0x1C, 0xFE, 0x09, 0x89, 0x76, 0x20, 0x55, 0x56, 0x78, 0x20, 0x56, 0x55, 
+    0x78, 0x22, 0x55, 0x55, 0x7A, 0x23, 0x55, 0x56, 0x7B, 0x20, 0x55, 0x54, 0x79, 0x27, 0x55, 0x57, 
+    0x78, 0x20, 0x54, 0x38, 0x54, 0x48, 0x38, 0x44, 0xC4, 0x38, 0x55, 0x56, 0x58, 0x38, 0x56, 0x55, 
+    0x58, 0x3A, 0x55, 0x55, 0x5A, 0x39, 0x54, 0x54, 0x59, 0x01, 0x7A, 0x7A, 0x01, 0x02, 0x79, 0x02, 
+    0x02, 0x78, 0x02, 0x60, 0x91, 0x92, 0x7C, 0x7B, 0x09, 0x0A, 0x73, 0x38, 0x45, 0x46, 0x38, 0x38, 
+    0x46, 0x45, 0x38, 0x3A, 0x45, 0x45, 0x3A, 0x3B, 0x45, 0x46, 0x3B, 0x39, 0x44, 0x44, 0x39, 0x08, 
+    0x08, 0x2A, 0x08, 0x08, 0xB8, 0x64, 0x4C, 0x3A, 0x3C, 0x41, 0x42, 0x7C, 0x3C, 0x42, 0x41, 0x7C, 
+    0x3A, 0x41, 0x41, 0x7A, 0x3D, 0x40, 0x40, 0x7D, 0x98, 0x62, 0x19, 0xFF, 0x42, 0x3C, 0x9A, 0x60, 
+    0x1A
+};
+
+const struct font_info font_proportional_8px PROGMEM = {0x58+(0x04<<8),0x08,0x08,0x20,0xFF,font_proportional_8px_data,(uint8_t*)font_proportional_8px_data+0xFF-0x20+1};
+
+#endif
+
+
diff --git a/pt100/lcdlib/Fonts/symbols_16px.c b/pt100/lcdlib/Fonts/symbols_16px.c
new file mode 100644 (file)
index 0000000..3ed4bd3
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+    created with FontEditor written by H. Reddmann   HaReddmann at t-online dot de
+    using template file by J. Michel     jan at mueschelsoft.de
+
+    File Name           : symbols_16px.c
+    Date                : 05.09.2010
+    Font size in bytes  : 0x0130, 304
+    Font width          : 20
+    Font height         : 16
+    Font first char     : 0x00
+    Font last char      : 0x09
+    Font bits per pixel : 1
+*/
+
+#include "../font.h"
+#ifdef FONTS_INCLUDE_symbols_16px
+
+
+
+const uint8_t symbols_16px_data[] PROGMEM = {
+    0x0F, 0x0F, 0x0D, 0x0D, 0x0D, 0x0D, 0x0D, 0x0E, 0x0F, 0x13, 
+    0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x84, 0x43, 0x8C, 0x63, 0x9C, 0x73, 
+    0xBC, 0x7B, 0xF8, 0x3F, 0xF0, 0x1F, 0xE0, 0x0F, 0xC0, 0x07, 0x80, 0x03, 0x00, 0x01, 0x00, 0x01, 
+    0x80, 0x03, 0xC0, 0x07, 0xE0, 0x0F, 0xF0, 0x1F, 0xF8, 0x3F, 0xBC, 0x7B, 0x9C, 0x73, 0x8C, 0x63, 
+    0x84, 0x43, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x00, 0x0F, 0x80, 0x07, 
+    0xC0, 0x03, 0xE0, 0x01, 0xF0, 0x00, 0xF8, 0xFF, 0xFC, 0xFF, 0xF8, 0xFF, 0xF0, 0x00, 0xE0, 0x01, 
+    0xC0, 0x03, 0x80, 0x07, 0x00, 0x0F, 0xC0, 0x03, 0x80, 0x07, 0x00, 0x0F, 0x00, 0x1E, 0x00, 0x3C, 
+    0xFC, 0x7F, 0xFC, 0xFF, 0xFC, 0x7F, 0x00, 0x3C, 0x00, 0x1E, 0x00, 0x0F, 0x80, 0x07, 0xC0, 0x03, 
+    0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0xFC, 0x7F, 0xFC, 0x7F, 0xFC, 0x7F, 
+    0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 
+    0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 0x80, 0x03, 
+    0x80, 0x03, 0x80, 0x03, 0x00, 0x00, 0x00, 0x20, 0x30, 0x70, 0x78, 0x78, 0xF8, 0x3C, 0xE0, 0x1F, 
+    0x80, 0x0F, 0x80, 0x07, 0xC0, 0x0F, 0xE0, 0x1E, 0x70, 0x3C, 0x78, 0x38, 0x30, 0x18, 0x00, 0x04, 
+    0x00, 0x0E, 0x00, 0x3E, 0x00, 0xF8, 0x00, 0x78, 0x00, 0x3C, 0x00, 0x0E, 0x80, 0x03, 0xC0, 0x01, 
+    0x60, 0x00, 0x30, 0x00, 0x18, 0x00, 0x0C, 0x00, 0x02, 0x00, 0xE0, 0x0F, 0xF0, 0x1F, 0x10, 0x10, 
+    0x10, 0x10, 0x10, 0x10, 0xF0, 0x1F, 0xE0, 0x0F, 0x00, 0x00, 0xF0, 0x1F, 0xF0, 0x1F, 0x80, 0x03, 
+    0xC0, 0x06, 0x60, 0x0C, 0x30, 0x18, 0x10, 0x10, 0xF0, 0x1F, 0xF0, 0x1F, 0x10, 0x11, 0x10, 0x11, 
+    0x10, 0x10, 0x00, 0x00, 0xE0, 0x0C, 0xF0, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x1F, 0x60, 0x0E, 
+    0x00, 0x00, 0xE0, 0x0F, 0xF0, 0x1F, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x60, 0x0C, 0x00
+};
+
+const struct font_info symbols_16px PROGMEM = {0x30+(0x01<<8),0x14,0x10,0x00,0x09,symbols_16px_data,(uint8_t*)symbols_16px_data+0x09-0x00+1};
+
+#endif
+
+
diff --git a/pt100/lcdlib/Fonts/symbols_8px.c b/pt100/lcdlib/Fonts/symbols_8px.c
new file mode 100644 (file)
index 0000000..192113f
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+    created with FontEditor written by H. Reddmann   HaReddmann at t-online dot de
+    using template file by J. Michel     jan at mueschelsoft.de
+
+    File Name           : symbols_8px.c
+    Date                : 03.05.2010
+    Font size in bytes  : 0x008C, 140
+    Font width          : 11
+    Font height         : 8
+    Font first char     : 0x00
+    Font last char      : 0x0F
+    Font bits per pixel : 1
+*/
+
+#include "../font.h"
+#ifdef FONTS_INCLUDE_symbols_8px
+
+
+
+const uint8_t symbols_8px_data[] PROGMEM = {
+    0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x00, 0x08, 0x08, 0x08, 0x0A, 0x07, 0x04, 
+    
+    0x18, 0x18, 0x18, 0x99, 0xDB, 0x7E, 0x3C, 0x18, 0x18, 0x3C, 0x7E, 0xDB, 0x99, 0x18, 0x18, 0x18, 
+    0x18, 0x0C, 0x06, 0xFF, 0xFF, 0x06, 0x0C, 0x18, 0x18, 0x30, 0x60, 0xFF, 0xFF, 0x60, 0x30, 0x18, 
+    0x18, 0x18, 0x18, 0xFF, 0xFF, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 
+    0xC0, 0xE3, 0x77, 0x1C, 0x38, 0x6C, 0xE7, 0xC3, 0x30, 0x60, 0xC0, 0xE0, 0x38, 0x0C, 0x06, 0x03, 
+    0x3C, 0x42, 0x42, 0x3C, 0x00, 0x7E, 0x18, 0x66, 0x3C, 0x42, 0x95, 0xA1, 0xA1, 0x95, 0x42, 0x3C, 
+    0x3C, 0x42, 0xA5, 0x91, 0x91, 0xA5, 0x42, 0x3C, 0x3C, 0x42, 0xA5, 0xA1, 0xA1, 0xA5, 0x42, 0x3C, 
+    0x7E, 0x4A, 0x00, 0x44, 0x4A, 0x32, 0x00, 0x3C, 0x42, 0x42, 0x30, 0x78, 0xFC, 0xB4, 0x30, 0x3F, 
+    0x3F, 0xC3, 0x66, 0x3C, 0x18
+};
+
+const struct font_info symbols_8px PROGMEM = {0x8C+(0x00<<8),0x0B,0x08,0x00,0x0F,symbols_8px_data,(uint8_t*)symbols_8px_data+0x0F-0x00+1};
+
+#endif
+
+
diff --git a/pt100/lcdlib/font.c b/pt100/lcdlib/font.c
new file mode 100644 (file)
index 0000000..a5d5169
--- /dev/null
@@ -0,0 +1,395 @@
+/******************************************************************************
+ * Font Generator
+ * designed for GLCD with memory organized in vertical bytes
+ * 
+ * Own character sets or symbols can easily be added:
+ * The structure of font data is compatible with Hagen Reddmanns FontEditor
+ * http://www.mikrocontroller.net/topic/99701#865331
+ * when using the attached template_simplefont.c and template_simplefont.h
+ * files, saving in uncompressed format and using font heights of multiples
+ * of 8.
+ * 
+ * Fixed width fonts are treated as proportional fonts, but do not have a 
+ * table for the width of each character (D'OH!)
+ * 
+ * When using with other GLCDs, make sure the byte orientation of the LCDs
+ * memory matches the design of the ea-dogm series or link the LCD access
+ * functions (see header file) to functions converting the data.
+ * 
+ * My thanks go to Hagen Reddmann for his Font Editor software
+ * (http://www.mikrocontroller.net/topic/99701#865331)
+ * and Benedikt K. for his various LCD fonts 
+ * (http://www.mikrocontroller.net/topic/54860)
+ * as well as Oliver Schwaneberg for adding several new functions
+ * 
+ * Author:  Jan Michel (jan at mueschelsoft dot de)
+ * License: GNU General Public License, version 3
+ * Version: v0.94 October 2011
+ * ****************************************************************************
+ * New features in v0.94
+ *   - Characters may now be bigger than 128 Byte and occupy more than 1024 Pixels each
+ *   - Added 32px high digits (4 digits plus colon plus large spacing = 128px)
+ * New features in v0.93
+ *   - output functions for long / int / float depend on global font setting
+ *     (removing the two additional parameters made usage much easier I think)
+ *   - fixed bug in font_proportional_16px regarding space
+ *   - fixed symbol_16px
+ * New features in v0.92
+ *   - font and style setting can be stored globally (lcd_set_font)
+ *   - simple put functions: lcd_putc, lcd_putstr, lcd_putstr_P
+ *   - added 24px high, 16px wide digit font
+ *   - added underline to font styles
+ * New features in v0.91
+ *   - text can be displayed in inverted mode
+ *   - text can automatically wrap to the next line (if selected)
+ *   - direct output of long / int / float
+ *   - put_string and put_char functions now return the total width of the
+ *     text in pixel
+ *****************************************************************************/
+
+#include "font.h"
+
+/******************************************************************************
+ * Global storage for easy-to-use putc functions
+ *****************************************************************************/
+FONT_P global_font_select;
+uint8_t global_font_style;
+
+/******************************************************************************
+ * Stores the default font type and style in a global variable
+ * font          - Font identifier
+ * style         - Style Modifier
+ */
+inline void lcd_set_font(FONT_P font, uint8_t style){
+  global_font_select = font;
+  global_font_style = style;
+}
+
+/******************************************************************************
+ * Helper Functions to find, retrieve and display characters
+ *****************************************************************************/
+
+/******************************************************************************
+ * Loads the pointer to the selected fonts data
+ */
+inline PGM_P font_data(FONT_P font) {
+  PGM_P tmp;
+  if (sizeof(tmp) == 2)
+    tmp = (PGM_P)pgm_read_word(&(font->data));
+  else
+    memcpy_P((char*)&tmp,&(font->data),sizeof(tmp));
+  return tmp;
+  }
+
+
+/******************************************************************************
+ * Loads the pointer to the width table for the selected font
+ */
+inline PGM_P font_widthtable(FONT_P font) {
+  PGM_P tmp;
+  if (sizeof(tmp) == 2)
+    tmp = (PGM_P)pgm_read_word(&(font->widthtable));
+  else
+    memcpy_P((char*)&tmp,&(font->widthtable),sizeof(tmp));
+  return tmp;
+  }
+
+
+/******************************************************************************
+ * Loads the height (in bytes) of the given font
+ */
+inline uint8_t font_get_height_bytes(FONT_P font) {
+  FONT_P tmp = font;
+  uint8_t t = pgm_read_byte(&tmp->height);
+  return (((uint8_t)(t-1)>>3)+1);
+  }
+
+
+
+
+/******************************************************************************
+ * Get the number of the character in the given font
+ */
+inline int16_t font_get_char_number(FONT_P font, char character) {
+  FONT_P tmp = font;
+  if (character > pgm_read_byte(&tmp->lastchar)) 
+    return -1;
+  uint8_t first = pgm_read_byte(&tmp->firstchar);
+  if (character < first) 
+    return -1;
+  return character - first;
+  }
+
+
+/******************************************************************************
+ * Read the width of the selected character from the font width table
+ */
+inline uint8_t font_get_char_width(FONT_P font, char character) {
+  PGM_P table = font_widthtable(font);
+  if (table)
+    return pgm_read_byte(table+font_get_char_number(font,character));
+  else
+    return pgm_read_byte(&font->width);
+  }
+
+
+/******************************************************************************
+ * Calculate the pointer to the requested character inside the Flash ROM
+ */
+PGM_P font_get_char_position(FONT_P font, char character) {
+  uint16_t ret         = 0;
+  int16_t  charnum_ret = font_get_char_number(font, character);
+  uint8_t  charnum     = charnum_ret;
+  PGM_P    base        = font_widthtable(font);
+
+  if (charnum_ret < 0)     //char not found
+    return 0;
+  if(base == 0)            //fixed width
+    return font_data(font) + (uint16_t)charnum * (uint8_t)(font_get_height_bytes(font) * font_get_char_width(font,character));
+  if (charnum)             //proportional width
+    while(charnum--)
+      ret += (uint8_t) pgm_read_byte(base++);
+  return (font_data(font))+ret*font_get_height_bytes(font);
+  }
+
+
+/******************************************************************************
+ * Doubles the bytes of either the upper of lower nibble of the given byte
+ * part = 0:  abcdefgh -> eeffgghh
+ * part = 1:  abcdefgh -> aabbccdd
+ * Used for double height font
+ */
+inline unsigned char double_bits(uint8_t part, char c) {
+  uint8_t t = 0;
+  if (part) c = c>>4;
+  if (c & 0x08) t  = 0xC0;
+  if (c & 0x04) t |= 0x30;
+  if (c & 0x02) t |= 0x0C;
+  if (c & 0x01) t |= 0x03;
+  return t;
+  }
+
+/******************************************************************************
+ * Output functions for characters and strings
+ *****************************************************************************/
+
+/******************************************************************************
+ * Outputs a character on the display, using the given font and style
+ */
+uint8_t lcd_put_char(FONT_P font, uint8_t style, char character) {
+  uint16_t  i;
+  uint8_t row  = 0;                             //current row of char
+  #ifdef LCD_DOUBLE_PIXEL
+    uint8_t hc   = 1;                           //height forced
+  #else
+    uint8_t hc   = (style & DOUBLE_HEIGHT)?1:0; //height changed
+  #endif
+  uint8_t wc   = (style & DOUBLE_WIDTH)?1:0;    //width changed
+  uint8_t ul   = (style & UNDERLINE)?0x80:0x00; //underline
+  uint8_t inv  = (style & INVERT)?0xFF:0;       //inverted
+  uint8_t spc  = (style & SPACING)?3:1;         //spacing
+  uint8_t tmp;
+
+  //load information about character
+   uint8_t char_width    = font_get_char_width(font,character); 
+   uint8_t font_height   = font_get_height_bytes(font);
+   uint8_t free_space    = spc;
+   PGM_P   tableposition = font_get_char_position(font,character);
+
+  //final size of character
+  uint8_t char_final_width  = (uint8_t)(char_width+free_space) << wc;
+  uint8_t char_final_height = (uint8_t)font_height << hc; 
+
+  //check for avail. space on display
+  if ((style & WRAP) && (LCD_CURRENT_COL() + char_final_width > LCD_WIDTH)) {
+    LCD_MOVE_TO(LCD_CURRENT_PAGE()+char_final_height,0);
+    if (character == ' ') return 0;
+    }
+  
+  //write character
+  do {
+    for(i=(row>>hc); i<char_width*font_height; i+=font_height) {
+      tmp = pgm_read_byte(tableposition+i);
+      if(row == char_final_height-1) 
+        tmp |= ul;
+      if(hc)
+        tmp = double_bits((row&1),tmp);
+      if(inv)
+        tmp = ~tmp;
+      LCD_WRITE(tmp);
+      if(wc) 
+        LCD_WRITE(tmp);
+      }
+    if (free_space) {
+      uint8_t c = inv;
+      if(row == char_final_height-1) {
+        c ^= ul; 
+        if(hc)
+          c ^= ul>>1;      
+          }
+           for(uint8_t x = free_space<<wc; x>0;x--) {
+        LCD_WRITE(c);
+                   }               
+      }
+    LCD_MOVE(1,-char_final_width);
+    } while (++row < char_final_height);
+
+  //move cursor to upper right corner of character
+  LCD_MOVE(-char_final_height,char_final_width);
+  return char_final_width;
+  }
+
+
+/******************************************************************************
+ * Outputs a string on the display, loading it from the program memory,
+ * using the given font and style
+ */
+uint16_t lcd_put_string_P(FONT_P font, uint8_t style, PGM_P str) {
+  unsigned char t;
+  uint16_t length = 0;
+  while((t = pgm_read_byte(str++))) 
+    length += lcd_put_char(font,style,t);
+  return length;
+  }
+
+  
+/******************************************************************************
+ * Outputs a string on the display, using the given font and style
+ */
+uint16_t lcd_put_string(FONT_P font, uint8_t style, char* str) {
+  unsigned char t;
+  uint16_t length = 0;
+  while((t = *str++))
+    length += lcd_put_char(font,style,t);
+  return length;
+  }
+
+  
+/******************************************************************************
+ * Outputs a string on the display, using the given font and style, reading
+ * length characters from the memory
+ */ 
+uint16_t lcd_put_string_length(FONT_P font, uint8_t style, char* str, uint8_t length) {
+  unsigned char t;
+  uint16_t total_len = 0;
+  for(t=0;t<length;t++)
+    total_len += lcd_put_char(font,style,*str++);
+  return total_len;
+  }
+
+  
+/******************************************************************************
+ * Outputs a string on the display, using the given font and style, reading
+ * the string from program memory. The position of the string on the display
+ * is selected by page / col.
+ */ 
+uint16_t lcd_put_string_xy_P(FONT_P font, uint8_t style, PGM_P str,uint8_t page, uint8_t col) {
+  LCD_MOVE_TO(page,col);
+  return lcd_put_string_P(font,style,str);
+  }
+  
+  
+/******************************************************************************
+ * Outputs a string on the display, using the given font and style, reading
+ * the string from main memory. The position of the string on the display
+ * is selected by page / col.
+ */ 
+uint8_t lcd_put_char_xy(FONT_P font, uint8_t style, char character, uint8_t page, uint8_t col) {
+  LCD_MOVE_TO(page,col);
+  return lcd_put_char(font,style,character);
+  }
+
+
+/******************************************************************************
+ * Outputs a character on the display, using the global font and style
+ */ 
+uint8_t  lcd_putc(char c) {
+  return lcd_put_char(global_font_select, global_font_style, c);
+  }
+
+/******************************************************************************
+ * Outputs a character on the display, using the global font and style
+ */ 
+uint8_t  lcd_putc_xy(char c, uint8_t page, uint8_t col) {
+  return lcd_put_char_xy(global_font_select, global_font_style, c, page, col);
+  }  
+  
+  
+/******************************************************************************
+ * Outputs a string on the display, using the global font and style
+ */   
+uint16_t lcd_putstr(char* str) {
+  return lcd_put_string(global_font_select, global_font_style, str);
+  }
+
+  
+  
+/******************************************************************************
+ * Outputs a string stored in program memory on the display, using the global 
+ * font and style
+ */   
+uint16_t lcd_putstr_P(PGM_P str) {
+  return lcd_put_string_P(global_font_select, global_font_style, str);
+  }
+
+  
+/******************************************************************************
+ * Outputs a string on the display, using the global font and style at the 
+ * given position
+ */   
+uint16_t lcd_putstr_xy_P(PGM_P  str, uint8_t page, uint8_t col) {
+  return lcd_put_string_xy_P(global_font_select, global_font_style, str, page, col);
+  }  
+  
+
+#if INCLUDE_INTEGER_OUTPUT == 1
+/******************************************************************************
+ * Outputs a 32bit signed integer on the display // Added by Olli S.
+ */ 
+uint16_t lcd_put_long  (int32_t integer) {
+  char buffer[10];
+       ltoa(integer, buffer, 10);
+       return lcd_put_string(global_font_select, global_font_style, buffer);
+  }
+
+  
+/******************************************************************************
+ * Outputs a 16bit signed integer on the display // Added by Olli S.
+ */   
+uint16_t lcd_put_int (int16_t integer) {
+  char buffer[10];
+       itoa(integer, buffer, 10);
+       return lcd_put_string(global_font_select, global_font_style, buffer);
+  }  
+
+  
+/******************************************************************************
+ * Outputs a 16bit unsigned integer on the display // Added by Olli S.
+ */   
+uint16_t lcd_put_uint  (uint16_t integer) {
+  char buffer[10];
+       utoa(integer, buffer, 10);
+       return lcd_put_string(global_font_select, global_font_style, buffer);
+  }  
+  
+/******************************************************************************
+ * Outputs a 8bit signed integer on the display
+ */   
+uint16_t lcd_put_short (int8_t integer) {
+  char buffer[10];
+       itoa(integer, buffer, 10);
+       return lcd_put_string(global_font_select, global_font_style, buffer);
+  }    
+  
+#endif
+
+#if INCLUDE_FLOAT_OUTPUT == 1
+/******************************************************************************
+ * Outputs a float on the display // Added by Olli S.
+ */ 
+uint16_t lcd_put_float  (float fvalue) {
+  char buffer[10];
+       dtostrf(fvalue, 2, 1, buffer);
+       return lcd_put_string(global_font_select, global_font_style, buffer);
+  }
+#endif
diff --git a/pt100/lcdlib/font.h b/pt100/lcdlib/font.h
new file mode 100644 (file)
index 0000000..d3bf3ff
--- /dev/null
@@ -0,0 +1,200 @@
+#ifndef FONT_H_INCLUDED
+#define FONT_H_INCLUDED
+
+#include <avr/io.h>
+#include <avr/pgmspace.h>
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+
+//Include your LCD graphics library here
+#include "lcd-color-graphic.h"
+//declare font info structure defined below
+struct font_info;
+typedef const struct font_info * FONT_P;
+
+/*****************************************************************************
+ * BEGIN CONFIG BLOCK
+ *****************************************************************************/
+
+//Select which of the available features will be included
+//If a font is not needed, then you don't need to put it to the Flash 
+//Just comment one of the defines below
+
+#define FONTS_INCLUDE_font_proportional_16px    font_proportional_16px
+#define FONTS_INCLUDE_font_proportional_8px     font_proportional_8px   
+#define FONTS_INCLUDE_font_fixed_8px            font_fixed_8px
+#define FONTS_INCLUDE_font_fixed_16px           font_fixed_16px
+#define FONTS_INCLUDE_symbols_8px               symbols_8px
+#define FONTS_INCLUDE_symbols_16px              symbols_16px
+#define FONTS_INCLUDE_digits_24px               digits_24px
+#define FONTS_INCLUDE_digits_32px               digits_32px
+
+//Set to 1 to include functions for direct output of integer & float values
+#define INCLUDE_FLOAT_OUTPUT     0
+#define INCLUDE_INTEGER_OUTPUT   1
+
+
+/*****************************************************************************
+ * All font structures + verbose name defines
+ *****************************************************************************/
+#ifdef FONTS_INCLUDE_font_fixed_8px
+  extern const struct font_info font_fixed_8px PROGMEM ;
+  #define FONT_FIXED_8 &font_fixed_8px
+#endif
+
+#ifdef FONTS_INCLUDE_font_fixed_16px
+  extern const struct font_info font_fixed_16px PROGMEM ;
+  #define FONT_FIXED_16 &font_fixed_16px
+#endif
+
+#ifdef FONTS_INCLUDE_font_proportional_16px
+  extern const struct font_info font_proportional_16px PROGMEM ;
+  #define FONT_PROP_16 &font_proportional_16px
+#endif
+
+#ifdef FONTS_INCLUDE_font_proportional_8px
+  extern const struct font_info font_proportional_8px PROGMEM;
+  #define FONT_PROP_8 &font_proportional_8px
+#endif
+
+#ifdef FONTS_INCLUDE_symbols_8px
+  extern const struct font_info symbols_8px PROGMEM;
+  #define FONT_SYMBOL_8 &symbols_8px
+#endif
+
+#ifdef FONTS_INCLUDE_symbols_16px
+  extern const struct font_info symbols_16px PROGMEM;
+  #define FONT_SYMBOL_16 &symbols_16px
+#endif
+
+#ifdef FONTS_INCLUDE_digits_24px
+  extern const struct font_info digits_24px PROGMEM;
+  #define FONT_DIGITS_24 &digits_24px
+#endif
+
+#ifdef FONTS_INCLUDE_digits_32px
+  extern const struct font_info digits_32px PROGMEM;
+  #define FONT_DIGITS_32 &digits_32px
+#endif
+
+//Assign real functions, provided by the LCD library to these macros 
+//used within the font generator
+
+#define LCD_MOVE(x,y)      lcd_move_xy((x),(y))     //relative cursor movement
+#define LCD_MOVE_TO(x,y)   lcd_moveto_xy((x),(y))   //absolute cursor movement
+#define LCD_WRITE(x)       lcd_data((x))            //write data to display
+
+//Functions to read the current position as provided by the LCD library
+#define LCD_CURRENT_COL()   lcd_get_position_column()
+#define LCD_CURRENT_PAGE()  lcd_get_position_page()
+
+
+/******************************************************************************
+ * END CONFIG BLOCK
+ *****************************************************************************/
+
+
+
+
+/******************************************************************************
+ * Internal Functions to locate and display characters
+ *****************************************************************************/
+/*
+PGM_P   font_data              (FONT_P font);
+PGM_P   font_widthtable        (FONT_P font);
+uint8_t font_get_height_bytes  (FONT_P font);
+uint8_t font_get_type          (FONT_P font);
+uint8_t font_get_char_width    (FONT_P font, char character);
+int16_t font_get_char_number   (FONT_P font, char character);
+PGM_P   font_get_char_position (FONT_P font, char character);
+*/
+
+
+/******************************************************************************
+ * Functions to display characters and strings
+ *****************************************************************************/
+//where font is a pointer to a FONT_P struct,
+//style is one or more of the defines for different font sizes & styles shown below
+//and str and c are the string or the character to be displayed
+
+uint16_t lcd_put_string       (FONT_P font, uint8_t style, char* str);
+uint16_t lcd_put_string_length(FONT_P font, uint8_t style, char* str,      uint8_t length);
+uint16_t lcd_put_string_P     (FONT_P font, uint8_t style, PGM_P str);
+uint8_t  lcd_put_char         (FONT_P font, uint8_t style, char c);
+uint16_t lcd_put_string_xy_P  (FONT_P font, uint8_t style, PGM_P str,      uint8_t page, uint8_t col);
+uint8_t  lcd_put_char_xy      (FONT_P font, uint8_t style, char character, uint8_t page, uint8_t col);
+
+void     lcd_set_font         (FONT_P font, uint8_t style);
+uint8_t  lcd_putc             (char c);
+uint8_t  lcd_putc_xy          (char c, uint8_t page, uint8_t col);
+uint16_t lcd_putstr           (char* str);
+uint16_t lcd_putstr_P         (PGM_P str);
+uint16_t lcd_putstr_xy_P      (PGM_P  str, uint8_t page, uint8_t col);
+
+#if INCLUDE_INTEGER_OUTPUT == 1
+uint16_t lcd_put_long (int32_t integer);
+uint16_t lcd_put_int  (int16_t integer);
+uint16_t lcd_put_uint (uint16_t integer);
+uint16_t lcd_put_short(int8_t  integer);
+#endif
+#if INCLUDE_FLOAT_OUTPUT == 1
+uint16_t lcd_put_float (float integer);
+#endif
+
+
+
+/******************************************************************************
+ * Define font styles
+ * These names are used as the style attribute to above put* functions
+ *****************************************************************************/
+
+#define NORMAL        0
+#define NORMAL_SIZE   0
+#define DOUBLE_HEIGHT 1    //double the height of each character 
+#define DOUBLE_WIDTH  2    //double the width of each character 
+#define DOUBLE_SIZE   3    //double height and double width
+#define INVERT        4    //draw white letters with black background
+#define WRAP          8    //wrap around text that does not fit in the current line
+#define UNDERLINE    16    //underline the text
+#define SPACING      32    //increase spacing between character
+
+
+//used for internal functions:
+#define DOUBLE_HEIGHT_BIT 1
+#define DOUBLE_WIDTH_BIT  2
+#define INVERT_BIT        4
+#define WRAP_BIT          8
+#define UNDERLINE_BIT    16
+
+/******************************************************************************
+ * Documentation: Example Font File
+ * A c-template to use with Hagen Reddmanns font generator is 
+ * included (template_simplefont.c)
+ *****************************************************************************/
+/*
+#include "font.h"
+#ifdef %FONT INCLUDE IDENTIFIER%
+const char fontname_length[] PROGMEM = {...}
+const char fontname_data[] PROGMEM = {...}   
+const struct font_info fontname PROGMEM = {...};
+#endif
+*/
+
+
+/******************************************************************************
+ * Structure holds information about fonts 
+ *****************************************************************************/
+struct font_info {
+    uint16_t size;       //size of data array
+    uint8_t  width;      //(maximum) width of character
+    uint8_t  height;     //height of character
+    uint8_t  firstchar;  //the number of the first included character (often 0x20)
+    uint8_t  lastchar;   //the last included character (often 0xFF)
+    PGM_VOID_P    widthtable; //Pointer to the table holding character widths (NULL for monospaced fonts)
+    PGM_VOID_P    data;       //Pointer to data arrray
+    };
+
+
+
+#endif
diff --git a/pt100/lcdlib/lcd-color-graphic.c b/pt100/lcdlib/lcd-color-graphic.c
new file mode 100644 (file)
index 0000000..8403f96
--- /dev/null
@@ -0,0 +1,223 @@
+/******************************************************************************
+ * Display Library
+ * for an LCD with ILI9341 driver in 16 Bit color mode using 4-wire SPI
+ * New features in v0.01
+ *   - well... everything.
+ *****************************************************************************/
+
+#include "lcd-color-graphic.h"
+
+
+/******************************************************************************
+  * Global variables for color handling
+  * Foreground is the normal drawing color
+  * Background is used as background, e.g. when writing fonts.
+  */
+
+color_t foreground = {.red=0x1F, .green=0x3F, .blue=0x1F};
+color_t background = {.red=0,    .green=0,    .blue=0};
+
+
+/******************************************************************************
+  * Initializes the display
+  */
+void lcd_init() {
+  LCD_SET_PIN_DIRECTIONS();  //set outputs
+  _delay_ms(1);
+  LCD_INIT_SPI();            //Initialize SPI Interface  
+  _delay_ms(50);
+  LCD_RESET_ON();            //Apply Reset to the Display Controller  
+  _delay_ms(100); 
+  LCD_RESET_OFF();  
+  _delay_ms(100);
+  LCD_SELECT();               //Switches chip select on
+  lcd_command(LCD_SLEEP_OUT); //Wake up LCD
+  _delay_ms(70);
+  return;
+  }
+
+  
+/******************************************************************************
+  * Sends a command to the display
+  */
+inline void lcd_command(uint8_t c) {
+  spi_wait_for_idle();
+  LCD_CMD();
+  spi_write(c);
+  }
+
+/******************************************************************************
+  * Sends a command with one argument
+  */
+inline void lcd_command_1(uint8_t c, uint8_t data) {
+  lcd_command(c);
+  lcd_data(data);
+}  
+  
+/******************************************************************************
+  * Sends a data word to the display
+  */
+inline void lcd_data(uint8_t c) {
+  spi_wait_for_idle();
+  LCD_DATA();
+  spi_write(c);
+}  
+
+
+
+/******************************************************************************
+  * Stores the main drawing color for later use
+  */
+inline void lcd_set_foreground(uint8_t r, uint8_t g, uint8_t b) {
+  foreground.red = r;
+  foreground.green = g;
+  foreground.blue = b;
+  }
+
+
+/******************************************************************************
+  * Stores the background color for later use
+  */
+inline void lcd_set_background(uint8_t r, uint8_t g, uint8_t b) {
+  background.red = r;
+  background.green = g;
+  background.blue = b;
+  }
+
+
+/******************************************************************************
+  * Sets the column range used for the next write operation
+  */
+inline void lcd_set_column(uint16_t start, uint16_t end) {
+  lcd_command(LCD_SET_COLUMN);
+  lcd_data(start >> 8);
+  lcd_data(start);
+  lcd_data(end >> 8);
+  lcd_data(end);
+  }
+
+/******************************************************************************
+  * Sets the page range used for the next write operation
+  */
+inline void lcd_set_page(uint16_t start, uint16_t end) {
+  lcd_command(LCD_SET_PAGE);
+  lcd_data(start >> 8);
+  lcd_data(start);
+  lcd_data(end >> 8);
+  lcd_data(end);
+  }
+
+/******************************************************************************
+  * Writes a pixel to the display using 16 Bit color mode
+  */
+inline void lcd_send_pixel(color_t c) {
+  lcd_data((c.red<<3) | (c.green>>3));
+  lcd_data((c.green<<5) | c.blue);
+  }  
+  
+/******************************************************************************
+  * Sets a pixel at a given position
+  */
+inline void lcd_set_pixel_xy(uint16_t column, uint16_t page) {
+  lcd_set_page(page,page);
+  lcd_set_column(column,column);
+  lcd_command(LCD_WRITE_MEM);
+  lcd_send_pixel(foreground);
+  }    
+
+
+/******************************************************************************
+ * This function sets an area of the screen to a given color
+ * col0          - left edge of the area
+ * col1          - right edge of the area
+ * page0         - top edge of the area
+ * page1         - bottom edge of the area
+ * r,g,b         - the color to be used
+ */
+void lcd_set_area_xy(uint16_t col0, uint16_t col1, uint16_t page0, uint16_t page1) {
+  lcd_set_column(col0,col1);
+  lcd_set_page(page0,page1);
+  lcd_command(LCD_WRITE_MEM);
+  for(uint16_t y = page0; y <= page1; y++)
+    for(uint16_t x = col0; x <= col1; x++) {
+      lcd_send_pixel(background);
+      }
+  }
+  
+  
+  
+//=============================================================================
+//Compatibility functions to accept output of font generator
+// Pages are counted in units of 8 pixels!
+//=============================================================================
+
+uint16_t lcd_current_page = 0;
+uint16_t lcd_current_column = 0;
+
+
+/******************************************************************************
+ * Changes the internal cursor by s pages
+ * s             - number of pages to move
+ */ 
+uint16_t lcd_inc_page(int16_t s) {
+  uint16_t p = lcd_current_page;
+  p += s;
+  if (p > LCD_HEIGHT/8)
+    p = 0;
+  lcd_current_page = p;
+  
+  return p;
+  }
+
+/******************************************************************************
+ * Changes the internal cursor by s columns, including wrapping (if selected)
+ * s             - number of columns to move
+ */ 
+uint16_t lcd_inc_column(int16_t s) {
+  uint16_t c = lcd_current_column;
+  c += s;
+  if (c > LCD_WIDTH) 
+    c = 0;
+  lcd_current_column = c;
+  return c;
+  }
+  
+  
+/******************************************************************************
+ * Moves the cursor to the given position
+ * pages         - page to move to
+ * columns       - column to move to
+ */ 
+void lcd_moveto_xy(uint16_t page, uint16_t column) {
+  lcd_current_column = column; 
+  lcd_current_page = page;
+  }
+
+/******************************************************************************
+ * Moves the cursor relative to the current position
+ * pages         - number of pages to move
+ * columns       - number of columns to move
+ */  
+void lcd_move_xy(int16_t pages, int16_t columns) {
+  lcd_moveto_xy(lcd_inc_page(pages),lcd_inc_column(columns));
+  }
+
+
+/******************************************************************************
+ * Takes a vertical byte from the font generator and prints it on the display
+ * b             - Bit pattern to display
+ */ 
+void lcd_write_font_byte(uint8_t b) {
+  lcd_set_page(8*lcd_current_page,8*lcd_current_page+8);
+  lcd_set_column(lcd_current_column,lcd_current_column);
+  lcd_command(LCD_WRITE_MEM);
+  for(uint8_t i=0;i<8;i++) {
+    if(b&1)
+      lcd_send_pixel(foreground);
+    else
+      lcd_send_pixel(background);
+    b = b>>1;
+    }
+  lcd_inc_column(1);
+  }
+  
\ No newline at end of file
diff --git a/pt100/lcdlib/lcd-color-graphic.h b/pt100/lcdlib/lcd-color-graphic.h
new file mode 100644 (file)
index 0000000..ee21b7f
--- /dev/null
@@ -0,0 +1,184 @@
+#ifndef LCD_H_INCLUDED
+#define LCD_H_INCLUDED
+
+#include <avr/io.h>
+#include <inttypes.h>
+#include <string.h>
+#include <util/delay.h>
+#include <avr/pgmspace.h>
+
+
+/*****************************************************************************
+ * BEGIN CONFIG BLOCK
+ *****************************************************************************/
+#define LCD_WIDTH   240
+#define LCD_HEIGHT  320
+
+//Should chip select (CS) be used?
+#define LCD_USE_CHIPSELECT  1
+
+//CD Port
+#define PORT_DC  PORTB
+#define DDR_DC   DDRB
+#define PIN_DC   3
+
+//Reset Port
+#define PORT_RST PORTD
+#define DDR_RST  DDRD
+#define PIN_RST  2
+
+//Chip select
+#if LCD_USE_CHIPSELECT == 1
+  #define PORT_CS  PORTD
+  #define DDR_CS   DDRD
+  #define PIN_CS   5
+#endif
+
+//SPI routines
+//Define a function that initializes the SPI interface, see below for an example
+extern void init_spi_lcd(void);
+#define LCD_INIT_SPI() init_spi_lcd()
+
+//Define a function that waits until SPI interface is idle
+#define spi_wait_for_idle() while(! (UCSR1A & _BV(UDRE1)));
+
+//Define how to write to SPI data register
+#define spi_write(i) UDR1 = i
+
+/*Example SPI setup (Atmega162)
+ *init spi: msb first, update on falling edge , read on rising edge, 9 MHz
+ *void init_spi_lcd() {
+ *  SPCR = 0 << SPIE | 1 << SPE | 0 << DORD | 1 << MSTR | 1 << CPOL | 1 << CPHA | 0 << SPR1 | 0 << SPR0;
+ *  SPSR = 1 << SPI2X;
+ *  SPDR = LCD_NO_OP; //Do not use 0 here, only LCD_NOP is allowed!
+ *  }
+ */
+/*****************************************************************************
+ * END CONFIG BLOCK
+ *****************************************************************************/
+
+//In case of an color LCD, this struct will keep the necessary information
+//Color struct - no bit fields are used for better performance (i.e. bit shifts
+//can be done while waiting for SPI, not while preparing to write the pixel)
+typedef struct {
+    uint8_t red;
+    uint8_t green;
+    uint8_t blue;
+    } color_t;
+
+
+/*****************************************************************************
+ * Public Functions
+ *****************************************************************************/
+//initializes the display in standard settings
+ void lcd_init(void);
+
+//write data word or command to the LCD
+ void lcd_data      (uint8_t data);
+ void lcd_command   (uint8_t cmd);
+ void lcd_command_1 (uint8_t cmd, uint8_t data);
+
+//Set the drawing and background colors
+ void lcd_set_foreground(uint8_t r, uint8_t g, uint8_t b);
+ void lcd_set_background(uint8_t r, uint8_t g, uint8_t b);
+  
+//set display area for next write accesses
+ void lcd_set_page(uint16_t start, uint16_t end);
+ void lcd_set_column(uint16_t start, uint16_t end);
+
+//write pixel data in 16 bit color mode. Display must be in write mode
+ void lcd_send_pixel(color_t c);
+
+//Set a pixel at a given location to the foreground color
+ void lcd_set_pixel_xy(uint16_t column, uint16_t page); 
+//Set an area to the background color
+ void lcd_set_area_xy(uint16_t col0, uint16_t col1, uint16_t page0, uint16_t page1);
+
+//Text functions are included in font.c / font.h
+//These functions provide compatibility to the old font generator
+ uint16_t lcd_inc_page(int16_t s);
+ uint16_t lcd_inc_column(int16_t s);
+ void lcd_moveto_xy(uint16_t page, uint16_t column);
+ void lcd_move_xy(int16_t pages, int16_t columns);
+//Function to read the current position
+ extern uint16_t lcd_current_page;
+ extern uint16_t lcd_current_column;
+ static inline uint16_t lcd_get_position_page(void)   {return lcd_current_page;}
+ static inline uint16_t lcd_get_position_column(void) {return lcd_current_column;}
+ void lcd_write_font_byte(uint8_t b);
+
+
+/*****************************************************************************
+ * Command Codes
+ *****************************************************************************/
+  #define LCD_NOP               0x00
+  #define LCD_SOFT_RESET        0x01
+  #define LCD_SLEEP_ENTER       0x10
+  #define LCD_SLEEP_OUT         0x11
+  #define LCD_OFF               0x28
+  #define LCD_ON                0x29
+  #define LCD_SET_COLUMN        0x2A
+  #define LCD_SET_PAGE          0x2B
+  #define LCD_WRITE_MEM         0x2C
+  #define LCD_MIRROR            0x36
+  #define LCD_IDLE_MODE_OFF     0x38
+  #define LCD_IDLE_MODE_ON      0x39
+  #define LCD_COLOR_MODE        0x3A
+  #define LCD_WRITE_CONTINUE    0x3C  
+
+/*****************************************************************************
+ * Commands  Arguments
+ *****************************************************************************/
+  #define LCD_16BIT             0x55
+  #define LCD_18BIT             0x66
+
+//Settings for LCD_MIRROR (0x36)
+  #define LCD_MIRROR_Y          0x80
+  #define LCD_MIRROR_X          0x40
+  #define LCD_FLIP_XY           0x20
+  #define LCD_BGR               0x08
+
+
+
+/*****************************************************************************
+ * Output pin controlling makros
+ *****************************************************************************/
+
+//Control A0 input of LCD
+#define LCD_DATA()            PORT_DC |= _BV(PIN_DC)
+#define LCD_CMD()             PORT_DC &= ~_BV(PIN_DC)
+#define LCD_SET_OUTPUT_DC()   DDR_DC  |= _BV(PIN_DC)
+
+//Control reset input of LCD
+#define LCD_RESET_OFF()       PORT_RST |= _BV(PIN_RST)
+#define LCD_RESET_ON()        PORT_RST &= ~_BV(PIN_RST)
+#define LCD_SET_OUTPUT_RST()  DDR_RST |= _BV(PIN_RST)
+
+
+//Control pin for chip select
+#if LCD_USE_CHIPSELECT == 1
+  #define LCD_SET_OUTPUT_CS()  DDR_CS  |= _BV(PIN_CS)
+  #define LCD_SELECT()         PORT_CS &= ~_BV(PIN_CS)
+  #define LCD_UNSELECT()       spi_wait_for_idle(); PORT_CS |= _BV(PIN_CS)
+#else
+  #define LCD_SET_OUTPUT_CS()  
+  #define LCD_SELECT()         spi_wait_for_idle();
+  #define LCD_UNSELECT()   
+#endif
+
+//combined direction selection for all pins
+#define LCD_SET_PIN_DIRECTIONS()   LCD_SET_OUTPUT_DC(); \
+                                   LCD_SET_OUTPUT_RST(); \
+                                   LCD_SET_OUTPUT_CS()
+
+
+
+
+
+#endif
+
diff --git a/pt100/main.c b/pt100/main.c
new file mode 100644 (file)
index 0000000..6079184
--- /dev/null
@@ -0,0 +1,20 @@
+#define F_CPU 8000000UL
+
+#include <avr/interrupt.h>
+#include <util/delay.h>
+#include <avr/io.h>
+#include <avr/eeprom.h>
+#include <string.h>
+
+#define FIRMWARE_VERSION 0x01
+
+
+void init(void) {
+}
+
+
+void main(void) {
+ init();
+
+ while(1);
+}
\ No newline at end of file
diff --git a/pt100/main.h b/pt100/main.h
new file mode 100644 (file)
index 0000000..e69de29