]> jspc29.x-matter.uni-frankfurt.de Git - avr.git/commitdiff
add step motor controller files and docu master
authorJan Michel <michel@physik.uni-frankfurt.de>
Fri, 17 Apr 2026 15:55:41 +0000 (17:55 +0200)
committerJan Michel <michel@physik.uni-frankfurt.de>
Fri, 17 Apr 2026 15:55:41 +0000 (17:55 +0200)
atmega32u4/stepmotorcontroller/Keyboard.odt [new file with mode: 0644]
atmega32u4/stepmotorcontroller/Makefile
atmega32u4/stepmotorcontroller/lcdlib/Fonts/digits_32px.c
atmega32u4/stepmotorcontroller/lcdlib/Fonts/font_fixed_16px.c [moved from atmega32u4/stepmotorcontroller/lcdlib/Fonts/font_fixed_16bit.c with 100% similarity]
atmega32u4/stepmotorcontroller/lcdlib/font.c
atmega32u4/stepmotorcontroller/lcdlib/font.h
atmega32u4/stepmotorcontroller/lcdlib/lcd-color-graphic.c
atmega32u4/stepmotorcontroller/lcdlib/lcd-color-graphic.h
atmega32u4/stepmotorcontroller/main.c
atmega32u4/stepmotorcontroller/usb_serial.c

diff --git a/atmega32u4/stepmotorcontroller/Keyboard.odt b/atmega32u4/stepmotorcontroller/Keyboard.odt
new file mode 100644 (file)
index 0000000..f9c6d5c
Binary files /dev/null and b/atmega32u4/stepmotorcontroller/Keyboard.odt differ
index 8ee15d8e478792db3690c7530b435e6ecf90b497..88b803436b506d2d620d167c3524c330d5461576 100644 (file)
@@ -8,7 +8,8 @@
 MCU = atmega32u4
 FORMAT = ihex
 TARGET = main
-SRC = $(TARGET).c usb_serial.c 
+SRC = $(TARGET).c usb_serial.c lcdlib/lcd-color-graphic.c lcdlib/font.c \
+      lcdlib/Fonts/digits_24px.c lcdlib/Fonts/digits_32px.c lcdlib/Fonts/font_proportional_16px.c lcdlib/Fonts/font_fixed_16px.c lcdlib/Fonts/font_proportional_8px.c lcdlib/Fonts/symbols_16px.c
 ASRC = 
 OPT = 2
 PORT=/dev/ttyACM0
@@ -37,7 +38,7 @@ CINCS =
 
 CDEBUG = -g$(DEBUG)
 CWARN = -Wall -Wstrict-prototypes 
-CTUNING = -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -Wl,--relax
+CTUNING = -fcommon -funsigned-char -funsigned-bitfields -fpack-struct -fshort-enums  -Wl,--relax
 #CEXTRA = -Wa,-adhlns=$(<:.c=.lst)
 CFLAGS = $(CDEBUG) $(CDEFS) $(CINCS) -O$(OPT) $(CWARN) $(CSTANDARD) $(CEXTRA) $(CTUNING) -DSTR_SERIAL_NUMBER=L\"$(NUMBER)\"
 
index b7a3d1be606eed5efa979f8d546b4e15677279cd..211fdf6b8760067fcfea383c19606f6924bf967e 100644 (file)
@@ -18,9 +18,9 @@
 
 
 const uint8_t digits_32px_data[] PROGMEM = {
-    0x1B, 0x00, 0x1B, 0x08, 0x00, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x1A, 0x09, 
+    0x1A, 0x00, 0x1A, 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, 0x00, 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, 
@@ -33,79 +33,79 @@ const uint8_t digits_32px_data[] PROGMEM = {
     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, 
+    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, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xFC, 
+    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, 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, 
+    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, 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, 
+    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, 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, 
+    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, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
+    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};
+const struct font_info digits_32px PROGMEM = {1340,0x1B,0x20,0x2B,0x3A,digits_32px_data,(uint8_t*)digits_32px_data+0x3A-0x2B+1};
 
 #endif
 
index 78f6f720e09f600c48ccf76af3185d5d1a4ef7da..fc899e61e684ab3afe227b4f57533eedb26ad768 100644 (file)
@@ -396,3 +396,21 @@ uint16_t lcd_put_float  (float fvalue) {
        return lcd_put_string(global_font_select, global_font_style, buffer);
   }
 #endif
+
+
+
+uint16_t lcd_put_long_align32_7  (int32_t integer) {
+  char buffer[10];
+  ltoa(integer, buffer, 10);
+
+  uint8_t j = 0;
+  while(buffer[j] != 0) j++;
+  if (j > 7) j = 7;
+  
+  uint16_t y = lcd_get_position_page();
+  uint16_t x = lcd_get_position_column();
+  lcd_set_area_xy(x,x+(7-j)*29-1,y,y+32);
+  LCD_MOVE_TO(y,x+(7-j)*29);
+  
+  return lcd_put_string(global_font_select, global_font_style, buffer);
+  }
index cc83932817ec998c6fbd30cac3d3816a8edb060b..3accd91d5c3f097af07487732d4f31991730e19d 100644 (file)
@@ -137,6 +137,7 @@ 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);
+uint16_t lcd_put_long_align32_7 (int32_t integer);
 #endif
 #if INCLUDE_FLOAT_OUTPUT == 1
 uint16_t lcd_put_float (float integer);
index a3b1c52d6ee447230a080f77f32f84d505ea5056..9538b25ff81554a9f02591c8ee03347efaa5a2e3 100644 (file)
@@ -283,4 +283,4 @@ void lcd_draw_line(uint16_t x0, uint16_t x1, uint16_t y0, uint16_t y1) {
     }  
   }
 
-  
\ No newline at end of file
+  
index 3c7e64fe6c0daef802b8294b216eb7372a1f688e..362a1ef66592b2ced63e8adf45a3019931141228 100644 (file)
@@ -25,7 +25,7 @@
 //Reset Port
 #define PORT_RST PORTB
 #define DDR_RST  DDRB
-#define PIN_RST  4
+#define PIN_RST  3
 
 //Chip select
 #if LCD_USE_CHIPSELECT == 1
@@ -36,8 +36,8 @@
 
 //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()
+extern void init_spi_lcd(void);
+#define LCD_INIT_SPI()  init_spi_lcd()
 //init_spi_lcd()
 
 //Define a function that waits until SPI interface is idle
index 3acdf68ec2f0caa29f0d3d0bfd78129405fba222..1327f0b3fdc34adbae76da558b47e6adba9db108 100644 (file)
@@ -15,25 +15,25 @@ void getdata(uint8_t buf);
 
 #define FIRMWARE_VERSION 0x001
 
-#define KP_C1_ON()   PORTD |=  (1 << PD7)
-#define KP_C1_OFF()  PORTD &= ~(1 << PD7)
-#define KP_C2_ON()   PORTC |=  (1 << PC6)
-#define KP_C2_OFF()  PORTC &= ~(1 << PC6)
-#define KP_C3_ON()   PORTC |=  (1 << PC7)
-#define KP_C3_OFF()  PORTC &= ~(1 << PC7)
-#define KP_C4_ON()   PORTE |=  (1 << PE2)
-#define KP_C4_OFF()  PORTE &= ~(1 << PE2)
-
-#define KP_R1() ((PIND & (1<<PD3))?1:0)
-#define KP_R2() ((PIND & (1<<PD5))?1:0)
-#define KP_R3() ((PIND & (1<<PD6))?1:0)
-#define KP_R4() ((PIND & (1<<PD4))?1:0)
-
-#define ENABLE_M2()  PORTF |=  (1 << PF0)
-#define DISABLE_M2() PORTF &= ~(1 << PF0)
-
-#define ENABLE_M1()  PORTF |=  (1 << PF7)
-#define DISABLE_M1() PORTF &= ~(1 << PF7)
+#define KP_C1_OFF()   PORTD |=  (1 << PD7)
+#define KP_C1_ON()  PORTD &= ~(1 << PD7)
+#define KP_C2_OFF()   PORTC |=  (1 << PC6)
+#define KP_C2_ON()  PORTC &= ~(1 << PC6)
+#define KP_C3_OFF()   PORTC |=  (1 << PC7)
+#define KP_C3_ON()  PORTC &= ~(1 << PC7)
+#define KP_C4_OFF()   PORTE |=  (1 << PE2)
+#define KP_C4_ON()  PORTE &= ~(1 << PE2)
+
+#define KP_R1() ((PIND & (1<<PD3))?0:1)
+#define KP_R2() ((PIND & (1<<PD5))?0:1)
+#define KP_R3() ((PIND & (1<<PD6))?0:1)
+#define KP_R4() ((PIND & (1<<PD4))?0:1)
+
+#define DISABLE_M2()  PORTF |=  (1 << PF0)
+#define ENABLE_M2()   PORTF &= ~(1 << PF0)
+
+#define DISABLE_M1()  PORTF |=  (1 << PF7)
+#define ENABLE_M1()   PORTF &= ~(1 << PF7)
 
 #define PULSE_HIGH_M2()  PORTF |=  (1 << PF4)
 #define PULSE_LOW_M2()   PORTF &= ~(1 << PF4)
@@ -44,18 +44,15 @@ void getdata(uint8_t buf);
 #define DIRECTION_FORWARD_M2()   PORTF |=  (1 << PF1)
 #define DIRECTION_BACKWARD_M2()  PORTF &= ~(1 << PF1)
 
-#define DIRECTION_FORWARD_M1()   PORTF |=  (1 << PF6)
-#define DIRECTION_BACKWARD_M1()  PORTF &= ~(1 << PF6)
+#define DIRECTION_BACKWARD_M1()   PORTF |=  (1 << PF6)
+#define DIRECTION_FORWARD_M1()  PORTF &= ~(1 << PF6)
 
-
-volatile int32_t  M1_STEPS = 0;
-volatile int32_t  M2_STEPS = 0;
-
-volatile uint8_t  M1_ACTIVE = 0;
-volatile uint8_t  M2_ACTIVE = 0;
-
-volatile uint8_t  M1_ENABLE = 0;
-volatile uint8_t  M2_ENABLE = 0;
+uint8_t motor_active = 0;
+volatile uint32_t  M1_STEPS = 0;
+volatile uint32_t  M2_STEPS = 0;
+volatile uint8_t  halfstep = 0;
+volatile uint8_t  M1_DIR = 0;
+volatile uint8_t  M2_DIR = 0;
 
 volatile uint8_t  M1_SWITCH_LOW = 0;
 volatile uint8_t  M2_SWITCH_LOW = 0;
@@ -63,14 +60,33 @@ volatile uint8_t  M1_SWITCH_HIGH = 0;
 volatile uint8_t  M2_SWITCH_HIGH = 0;
 volatile uint8_t  switch_changed = 0;
 
+volatile int32_t M1_position = 100000;
+volatile int32_t M2_position = 100000;
+uint32_t stepsize = 32;
+int32_t  inputbuffer = 0;
+uint32_t last_inputbuffer = 1;
+uint8_t  negativeinput = 0;
 
 uint16_t time;
 uint8_t rxcnt = 0, txpoint = 0;
 uint8_t rxbuf[15];
 uint8_t txbuf[15];
-color_t colors[6];
+color_t colors[16];
 color_t topback;
-uint8_t keypad[16] = {0};
+volatile uint8_t keypad[16] = {0};
+volatile uint16_t keystate = 0;
+uint8_t numlock = 0;
+uint8_t speed = 4;
+
+uint8_t speeds[8] = {128,64,48,32,16,8,4,2};
+  //0  128 0.25k
+  //1  64 0.5k
+  //2  48 0.66k
+  //3  32 1k
+  //4  16 1.95k
+  //5  8 3.9k
+  //6  4  7.8k
+  //7  2  15.6k
 
 /*****************************************************************
  * Command Handling
@@ -121,65 +137,139 @@ void send_answer_hex(uint8_t *rxbuf, uint32_t v) {
   txbuf[10] =nib_to_hex(v, 0);
   txbuf[11] = '\n';
   txbuf[12] = 0;
-  send_answer_buf(txbuf,12);
+  usb_serial_write(txbuf, 12);
+  usb_serial_flush_output();  
+  // send_answer_buf(txbuf);
   }
 
-
+//R0100000000
  /*****************************************************************
  * Setting functions
  *****************************************************************/
 
 
-
+// uint16_t keystate_old = 0;
+uint8_t keyupdate = 0;
  /*****************************************************************
  * Interrupts
  *****************************************************************/
-ISR(TIMER0_OVF_vect) {
+ISR(TIMER0_COMPA_vect) {
   // interupt for time, watchdog, keypad
   time++;
-
+  asm volatile("wdr");
+  
   KP_C1_ON(); asm volatile("nop");
-  uint8_t t = 0;
-  keypad[0] += KP_R1();
-  keypad[1] += KP_R2();
-  keypad[2] += KP_R3();
-  keypad[3] += KP_R4();
-  KP_C1_OFF(); asm volatile("nop");
+  uint16_t tmp_keystate = 0;
+  if ( KP_R1()) tmp_keystate |= (1 << 0);
+  if ( KP_R2()) tmp_keystate |= (1 << 1);
+  if ( KP_R3()) tmp_keystate |= (1 << 2);
+  if ( KP_R4()) tmp_keystate |= (1 << 3);
+  
+  KP_C1_OFF();
   KP_C2_ON(); asm volatile("nop");
-  uint8_t t = 0;
-  keypad[4] += KP_R1();
-  keypad[5] += KP_R2();
-  keypad[6] += KP_R3();
-  keypad[7] += KP_R4();
-  KP_C2_OFF(); asm volatile("nop");
+  if ( KP_R1()) tmp_keystate |= (1 << 4);
+  if ( KP_R2()) tmp_keystate |= (1 << 5);
+  if ( KP_R3()) tmp_keystate |= (1 << 6);
+  if ( KP_R4()) tmp_keystate |= (1 << 7);
+  KP_C2_OFF();
   KP_C3_ON(); asm volatile("nop");
-  uint8_t t = 0;
-  keypad[8] += KP_R1();
-  keypad[9] += KP_R2();
-  keypad[10] += KP_R3();
-  keypad[11] += KP_R4();
-  KP_C3_OFF(); asm volatile("nop");
+  if ( KP_R1()) tmp_keystate |= (1 << 8);
+  if ( KP_R2()) tmp_keystate |= (1 << 9);
+  if ( KP_R3()) tmp_keystate |= (1 << 10);
+  if ( KP_R4()) tmp_keystate |= (1 << 11);
+  KP_C3_OFF();
   KP_C4_ON(); asm volatile("nop");
-  uint8_t t = 0;
-  keypad[12] += KP_R1();
-  keypad[13] += KP_R2();
-  keypad[14] += KP_R3();
-  keypad[15] += KP_R4();
-  KP_C4_OFF(); asm volatile("nop");
+  if ( KP_R1()) tmp_keystate |= (1 << 12);
+  if ( KP_R2()) tmp_keystate |= (1 << 13);
+  if ( KP_R3()) tmp_keystate |= (1 << 14);
+  if ( KP_R4()) tmp_keystate |= (1 << 15);
+  KP_C4_OFF();
+  
+  // keystate_old = keystate;
+  keystate = tmp_keystate;
+  keyupdate = 1;
+  uint8_t j = 0;
+  for(uint16_t i = 1; i != 0 ; i <<= 1) {
+    if(tmp_keystate & i) {
+      if (keypad[j] < 200)
+        keypad[j]++;
+    }
+    else if (keypad[j] == 255) {
+        keypad[j] = 0;
+    }
+    j++;
+  }
 
-  asm volatile("wdr");
 }
 
 
+ISR(TIMER1_COMPA_vect) {
+  
+  // if (M1_STEPS > 0) {
+    if (halfstep) {
+      if (M1_DIR) {
+        // DIRECTION_FORWARD_M1();
+        if (M1_SWITCH_HIGH)
+          M1_STEPS = 0;
+      }
+      else {
+        // DIRECTION_BACKWARD_M1();
+        if (M1_SWITCH_LOW)
+          M1_STEPS = 0;
+      }
+      // if (!motor_active) M1_STEPS = 0;
+      if (M1_STEPS > 0) {
+        M1_STEPS--;
+        M1_position += 2*M1_DIR-1;
+        PULSE_HIGH_M1();
+      }
+    }
+    else {
+      PULSE_LOW_M1();      
+    }
+  // }
+
+  // if (M2_STEPS > 0) {
+    if (halfstep) {
+      if (M2_DIR) {
+        // DIRECTION_FORWARD_M2();
+        if (M2_SWITCH_HIGH)
+          M2_STEPS = 0;
+      }
+      else {
+        // DIRECTION_BACKWARD_M2();
+        if (M2_SWITCH_LOW)
+          M2_STEPS = 0;
+      }
+      // if (!motor_active) M2_STEPS = 0;
+      if (M2_STEPS > 0) {
+        M2_STEPS--;
+        M2_position += 2*M2_DIR-1;
+        PULSE_HIGH_M2();
+      }
+    }
+    else {
+      PULSE_LOW_M2();      
+    }
+  // }
+  
+  halfstep = 1 - halfstep;  
+}
+
 ISR(PCINT0_vect) {
   // interupt for switches
-  M1_SWITCH_LOW  = (PINB & (1<<PB6))? 1 : 0;
-  M1_SWITCH_HIGH = (PINB & (1<<PB5))? 1 : 0;
-  M2_SWITCH_LOW  = (PINB & (1<<PB4))? 1 : 0;
-  M2_SWITCH_HIGH = (PINB & (1<<PB7))? 1 : 0;
+  M1_SWITCH_LOW  = (PINB & (1<<PB5))? 0 : 1;
+  M1_SWITCH_HIGH = (PINB & (1<<PB6))? 0 : 1;
+  M2_SWITCH_LOW  = (PINB & (1<<PB4))? 0 : 1;
+  M2_SWITCH_HIGH = (PINB & (1<<PB7))? 0 : 1;
   switch_changed = 1;
 }
 
+
+
+void init_spi_lcd() {
+}
+
  /*****************************************************************
  * Communication
  *****************************************************************/
@@ -212,7 +302,7 @@ void getdata(uint8_t buf) {
     }
   }
 
-
+// R0000000000
  /*****************************************************************
  * Main function
  *****************************************************************/
@@ -239,18 +329,20 @@ __attribute__((naked)) void main(void) {
   PORTC = 0b00000000;
   DDRC  = 0b11000000;
 
-  PORTD = 0b01111000;
+  PORTD = 0b01111100;
   DDRD  = 0b10000100;
 
   PORTE = 0b00000000;
   DDRE  = 0b01000100;
 
-  PORTF = 0b00000000;
+  PORTF = 0b10000001;
   DDRF  = 0b11110011;
 
-  // Timer0 at 30 Hz overflow
-  TCCR0B = (5 << CS00);
-  TIMSK0 = (1 << TOIE0); // Overflow interrupt`
+  // Timer0 at 50 Hz CTC
+  TCCR0A = (2 << WGM00);  // CTC mode
+  TCCR0B = (5 << CS00); //1024 prescaler
+  OCR0A  = 160;
+  TIMSK0 = (1 << OCIE0A); // Overflow interrupt
 
   //SPI for display
   SPCR = 0 << SPIE | 1 << SPE | 0 << DORD | 1 << MSTR | 1 << CPOL | 1 << CPHA | 0 << SPR1 | 0 << SPR0;
@@ -262,52 +354,285 @@ __attribute__((naked)) void main(void) {
   PCMSK0 = 0xf0;
 
   //Timer for motor Controller
+  TCCR1A = 0;
+  TCCR1B = (4 << CS00) | (1 << WGM12); //256 prescaler, CTC mode
+  OCR1A = 16; //1.95 kHz
+  TIMSK1 = (1 << OCIE1A); //overflow interrupt
+  
 
+  
   //I2C for current monitor
 
-
+  usb_init();
   _delay_ms(200);
-  lcd_init();
+  lcd_init();  
   lcd_set_color(colors+0,0x1f,0x3f,0x0e); //yellow 1st
   lcd_set_color(colors+1,0x1f,0x3f,0x0e); //yellow 2nd
   lcd_set_color(colors+2,0x1f,0x3f,0x1f); //second curve
   lcd_set_color(colors+3,0x0e,0x3f,0x0f); //green
   lcd_set_color(colors+4,0x0e,0x1f,0x1f); //blue cool
-  lcd_set_color(colors+5,0x1f,0x09,0x01); //red heat
-
+  lcd_set_color(colors+5,0x1f,0x0f,0x05); //red heat
+  lcd_set_color(colors+6,0,0,0);          //black
+  
   lcd_set_color(&topback,0x03,0x04,0x05);
 
-  // lcd_command_1(LCD_MIRROR, LCD_BGR | LCD_FLIP_XY);
+  lcd_command_1(LCD_MIRROR, LCD_BGR | LCD_FLIP_XY);
   lcd_command(LCD_ON);
-  lcd_use_background(topback);
+  lcd_use_background(colors[6]);
+  lcd_use_foreground(colors[0]);
   lcd_set_area_xy(0, 0x13F, 0, 0xEF);
-  lcd_set_font(font_proportional_16px,SPACING);
-  lcd_use_background(topback);
-  lcd_putstr_xy_P(PSTR("Step Motor Controller"),32,0);
+  lcd_set_font(FONT_PROP_16,SPACING);
+  lcd_putstr_xy_P(PSTR("Step Motor Controller"),2,0);
+  lcd_putstr_xy_P(PSTR("X"),72,2);
+  lcd_putstr_xy_P(PSTR("Y"),112,2);
+  lcd_putstr_xy_P(PSTR("S"),208,2);
+  lcd_use_foreground(colors[5]);
+  lcd_putstr_xy_P(PSTR("off"),16,280);  
+  lcd_use_foreground(colors[0]);
+  lcd_putstr_xy_P(PSTR("<-->"),32,280);
+  lcd_putstr_xy_P(PSTR("Sp 4"),48,280);
+  lcd_set_font(FONT_DIGITS_32,SPACING);  
+  LCD_MOVE_TO(200,46);
+  lcd_put_long(stepsize);
+  lcd_set_font(FONT_PROP_16,SPACING);
 
 
   uint16_t lasttime = 0;
 
+  for (uint8_t i = 0; i < 16; i++) keypad[i] = 0;
+  
   while (1) {
-    //     int n = usb_serial_getchar();
-    //     if (n >= 0) {
-    //      isMaster = 1;
-    //      //SELECT_MASTER();
-    //      getdata(n);
-    //    }
+    int n = usb_serial_getchar();
+    if (n >= 0) {
+      getdata(n);
+    }
 
     if ((time != lasttime)) {
       if(switch_changed) {
-        lcd_set_font(font_fixed_16px,SPACING);
-        uint8_t[6] text;
-        text[0] = M1_SWITCH_LOW ? '_':'X';
-        text[1] = M1_SWITCH_HIGH ? '_':'X';
-        text[2] = ' ';
-        text[3] = M2_SWITCH_LOW ? '_':'X';
-        text[4] = M2_SWITCH_HIGH ? '_':'X';
-        text[5] = 0;
-        lcd_putstr_xy(text,32,0);
+        switch_changed = 0;
+        lcd_set_font(FONT_PROP_16,SPACING);
+        lcd_use_foreground(colors[5]);        
+        if(M1_SWITCH_LOW) lcd_putstr_xy_P(PSTR("min"),72,240);
+        if(M1_SWITCH_HIGH) lcd_putstr_xy_P(PSTR("max"),72,240);
+        if(M2_SWITCH_LOW) lcd_putstr_xy_P(PSTR("min"),112,240);
+        if(M2_SWITCH_HIGH) lcd_putstr_xy_P(PSTR("max"),112,240);
+        if(!M1_SWITCH_LOW && !M1_SWITCH_HIGH) lcd_set_area_xy(240, 280, 72, 88);
+        if(!M2_SWITCH_LOW && !M2_SWITCH_HIGH) lcd_set_area_xy(240, 280, 112, 128);
+        lcd_use_foreground(colors[0]);
+        }
+        
+//ABCD
+      if(keyupdate) {
+        keyupdate = 0;
+        
+        lcd_set_font(FONT_PROP_16,SPACING);
+        if(keypad[12] && keypad[12] != 255) { //A
+          if (motor_active) {
+            motor_active = 0;
+            DISABLE_M1();
+            DISABLE_M2();
+            M1_STEPS = 0;
+            M2_STEPS = 0;
+            lcd_use_foreground(colors[5]);
+            lcd_putstr_xy_P(PSTR("off"),16,280);
+            lcd_use_foreground(colors[0]);
+            }
+          else {
+            motor_active = 1;
+            ENABLE_M1();
+            ENABLE_M2();
+            lcd_use_foreground(colors[3]);
+            lcd_putstr_xy_P(PSTR("ON "),16,280);
+            lcd_use_foreground(colors[0]);
+          }
+          keypad[12] = 255;  
+        }
+        if(keypad[13] && keypad[13] != 255) { //B
+          numlock = 1 - numlock;
+          if (numlock) {
+            lcd_set_area_xy(280,320,32,48);
+            lcd_putstr_xy_P(PSTR("NUM"),32,280);
+          }
+          else {
+            lcd_set_area_xy(280,320,32,48);
+            lcd_putstr_xy_P(PSTR("<-->"),32,280);
+            lcd_set_area_xy(240,320,224,240);
+            inputbuffer = 0;
+            negativeinput = 0;
+          }
+          keypad[13] = 255;  
         }
+//Cursor Keys        
+        if(!numlock) {
+          if(keypad[14] && keypad[14] != 255) { //C
+            cli();
+            M1_position = 0;
+            M2_position = 0;
+            sei();
+            keypad[14] = 255;  
+          }      
+          if(keypad[15] && keypad[15] != 255) { //D
+            cli();
+            M1_STEPS = 0;
+            M2_STEPS = 0;
+            sei();
+            keypad[14] = 255;  
+          }       
+          
+          if(keypad[4]) { //2
+            if (keypad[4] < 20 || keypad[4] > 40) {
+              if(M2_STEPS == 0 && motor_active) {
+                DIRECTION_FORWARD_M2();
+                M2_DIR = 1;
+                M2_STEPS = stepsize;
+              }
+            }
+            if(keypad[4] < 20)        keypad[4] = 20;
+            if (!(keystate & (1<<4))) keypad[4] = 255;
+          }
+        
+          if(keypad[6]) { //8
+            if (keypad[6] < 20 || keypad[6] > 40) {
+              if(M2_STEPS == 0 && motor_active) {
+                DIRECTION_BACKWARD_M2();
+                M2_DIR = 0;
+                M2_STEPS = stepsize;
+              }
+            }
+            if(keypad[6] < 20)        keypad[6] = 20;
+            if (!(keystate & (1<<6))) keypad[6] = 255;
+          }
+          
+          if(keypad[1]) { //4
+            if (keypad[1] < 20 || keypad[1] > 40) {
+              if(M1_STEPS == 0 && motor_active) {
+                DIRECTION_BACKWARD_M1();
+                M1_DIR = 0;
+                M1_STEPS = stepsize;
+              }
+            }
+            if(keypad[1] < 20)        keypad[1] = 20;
+            if (!(keystate & (1<<1))) keypad[1] = 255;
+          }
+        
+          if(keypad[9]) { //6
+            if (keypad[9] < 20 || keypad[9] > 40) {
+              if(M1_STEPS == 0 && motor_active) {
+                DIRECTION_FORWARD_M1();
+                M1_DIR = 1;
+                M1_STEPS = stepsize;
+              }
+            }
+            if(keypad[9] < 20)        keypad[9] = 20;
+            if (!(keystate & (1<<9))) keypad[9] = 255;
+          }
+        inputbuffer = 0;
+        }
+//Number input
+        else {
+          if( keypad[0]  && keypad[0] != 255) { inputbuffer *= 10; inputbuffer += 1; keypad[0] = 255; }
+          if( keypad[1]  && keypad[1] != 255) { inputbuffer *= 10; inputbuffer += 4; keypad[1] = 255; }
+          if( keypad[2]  && keypad[2] != 255) { inputbuffer *= 10; inputbuffer += 7; keypad[2] = 255; }
+          if( keypad[4]  && keypad[4] != 255) { inputbuffer *= 10; inputbuffer += 2; keypad[4] = 255; }
+          if( keypad[5]  && keypad[5] != 255) { inputbuffer *= 10; inputbuffer += 5; keypad[5] = 255; }
+          if( keypad[6]  && keypad[6] != 255) { inputbuffer *= 10; inputbuffer += 8; keypad[6] = 255; }
+          if( keypad[7]  && keypad[7] != 255) { 
+            if (inputbuffer != 0) {inputbuffer *= 10; inputbuffer += 0; keypad[7] = 255; }
+            if (inputbuffer == 0) {negativeinput = 1 - negativeinput; keypad[7] = 255;}
+          }
+          if( keypad[8]  && keypad[8] != 255) { inputbuffer *= 10; inputbuffer += 3; keypad[8] = 255; }
+          if( keypad[9]  && keypad[9] != 255) { inputbuffer *= 10; inputbuffer += 6; keypad[9] = 255; }
+          if( keypad[10] && keypad[10] != 255) { inputbuffer *= 10; inputbuffer += 9; keypad[10] = 255; }
+          if( keypad[11] && keypad[11] != 255) {  // #
+            stepsize = inputbuffer;
+            inputbuffer = 0; negativeinput=0;
+            if (stepsize > 100000) stepsize = 100000;
+            keypad[11] = 255;
+            lcd_set_font(FONT_DIGITS_32,SPACING);  
+            LCD_MOVE_TO(200,16);
+            lcd_set_area_xy(16,240,200,232);            
+            lcd_put_long_align32_7(stepsize);
+            lcd_set_font(FONT_PROP_16,SPACING);
+          } 
+          if(keypad[3] && keypad[3] != 255) {  // *
+            speed = inputbuffer & 0x7;
+            inputbuffer = 0; negativeinput = 0;        
+            cli();
+            OCR1A = speeds[speed];
+            TCNT1 = 0;
+            sei();
+            keypad[3] = 255;
+            lcd_set_font(FONT_PROP_16,SPACING);
+            lcd_set_area_xy(280,320,48,64);
+            LCD_MOVE_TO(48,280);
+            lcd_putstr_P(PSTR("Sp "));
+            lcd_put_short(speed);
+          }
+          if(keypad[14] && keypad[14] != 255) { //C
+            if (motor_active) {
+              cli();
+              M1_STEPS = 0;
+              if (negativeinput) inputbuffer *= -1;
+              if(M1_position < inputbuffer) {
+                DIRECTION_FORWARD_M1();
+                M1_DIR = 1;
+                M1_STEPS = inputbuffer-M1_position;
+              } else {
+                DIRECTION_BACKWARD_M1();
+                M1_DIR = 0;
+                M1_STEPS = M1_position-inputbuffer;
+              }
+              inputbuffer = 0; negativeinput = 0;
+              sei();
+            }
+            keypad[14] = 255;  
+          }        
+          if(keypad[15] && keypad[15] != 255) { //D
+            if (motor_active) {            
+              cli();
+              M2_STEPS = 0;
+              if (negativeinput) inputbuffer *= -1;
+              if(M2_position < inputbuffer) {
+                DIRECTION_FORWARD_M2();
+                M2_DIR = 1;
+                M2_STEPS = inputbuffer-M2_position;
+              } else {
+                DIRECTION_BACKWARD_M2();
+                M2_DIR = 0;
+                M2_STEPS = M2_position-inputbuffer;
+              }
+              inputbuffer = 0; negativeinput = 0;
+              sei();
+            }
+            keypad[15] = 255;  
+          }           
+          if (inputbuffer > 1000000) inputbuffer = 0;
+          if(inputbuffer != last_inputbuffer) {
+            lcd_set_font(FONT_PROP_16,SPACING);
+            lcd_set_area_xy(240,320,224,240);
+            LCD_MOVE_TO(224,240);
+            if (negativeinput)  lcd_put_long(-inputbuffer); 
+            else                lcd_put_long(inputbuffer);
+            
+            }
+          last_inputbuffer = inputbuffer;
+        }
+      }  
+        
+      //output position
+      if( (time & 0xf) == 0) {
+        lcd_set_font(FONT_DIGITS_32,SPACING);  
+        // lcd_use_background(topback);
+
+        LCD_MOVE_TO(64,16);
+        // lcd_set_area_xy(16,180,64,96);
+        lcd_put_long_align32_7(M1_position);
+
+        LCD_MOVE_TO(104,16);
+        // lcd_set_area_xy(16,180,104,136);       
+        lcd_put_long_align32_7(M2_position);
+
+      }
     }
 
 
index 708bc549eb96cafeddb39c258bbf2146bcc8ffa2..46f671d1d6154f32f7b92d7b1b98801b483e5647 100644 (file)
@@ -43,7 +43,7 @@
 // You can change these to give your code its own name.  On Windows,
 // these are only used before an INF file (driver install) is loaded.
 #define STR_MANUFACTURER        L"Xmatter"
-#define STR_PRODUCT                L"DCDC_Test"
+#define STR_PRODUCT                L"SMC"
 
 // All USB serial devices are supposed to have a serial number
 // (according to Microsoft).  On windows, a new COM port is created