Started working on CNY70 module (doesn't work, yet).

This commit is contained in:
Martin Preuss
2023-05-02 00:03:41 +02:00
parent bcf1674b3b
commit 4a093905e8
6 changed files with 257 additions and 4 deletions

View File

@@ -21,12 +21,12 @@
; AtTiny84
; --------
; VCC 1 14 GND
; PB0 2 13 PA0
; PB0 2 13 PA0 REED_OUT
; PB1 3 12 PA1 COM-DATA
; /RESET PB3 4 11 PA2 [OWI]
; /RESET PB3 4 11 PA2 REED_IN1
; [KEY1] PB2 5 10 PA3 LED
; COM_ATTN PA7 6 9 PA4 TWI-SCL
; TWI-SDA PA6 7 8 PA5
; TWI-SDA PA6 7 8 PA5 REED_IN2
; --------
;
; ***************************************************************************
@@ -67,6 +67,7 @@
;#define MODULES_LCD
#define MODULES_SI7021
#define MODULES_STATS
;#define MODULES_CNY70
.set MODULES_MASK = 0
@@ -91,6 +92,10 @@
#ifdef MODULES_STATS
.set MODULES_MASK = MODULES_MASK | (1<<AQHOME_FW_MODULE_STATS)
#endif
#ifdef MODULES_CNY70
.set MODULES_MASK = MODULES_MASK | (1<<AQHOME_FW_MODULE_CNY70)
#endif
; ---------------------------------------------------------------------------
@@ -102,6 +107,7 @@
.equ VALUE_ID_TEMP1 = 0x01
.equ VALUE_ID_HUM1 = 0x02
.equ VALUE_ID_ADC = 0x03
; ---------------------------------------------------------------------------
@@ -162,6 +168,21 @@
; ---------------------------------------------------------------------------
; ADC/CNY70
.equ CNY70_PORT_LED = PORTB1
.equ CNY70_DDR_LED = DDRB
.equ CNY70_PINNUM_LED = PORTB1
.equ CNY70_PORT_ADC = PORTA5 ; adc5
.equ CNY70_DDR_ADC = DDRB
.equ CNY70_PINNUM_ADC = PORTA5
.equ CNY70_MUX_ADC = MUX5
.equ CNY70_ADCSRB_ADC = ADC5D
; ***************************************************************************
@@ -189,7 +210,11 @@
reti ; OC0B
reti ; OVF0
reti ; ACI
reti ; ADCC
#ifdef MODULES_CNY70
rjmp cny70Isr ; ADCC
#else
reti ; ADCC
#endif
reti ; ERDY
reti ; USI_STR
reti ; USI_OVF
@@ -242,6 +267,9 @@ firmwareStart: rjmp main
#ifdef MODULES_STATS
.include "modules/stats/main.asm"
#endif
#ifdef MODULES_CNY70
.include "modules/cny70/main.asm"
#endif
@@ -260,6 +288,9 @@ sramTimerEnqueueValues: .byte 2
sramTimerSI7021SendTemp: .byte 2
sramTimerSI7021SendHumidity: .byte 2
#endif
#ifdef MODULES_CNY70
sramTimerCny70SendAdc: .byte 2
#endif
#ifdef MODULES_LCD
sramPeriodicalLcdMark: .byte 2
#endif
@@ -297,6 +328,9 @@ timerList:
.dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s
.dw sramTimerSI7021SendTemp, sendTemp, TIMER_FLAGS_IF_ADDR, 60 ; every 60s
.dw sramTimerSI7021SendHumidity, sendHumidity, TIMER_FLAGS_IF_ADDR, 60 ; every 60s
#endif
#ifdef MODULES_CNY70
.dw sramTimerCny70SendAdc, sendAdc, TIMER_FLAGS_IF_ADDR, 30 ; every 30s
#endif
.dw 0 ; end of list
@@ -354,6 +388,20 @@ sendTemp_okay:
#ifdef MODULES_CNY70
sendAdc:
rcall CNY70_SendAdc
brcs sendAdc_okay
; set timer to 1s to retry later
ldi xl, LOW(sramTimerCny70SendAdc)
ldi xh, HIGH(sramTimerCny70SendAdc)
rjmp Timer_SetValueTo1s
sendAdc_okay:
ret
#endif
; ---------------------------------------------------------------------------
; Called every 100ms. Add your routine calls here. No arguments, no results.
@@ -366,6 +414,11 @@ onEvery100ms:
ldi yh, HIGH(ledA3Sram)
rcall Led_Tick
#endif
#ifdef MODULES_CNY70
rcall CNY70_Every100ms
#endif
ret