diff --git a/dist/attiny404/debug/memoryfile.xml b/dist/attiny404/debug/memoryfile.xml
deleted file mode 100644
index 141c6c9..0000000
--- a/dist/attiny404/debug/memoryfile.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
- bytes
- 4096
- 486
- 3610
-
-
- bytes
- 256
- 2
- 254
-
-
-
diff --git a/nbproject/Makefile-attiny404.mk b/nbproject/Makefile-attiny404.mk
index 37e2353..fea1f21 100644
--- a/nbproject/Makefile-attiny404.mk
+++ b/nbproject/Makefile-attiny404.mk
@@ -51,17 +51,17 @@ OBJECTDIR=build/${CND_CONF}/${IMAGE_TYPE}
DISTDIR=dist/${CND_CONF}/${IMAGE_TYPE}
# Source Files Quoted if spaced
-SOURCEFILES_QUOTED_IF_SPACED=src/main.c src/RegEdit/RegEdit.c src/usart/usart.c src/timer/timer.c
+SOURCEFILES_QUOTED_IF_SPACED=src/main.c src/RegEdit/RegEdit.c src/usart/usart.c src/timer/timer.c src/LedController/LedController.c
# Object Files Quoted if spaced
-OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/src/main.o ${OBJECTDIR}/src/RegEdit/RegEdit.o ${OBJECTDIR}/src/usart/usart.o ${OBJECTDIR}/src/timer/timer.o
-POSSIBLE_DEPFILES=${OBJECTDIR}/src/main.o.d ${OBJECTDIR}/src/RegEdit/RegEdit.o.d ${OBJECTDIR}/src/usart/usart.o.d ${OBJECTDIR}/src/timer/timer.o.d
+OBJECTFILES_QUOTED_IF_SPACED=${OBJECTDIR}/src/main.o ${OBJECTDIR}/src/RegEdit/RegEdit.o ${OBJECTDIR}/src/usart/usart.o ${OBJECTDIR}/src/timer/timer.o ${OBJECTDIR}/src/LedController/LedController.o
+POSSIBLE_DEPFILES=${OBJECTDIR}/src/main.o.d ${OBJECTDIR}/src/RegEdit/RegEdit.o.d ${OBJECTDIR}/src/usart/usart.o.d ${OBJECTDIR}/src/timer/timer.o.d ${OBJECTDIR}/src/LedController/LedController.o.d
# Object Files
-OBJECTFILES=${OBJECTDIR}/src/main.o ${OBJECTDIR}/src/RegEdit/RegEdit.o ${OBJECTDIR}/src/usart/usart.o ${OBJECTDIR}/src/timer/timer.o
+OBJECTFILES=${OBJECTDIR}/src/main.o ${OBJECTDIR}/src/RegEdit/RegEdit.o ${OBJECTDIR}/src/usart/usart.o ${OBJECTDIR}/src/timer/timer.o ${OBJECTDIR}/src/LedController/LedController.o
# Source Files
-SOURCEFILES=src/main.c src/RegEdit/RegEdit.c src/usart/usart.c src/timer/timer.c
+SOURCEFILES=src/main.c src/RegEdit/RegEdit.c src/usart/usart.c src/timer/timer.c src/LedController/LedController.c
@@ -88,54 +88,66 @@ MP_PROCESSOR_OPTION=ATtiny404
# ------------------------------------------------------------------------------------
# Rules for buildStep: compile
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
-${OBJECTDIR}/src/main.o: src/main.c .generated_files/flags/attiny404/93cd698711e08c5f098bce2b99caeb54a195d8cb .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/main.o: src/main.c .generated_files/flags/attiny404/fa73280ab5c751ec6af1e867ba2ca1963f225032 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src"
@${RM} ${OBJECTDIR}/src/main.o.d
@${RM} ${OBJECTDIR}/src/main.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/main.o.d" -MT "${OBJECTDIR}/src/main.o.d" -MT ${OBJECTDIR}/src/main.o -o ${OBJECTDIR}/src/main.o src/main.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/main.o.d" -MT "${OBJECTDIR}/src/main.o.d" -MT ${OBJECTDIR}/src/main.o -o ${OBJECTDIR}/src/main.o src/main.c
-${OBJECTDIR}/src/RegEdit/RegEdit.o: src/RegEdit/RegEdit.c .generated_files/flags/attiny404/eaf4df5ba31e820d582cd21f0922516d83ae8266 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/RegEdit/RegEdit.o: src/RegEdit/RegEdit.c .generated_files/flags/attiny404/f1028cc7904ca5b9159231969b0f7ada47916d51 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/RegEdit"
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o.d
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT ${OBJECTDIR}/src/RegEdit/RegEdit.o -o ${OBJECTDIR}/src/RegEdit/RegEdit.o src/RegEdit/RegEdit.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT ${OBJECTDIR}/src/RegEdit/RegEdit.o -o ${OBJECTDIR}/src/RegEdit/RegEdit.o src/RegEdit/RegEdit.c
-${OBJECTDIR}/src/usart/usart.o: src/usart/usart.c .generated_files/flags/attiny404/6cb38abd3ca230aa75430aac2df7421ff093467c .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/usart/usart.o: src/usart/usart.c .generated_files/flags/attiny404/5817417095ee90b3772093983d64af5583ba17d9 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/usart"
@${RM} ${OBJECTDIR}/src/usart/usart.o.d
@${RM} ${OBJECTDIR}/src/usart/usart.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/usart/usart.o.d" -MT "${OBJECTDIR}/src/usart/usart.o.d" -MT ${OBJECTDIR}/src/usart/usart.o -o ${OBJECTDIR}/src/usart/usart.o src/usart/usart.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/usart/usart.o.d" -MT "${OBJECTDIR}/src/usart/usart.o.d" -MT ${OBJECTDIR}/src/usart/usart.o -o ${OBJECTDIR}/src/usart/usart.o src/usart/usart.c
-${OBJECTDIR}/src/timer/timer.o: src/timer/timer.c .generated_files/flags/attiny404/1eddd4b60bc15f2a31507380340fe31439393a73 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/timer/timer.o: src/timer/timer.c .generated_files/flags/attiny404/531278ccb10cb2635ffd5346f85461fc0d204d43 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/timer"
@${RM} ${OBJECTDIR}/src/timer/timer.o.d
@${RM} ${OBJECTDIR}/src/timer/timer.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/timer/timer.o.d" -MT "${OBJECTDIR}/src/timer/timer.o.d" -MT ${OBJECTDIR}/src/timer/timer.o -o ${OBJECTDIR}/src/timer/timer.o src/timer/timer.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/timer/timer.o.d" -MT "${OBJECTDIR}/src/timer/timer.o.d" -MT ${OBJECTDIR}/src/timer/timer.o -o ${OBJECTDIR}/src/timer/timer.o src/timer/timer.c
+
+${OBJECTDIR}/src/LedController/LedController.o: src/LedController/LedController.c .generated_files/flags/attiny404/e5833ed4bfab6fc1888677874b82093a64e3627 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+ @${MKDIR} "${OBJECTDIR}/src/LedController"
+ @${RM} ${OBJECTDIR}/src/LedController/LedController.o.d
+ @${RM} ${OBJECTDIR}/src/LedController/LedController.o
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -D__DEBUG=1 -g -DDEBUG -gdwarf-2 -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/LedController/LedController.o.d" -MT "${OBJECTDIR}/src/LedController/LedController.o.d" -MT ${OBJECTDIR}/src/LedController/LedController.o -o ${OBJECTDIR}/src/LedController/LedController.o src/LedController/LedController.c
else
-${OBJECTDIR}/src/main.o: src/main.c .generated_files/flags/attiny404/4eb85dd4799625f46dc819ca4196f7ed89fb0b7a .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/main.o: src/main.c .generated_files/flags/attiny404/5fd051d6a3fd92bb1802b9adc043a7d1f28ddda1 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src"
@${RM} ${OBJECTDIR}/src/main.o.d
@${RM} ${OBJECTDIR}/src/main.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/main.o.d" -MT "${OBJECTDIR}/src/main.o.d" -MT ${OBJECTDIR}/src/main.o -o ${OBJECTDIR}/src/main.o src/main.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/main.o.d" -MT "${OBJECTDIR}/src/main.o.d" -MT ${OBJECTDIR}/src/main.o -o ${OBJECTDIR}/src/main.o src/main.c
-${OBJECTDIR}/src/RegEdit/RegEdit.o: src/RegEdit/RegEdit.c .generated_files/flags/attiny404/3023305223f3577afd127e2ae99dfa5ae0df7a9a .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/RegEdit/RegEdit.o: src/RegEdit/RegEdit.c .generated_files/flags/attiny404/165022dc8e1e49b4bb590dc119cbd48dfa74dcd .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/RegEdit"
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o.d
@${RM} ${OBJECTDIR}/src/RegEdit/RegEdit.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT ${OBJECTDIR}/src/RegEdit/RegEdit.o -o ${OBJECTDIR}/src/RegEdit/RegEdit.o src/RegEdit/RegEdit.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT "${OBJECTDIR}/src/RegEdit/RegEdit.o.d" -MT ${OBJECTDIR}/src/RegEdit/RegEdit.o -o ${OBJECTDIR}/src/RegEdit/RegEdit.o src/RegEdit/RegEdit.c
-${OBJECTDIR}/src/usart/usart.o: src/usart/usart.c .generated_files/flags/attiny404/ba022f0d138ace5b4b3cc0cf32826f5ab228d78d .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/usart/usart.o: src/usart/usart.c .generated_files/flags/attiny404/adb78bad2bf6c6e7b6bc725940fdbd35cd7e6aa6 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/usart"
@${RM} ${OBJECTDIR}/src/usart/usart.o.d
@${RM} ${OBJECTDIR}/src/usart/usart.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/usart/usart.o.d" -MT "${OBJECTDIR}/src/usart/usart.o.d" -MT ${OBJECTDIR}/src/usart/usart.o -o ${OBJECTDIR}/src/usart/usart.o src/usart/usart.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/usart/usart.o.d" -MT "${OBJECTDIR}/src/usart/usart.o.d" -MT ${OBJECTDIR}/src/usart/usart.o -o ${OBJECTDIR}/src/usart/usart.o src/usart/usart.c
-${OBJECTDIR}/src/timer/timer.o: src/timer/timer.c .generated_files/flags/attiny404/ecf0f181a723c695620e9728e2db0edea9b71584 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+${OBJECTDIR}/src/timer/timer.o: src/timer/timer.c .generated_files/flags/attiny404/cc56a7bc0edc1617e859cf1cd41630662cdc0fb0 .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
@${MKDIR} "${OBJECTDIR}/src/timer"
@${RM} ${OBJECTDIR}/src/timer/timer.o.d
@${RM} ${OBJECTDIR}/src/timer/timer.o
- ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/timer/timer.o.d" -MT "${OBJECTDIR}/src/timer/timer.o.d" -MT ${OBJECTDIR}/src/timer/timer.o -o ${OBJECTDIR}/src/timer/timer.o src/timer/timer.c
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/timer/timer.o.d" -MT "${OBJECTDIR}/src/timer/timer.o.d" -MT ${OBJECTDIR}/src/timer/timer.o -o ${OBJECTDIR}/src/timer/timer.o src/timer/timer.c
+
+${OBJECTDIR}/src/LedController/LedController.o: src/LedController/LedController.c .generated_files/flags/attiny404/9b6572921ed13d88d6be9b7a24c4d781ce5b16ee .generated_files/flags/attiny404/da39a3ee5e6b4b0d3255bfef95601890afd80709
+ @${MKDIR} "${OBJECTDIR}/src/LedController"
+ @${RM} ${OBJECTDIR}/src/LedController/LedController.o.d
+ @${RM} ${OBJECTDIR}/src/LedController/LedController.o
+ ${MP_CC} $(MP_EXTRA_CC_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -c -x c -D__$(MP_PROCESSOR_OPTION)__ -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -DXPRJ_attiny404=$(CND_CONF) $(COMPARISON_BUILD) -gdwarf-3 -mno-const-data-in-progmem -MD -MP -MF "${OBJECTDIR}/src/LedController/LedController.o.d" -MT "${OBJECTDIR}/src/LedController/LedController.o.d" -MT ${OBJECTDIR}/src/LedController/LedController.o -o ${OBJECTDIR}/src/LedController/LedController.o src/LedController/LedController.c
endif
@@ -156,14 +168,14 @@ endif
ifeq ($(TYPE_IMAGE), DEBUG_RUN)
${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} ${DISTDIR}
- ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.map -D__DEBUG=1 -DXPRJ_attiny404=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -gdwarf-2 -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -gdwarf-3 -mno-const-data-in-progmem $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1
+ ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.map -D__DEBUG=1 -DXPRJ_attiny404=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -gdwarf-2 -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -gdwarf-3 -mno-const-data-in-progmem $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${OUTPUT_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--start-group -Wl,-lm -Wl,--end-group -Wl,--defsym=__MPLAB_DEBUG=1,--defsym=__DEBUG=1
@${RM} ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.hex
else
${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${OUTPUT_SUFFIX}: ${OBJECTFILES} nbproject/Makefile-${CND_CONF}.mk
@${MKDIR} ${DISTDIR}
- ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.map -DXPRJ_attiny404=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -Wall -gdwarf-3 -mno-const-data-in-progmem $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--start-group -Wl,-lm -Wl,--end-group
+ ${MP_CC} $(MP_EXTRA_LD_PRE) -mcpu=$(MP_PROCESSOR_OPTION) -Wl,-Map=${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.map -DXPRJ_attiny404=$(CND_CONF) -Wl,--defsym=__MPLAB_BUILD=1 -mdfp="${DFP_DIR}/xc8" -Wl,--gc-sections -O1 -ffunction-sections -fdata-sections -fshort-enums -fno-common -funsigned-char -funsigned-bitfields -I"src/RegEdit" -I"src/usart" -I"inc" -I"src/timer" -I"src/LedController" -Wall -gdwarf-3 -mno-const-data-in-progmem $(COMPARISON_BUILD) -Wl,--memorysummary,${DISTDIR}/memoryfile.xml -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} -o ${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX} ${OBJECTFILES_QUOTED_IF_SPACED} -Wl,--start-group -Wl,-lm -Wl,--end-group
${MP_CC_DIR}/avr-objcopy -O ihex "${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.${DEBUGGABLE_SUFFIX}" "${DISTDIR}/Relay_Tester.${IMAGE_TYPE}.hex"
endif
diff --git a/nbproject/Makefile-genesis.properties b/nbproject/Makefile-genesis.properties
index b632178..0d2dbde 100644
--- a/nbproject/Makefile-genesis.properties
+++ b/nbproject/Makefile-genesis.properties
@@ -1,11 +1,11 @@
#
-#Mon Aug 05 16:21:13 PDT 2024
+#Thu Aug 22 12:59:17 PDT 2024
attiny404.com-microchip-mplab-mdbcore-PK5Tool-PK5ToolImpl.md5=8ed9aa4326bfc0c1a849e697826741b7
attiny404.languagetoolchain.version=2.46
attiny404.com-microchip-mplab-nbide-toolchain-xc8-XC8LanguageToolchain.md5=bf89cdcdd6c0a49174fe4b605ef2b42d
conf.ids=,attiny404
host.id=2ov5-ff4p-rv
-configurations-xml=3bffeb0d566f505c9074237640a84270
+configurations-xml=0048f11b5d154940aa328734e33d107d
com-microchip-mplab-nbide-embedded-makeproject-MakeProject.md5=f612087c95360c842296d189edfe3321
attiny404.languagetoolchain.dir=/opt/microchip/xc8/v2.46/bin
proj.dir=/home/ronin/Documents/projects/freelance/laith_naaman/Relay_Tester
diff --git a/nbproject/configurations.xml b/nbproject/configurations.xml
index b0c5707..a0aa439 100644
--- a/nbproject/configurations.xml
+++ b/nbproject/configurations.xml
@@ -7,6 +7,7 @@
src/RegEdit/RegEdit.h
src/usart/usart.h
inc/config.h
+ src/LedController/LedController.h
src/RegEdit/RegEdit.c
src/usart/usart.c
src/timer/timer.c
+ src/LedController/LedController.c
@@ -355,7 +357,7 @@
+ value="src/RegEdit;src/usart;inc;src/timer;src/LedController"/>
@@ -443,7 +445,7 @@
-
+
diff --git a/nbproject/private/private.xml b/nbproject/private/private.xml
index 284eeec..9789be6 100644
--- a/nbproject/private/private.xml
+++ b/nbproject/private/private.xml
@@ -2,6 +2,8 @@
-
+
+ file:/home/ronin/Documents/projects/freelance/laith_naaman/Relay_Tester/src/main.c
+
diff --git a/src/LedController/LedController.c b/src/LedController/LedController.c
index fc917db..b14c181 100644
--- a/src/LedController/LedController.c
+++ b/src/LedController/LedController.c
@@ -5,7 +5,83 @@
* description: Abstract LED interface and control.
*/
+
+#ifndef __AVR_ATtiny404__
+#define __AVR_ATtiny404__
+#endif
+
#include "LedController.h"
+#include "avr/io.h"
+
+#define PA_B1 (1<<2)
+#define PA_B2 (1<<3)
+#define PA_B3 (1<<6)
+#define PA_B4 (1<<7)
+
+#define BITS_IN_BYTE (1<<2)|(1<<3)|(1<<6)|(1<<7)
+
+#define HALF_BYTE_BM
+
+typedef struct LedController {
+ void *port;
+ uint8_t pins[BITS_IN_BYTE];
+}LedController;
+
+static LedController controller;
+void LedControler_SetPortADefault(void);
+
+/*
+ * Uses pins: 9, 8, 12, 13
+ */
+void LedControler_SetPortBDefault(void)
+{
+ //controller.port = &PORTA;
+}
+
+void LedController_SetLedBitNum(void * port, uint8_t pin, uint8_t bit);
+
+void LedController_ShowByte(uint8_t byte);
+
+
+void LedControler_ShowHalfByte(uint8_t byte)
+{
+ byte = byte & 0x0F;
+
+ //PORTA.DIR |= (1<<2)|(1<<3)|(1<<6)|(1<<7);
+ PORTA.DIR |= PA_B1;
+ PORTA.DIR |= PA_B2;
+ PORTA.DIR |= PA_B3;
+ PORTA.DIR |= PA_B4;
+ //PORTA.DIR |= HALF_BYTE_BM;
+
+ // 15 = 0b1111
+ //PORTA.OUT |= (byte & 0x0F);
+
+ if(byte & 0x01){
+ PORTA.OUT |= PA_B1;
+ }
+ if(byte & 0x02){
+ PORTA.OUT |= PA_B2;
+ }
+ if(byte & 0x04){
+ PORTA.OUT |= PA_B3;
+ }
+ if(byte & 0x08){
+ PORTA.OUT |= PA_B4;
+ }
+}
+
+
+void LedControler_ClearHalfByte(void)
+{
+ //PORTA.OUT &= HALF_BYTE_BM;
+ //PORTA.OUT &= ~((1<<2)|(1<<3)|(1<<6)|(1<<7));
+ PORTA.OUT &= ~PA_B1;
+ PORTA.OUT &= ~PA_B2;
+ PORTA.OUT &= ~PA_B3;
+ PORTA.OUT &= ~PA_B4;
+ //PORTA.OUT = 0x00;
+}
diff --git a/src/LedController/LedController.h b/src/LedController/LedController.h
index a1ec726..0107a46 100644
--- a/src/LedController/LedController.h
+++ b/src/LedController/LedController.h
@@ -38,5 +38,15 @@ void LedController_SetLedBitNum(void * port, uint8_t pin, uint8_t bit);
void LedController_ShowByte(uint8_t byte);
+/**
+ * Displays the the first 4 bits of a byte.
+ */
+void LedControler_ShowHalfByte(uint8_t byte);
+
+
+/**
+ * Clears out the halfbyte led representation
+ */
+void LedControler_ClearHalfByte(void);
#endif //LEDCONTROLLER
diff --git a/src/main.c b/src/main.c
index fd2d083..8987f0f 100644
--- a/src/main.c
+++ b/src/main.c
@@ -16,6 +16,7 @@
#define __DELAY_BACKWARD_COMPATIBLE__
#include "RegEdit.h"
+#include "LedController.h"
#include "config.h"
#include "timer.h"
#include /* Required header file */
@@ -25,7 +26,7 @@
#define SW1PIN (1<<5)
#define SW2PIN (1<<4)
#define RELAYPIN (1<<1)
-#define RELAYREADINGPIN (1<<7) //It would be better to use PA7 so USART worked
+#define RELAYREADINGPIN (1<<2) //It would be better to use PA7 so USART worked
//Set the function pointer for the delay func
@@ -57,26 +58,26 @@ void Deactivate_Relay(void)
void WaitForRelayConnect(void)
{
- while(!(PORTA.IN & RELAYREADINGPIN)){;}
+ while(!(PORTB.IN & RELAYREADINGPIN)){;}
}
void WaitForRelayDisconnect(void)
{
- while(PORTA.IN & RELAYREADINGPIN){;}
+ while(PORTB.IN & RELAYREADINGPIN){;}
}
int main(int argc, char **argv)
{
PORTA.DIR |= RELAYPIN;
- PORTA.DIR &= ~RELAYREADINGPIN;
+ PORTB.DIR &= ~RELAYREADINGPIN;
PORTA.DIR &= ~SW1PIN;
PORTA.DIR &= ~SW2PIN;
uint16_t make_time = 0;
uint16_t break_time = 0;
-
+ uint8_t temp = 0;
while(true) {
SW1_Wait();
@@ -88,8 +89,21 @@ int main(int argc, char **argv)
make_time = Timer_GetOverflowCount();
-
//Output the Make time via LEDS
+ //temp = (uint8_t)(make_time & 0x0F);
+ temp = 0x01;
+ LedControler_ShowHalfByte(temp);
+
+ _delay_ms(1000);
+ LedControler_ClearHalfByte();
+
+ //temp = (uint8_t)((make_time & 0xF0)>>4);
+ temp = 0x02;
+ LedControler_ShowHalfByte(temp);
+
+ _delay_ms(1000);
+
+ LedControler_ClearHalfByte();
SW2_Wait();
Deactivate_Relay();
@@ -101,6 +115,22 @@ int main(int argc, char **argv)
break_time = Timer_GetOverflowCount();
//Output the Break time via LEDS
+ //temp = (uint8_t)(break_time & 0x0F);
+ temp = 0x04;
+ LedControler_ShowHalfByte(temp);
+
+ _delay_ms(1000);
+ LedControler_ClearHalfByte();
+
+ //temp = (uint8_t)((break_time & 0xF0)>>4);
+ temp = 0x08;
+ LedControler_ShowHalfByte(temp);
+
+ _delay_ms(1000);
+
+ LedControler_ClearHalfByte();
+
+
/*
USART0_sendString(maketime_msg);
diff --git a/tests/LedController/test_LedController.cpp b/tests/LedController/test_LedController.cpp
index 4134c30..dfb1220 100644
--- a/tests/LedController/test_LedController.cpp
+++ b/tests/LedController/test_LedController.cpp
@@ -24,6 +24,13 @@ TEST_GROUP(test_LedController)
}
};
+
+TEST(test_LedController, SpyStructWorks)
+{
+ FAIL("Not yet implimented");
+}
+
+
TEST(test_LedController, FirstTest)
{
FAIL("Fail me!");