; *************************************************************************** ; copyright : (C) 2025 by Martin Preuss ; email : martin@libchipcard.de ; ; *************************************************************************** ; * This file is part of the project "AqHome". * ; * Please see toplevel file COPYING of that project for license details. * ; *************************************************************************** ;.equ clock=1000000 ; Define the clock frequency .equ clock=8000000 ; Define the clock frequency .nolist .include "include/m644Pdef.inc" ; Define device ATmega644P .list .include "version.asm" .include "../defs.asm" .include "./data.asm" .include "devices/all/defs.asm" .include "common/calls.asm" .include "common/utils_wait.asm" .include "common/utils_io.asm" ; *************************************************************************** ; defines ; --------------------------------------------------------------------------- ; generic .equ STACK_SIZE = 256 .equ NET_BUFFERS_NUM = 8 .equ NET_MSGNUMINBUF_SIZE = 8 ; max buffer nums in ringbuffer (global incoming) .equ NET_IFACE_OUTMSGBUF_SIZE = 8 ; max buffer nums in ringbuffer (per interface outbound) ; --------------------------------------------------------------------------- ; firmware settings including list of modules used ; #define MODULES_TIMER #define MODULES_CLOCK ;#define MODULES_XRAM ;#define MODULES_HEAP #define MODULES_LED_SIMPLE #define MODULES_NETWORK ;#define MODULES_COMONUART0 ;#define MODULES_UART_HW ;#define MODULES_UART_BITBANG #define MODULES_COM2W #define MODULES_SPI_HW #define MODULES_ILI9341 #define MODULES_XPT2046 #define MODULES_FONT #define MODULES_GUI ;#define MODULES_TWI_MASTER ;#define MODULES_LCD ;#define LCD_MINIMAL_FONT ;#define MODULES_SI7021 ;#define MODULES_SGP30 ;#define MODULES_SGP40 ;#define MODULES_STATS ;#define MODULES_OWI_MASTER ;#define MODULES_DS18B20 ;#define MODULES_MOTION ;#define MODULES_CCS811 #define APPS_NETWORK ;#define APPS_MOTION ;#define APPS_REPORTSENSORS #define APPS_STATS ; --------------------------------------------------------------------------- ; defines for values .equ VALUE_ID_SI7021_TEMP = 0x01 .equ VALUE_ID_SI7021_HUM = 0x02 .equ VALUE_ID_ADC = 0x03 ;.equ VALUE_ID_DS18B20_TEMP = 0x06 .equ VALUE_ID_MOTION = 0x07 .equ VALUE_ID_SGP40_TVOC = 0x08 .equ VALUE_ID_SGP30_TVOC = 0x09 .equ VALUE_ID_SGP30_CO2 = 0x0a ;.equ VALUE_ID_REED_CONF = 0x81 .equ VALUE_ID_DEBUG = 0x7f .equ VALUE_ID_LEDSIMPLE_TIMING = 0x88 .equ VALUE_ID_SENSOR_CO2_BASE = 0x90 .equ VALUE_ID_SENSOR_CO2_SOURCE = 0x90 .equ VALUE_ID_SENSOR_CO2_LIMWARN = 0x91 .equ VALUE_ID_SENSOR_CO2_LIMCRIT = 0x92 .equ VALUE_ID_SENSOR_TEMP_BASE = 0x93 .equ VALUE_ID_SENSOR_TEMP_SOURCE = 0x93 .equ VALUE_ID_SENSOR_TEMP_LIMWARN = 0x94 .equ VALUE_ID_SENSOR_TEMP_LIMCRIT = 0x95 .equ VALUE_ID_SENSOR_HUM_BASE = 0x96 .equ VALUE_ID_SENSOR_HUM_SOURCE = 0x96 .equ VALUE_ID_SENSOR_HUM_LIMWARN = 0x97 .equ VALUE_ID_SENSOR_HUM_LIMCRIT = 0x98 ; *************************************************************************** ; code segment .cseg .org 000000 ; --------------------------------------------------------------------------- ; Reset and interrupt vectors jmp BOOTLOADER_ADDR ; 1: Reset vector RESET jmp irqNotSet ; 2: INT0 External Interrupt Request 0 jmp irqNotSet ; 3: INT1 External Interrupt Request 1 jmp irqNotSet ; 4: INT2 External Interrupt Request 2 jmp com2wPcintIsr ; 5: PCINT0 Pin Change Interrupt Request 0 jmp irqNotSet ; 6: PCINT1 Pin Change Interrupt Request 1 jmp irqNotSet ; 7: PCINT2 Pin Change Interrupt Request 2 jmp irqNotSet ; 8: PCINT3 Pin Change Interrupt Request 3 jmp irqNotSet ; 9: WDT Watchdog Time-out Interrupt jmp irqNotSet ; 10: TIMER2_COMPA Timer/Counter2 Compare Match A jmp irqNotSet ; 11: TIMER2_COMPB Timer/Counter2 Compare Match B jmp irqNotSet ; 12: TIMER2_OVF Timer/Counter2 Overflow jmp irqNotSet ; 13: TIMER1_CAPT Timer/Counter1 Capture Event jmp irqNotSet ; 14: TIMER1_COMPA Timer/Counter1 Compare Match A jmp irqNotSet ; 15: TIMER1_COMPB Timer/Counter1 Compare Match B jmp irqNotSet ; 16: TIMER1_OVF Timer/Counter1 Overflow jmp baseTimerIrqOC0A ; 17: TIMER0_COMPA Timer/Counter0 Compare Match A jmp irqNotSet ; 18: TIMER0_COMPB Timer/Counter0 Compare Match B jmp irqNotSet ; 19: TIMER0_OVF Timer/Counter0 Overflow jmp irqNotSet ; 20: SPI_STC Serial Transfer Complete jmp irqNotSet ; 21: USART0_RXC USART0 Rx Complete jmp irqNotSet ; 22: USART0_UDRE USART0 Data Register Empty jmp irqNotSet ; 23: USART0_TXC USART0 Tx Complete jmp irqNotSet ; 24: ANA_COMP Analog Comparator jmp irqNotSet ; 25: ADC ADC Conversion Complete jmp irqNotSet ; 26: EE_RDY EEPROM Ready jmp irqNotSet ; 27: TWI 2-Wire Interface jmp irqNotSet ; 28: SPM_RDY Store Program Memory Ready devInfoBlock: ; 12 bytes devInfoManufacturer: .db 'A', 'Q', 'U', 'A' devInfoId: .db DEVICEINFO_ID, 0 devInfoVersion: .db DEVICEINFO_VERSION, DEVICEINFO_REVISION ; version, revision firmwareVersion: .db FIRMWARE_VARIANT_TEMP_WINDOW, FIRMWARE_VERSION_MAJOR .db FIRMWARE_VERSION_MINOR, FIRMWARE_VERSION_PATCHLEVEL ; --------------------------------------------------------------------------- ; @routine firmwareStart @global firmwareStart: rjmp main ; @end irqNotSet: reti ; --------------------------------------------------------------------------- ; @routine onSystemStart onSystemStart: bigcall test ret ; @end ; --------------------------------------------------------------------------- ; @routine onMessageReceived ; ; Called on every message received onMessageReceived: ldi zl, LOW(appC03*2) ldi zh, HIGH(appC03*2) bigcall GuiApp_MsgReceived clc ret ; @end ; --------------------------------------------------------------------------- ; @routine onEvery100ms ; ; Called every 100ms. Add your routine calls here. No arguments, no results. onEvery100ms: ldi zl, LOW(appC03*2) ldi zh, HIGH(appC03*2) bigcall GuiApp_Every100ms ret onEveryMinute: onEveryHour: onEveryDay: ret ; @end onEverySecond: ret ; --------------------------------------------------------------------------- ; @routine onEveryLoop ; ; Called on every loop (i.e. after awakening from sleep). ; onEveryLoop: ret ; @end test: ldi zl, LOW(appC03*2) ldi zh, HIGH(appC03*2) bigcall GuiApp_Init ldi zl, LOW(winClimateSensor1*2) ldi zh, HIGH(winClimateSensor1*2) ; set source ldi r16, SENSORWATCH_SIGNAL_SETSOURCE clr r17 ldi xl, 98 ; node address ldi xh, 10 ; value 0x0a (SGP30_CO2) bigcall OBJ_HandleSignal ; set warning limit ldi r16, SENSORWATCH_SIGNAL_SETUPPERLIMWARN clr r17 ldi xl, LOW(800) ldi xh, HIGH(800) bigcall OBJ_HandleSignal ; set critical limit ldi r16, SENSORWATCH_SIGNAL_SETUPPERLIMCRIT clr r17 ldi xl, LOW(2000) ldi xh, HIGH(2000) bigcall OBJ_HandleSignal ldi zl, LOW(winClimateSensor2*2) ldi zh, HIGH(winClimateSensor2*2) ; set source ldi r16, SENSORWATCH_SIGNAL_SETSOURCE clr r17 ldi xl, 9 ; node address ldi xh, 1 ; value 0x01 (SI7021_TEMP) bigcall OBJ_HandleSignal ldi zl, LOW(winClimateSensor3*2) ldi zh, HIGH(winClimateSensor3*2) ; set source ldi r16, SENSORWATCH_SIGNAL_SETSOURCE clr r17 ldi xl, 9 ; node address ldi xh, 2 ; value 0x02 (SI7021_HUM) bigcall OBJ_HandleSignal #if 0 ldi xl, LOW(EEPROM_OFFS_TLV) ldi xh, HIGH(EEPROM_OFFS_TLV) eeloop: bigcall Eeprom_CheckAddr brcc eeloop_end ldi r16, 0xff bigcall Eeprom_WriteByte adiw xh:xl, 1 rjmp eeloop eeloop_end: #endif ret ; *************************************************************************** ; includes .include "devices/all/hw_m644p.asm" .include "devices/all/includes.asm" .include "common/debug.asm" ;.include "modules/lcd2/font/font2.asm" ;.include "modules/lcd2/font/font3.asm" ;.include "modules/lcd2/font/font16x26.asm" ;.include "modules/lcd2/font/font4.asm" ;.include "modules/lcd2/font/font12x16.asm" .include "modules/lcd2/ili9341/font12x16.asm" .include "modules/lcd2/ili9341/font12x16_1.asm" .include "modules/lcd2/ili9341/font6x8.asm" .include "modules/lcd2/ili9341/font6x8_1.asm" ;.include "modules/lcd2/ili9341/font12x20.asm" ;.include "modules/lcd2/ili9341/font12x20_1.asm" ;.include "common/list_t.asm" ;.include "common/tree_t.asm" .include "common/eeprom_tlv.asm" ;.include "common/eeprom-r.asm" .include "common/divide.asm" .include "common/itoa.asm" .include "common/ressource.asm" .include "style.asm" .include "modules/lcd2/gui2/generic/object.asm" .include "modules/lcd2/gui2/generic/widget.asm" .include "modules/lcd2/gui2/generic/rootwidget.asm" .include "modules/lcd2/gui2/generic/label.asm" .include "modules/lcd2/gui2/generic/button.asm" .include "modules/lcd2/gui2/generic/imageview.asm" .include "modules/lcd2/gui2/generic/valuelabel.asm" .include "modules/lcd2/gui2/generic/guiapp.asm" .include "modules/lcd2/gui2/sensorwatch.asm" .include "modules/lcd2/gui2/eepromdump.asm" .include "g_app.asm" .include "g_win_climate.asm" .include "g_win_network.asm" .include "g_win_eepromdump.asm" .include "ressources.inc" ; --------------------------------------------------------------------------- ; defines for network interface ;.equ netInterfaceData = netUartIface ;.equ netInterfaceData = uart_bitbang_iface .equ netInterfaceData = com2w_iface .dseg heapStart: .equ HEAP_START = heapStart .equ HEAP_SIZE = (SRAM_SIZE-STACK_SIZE)-HEAP_START