Started working on CNY70 module (doesn't work, yet).
This commit is contained in:
@@ -21,12 +21,12 @@
|
|||||||
; AtTiny84
|
; AtTiny84
|
||||||
; --------
|
; --------
|
||||||
; VCC 1 14 GND
|
; VCC 1 14 GND
|
||||||
; PB0 2 13 PA0
|
; PB0 2 13 PA0 REED_OUT
|
||||||
; PB1 3 12 PA1 COM-DATA
|
; 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
|
; [KEY1] PB2 5 10 PA3 LED
|
||||||
; COM_ATTN PA7 6 9 PA4 TWI-SCL
|
; 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_LCD
|
||||||
#define MODULES_SI7021
|
#define MODULES_SI7021
|
||||||
#define MODULES_STATS
|
#define MODULES_STATS
|
||||||
|
;#define MODULES_CNY70
|
||||||
|
|
||||||
|
|
||||||
.set MODULES_MASK = 0
|
.set MODULES_MASK = 0
|
||||||
@@ -91,6 +92,10 @@
|
|||||||
#ifdef MODULES_STATS
|
#ifdef MODULES_STATS
|
||||||
.set MODULES_MASK = MODULES_MASK | (1<<AQHOME_FW_MODULE_STATS)
|
.set MODULES_MASK = MODULES_MASK | (1<<AQHOME_FW_MODULE_STATS)
|
||||||
#endif
|
#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_TEMP1 = 0x01
|
||||||
.equ VALUE_ID_HUM1 = 0x02
|
.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 ; OC0B
|
||||||
reti ; OVF0
|
reti ; OVF0
|
||||||
reti ; ACI
|
reti ; ACI
|
||||||
reti ; ADCC
|
#ifdef MODULES_CNY70
|
||||||
|
rjmp cny70Isr ; ADCC
|
||||||
|
#else
|
||||||
|
reti ; ADCC
|
||||||
|
#endif
|
||||||
reti ; ERDY
|
reti ; ERDY
|
||||||
reti ; USI_STR
|
reti ; USI_STR
|
||||||
reti ; USI_OVF
|
reti ; USI_OVF
|
||||||
@@ -242,6 +267,9 @@ firmwareStart: rjmp main
|
|||||||
#ifdef MODULES_STATS
|
#ifdef MODULES_STATS
|
||||||
.include "modules/stats/main.asm"
|
.include "modules/stats/main.asm"
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef MODULES_CNY70
|
||||||
|
.include "modules/cny70/main.asm"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -260,6 +288,9 @@ sramTimerEnqueueValues: .byte 2
|
|||||||
sramTimerSI7021SendTemp: .byte 2
|
sramTimerSI7021SendTemp: .byte 2
|
||||||
sramTimerSI7021SendHumidity: .byte 2
|
sramTimerSI7021SendHumidity: .byte 2
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef MODULES_CNY70
|
||||||
|
sramTimerCny70SendAdc: .byte 2
|
||||||
|
#endif
|
||||||
#ifdef MODULES_LCD
|
#ifdef MODULES_LCD
|
||||||
sramPeriodicalLcdMark: .byte 2
|
sramPeriodicalLcdMark: .byte 2
|
||||||
#endif
|
#endif
|
||||||
@@ -297,6 +328,9 @@ timerList:
|
|||||||
.dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s
|
.dw sramTimerSI7021Measure, SI7021_PeriodicMeasurement, 0, 30 ; every 30s
|
||||||
.dw sramTimerSI7021SendTemp, sendTemp, TIMER_FLAGS_IF_ADDR, 60 ; every 60s
|
.dw sramTimerSI7021SendTemp, sendTemp, TIMER_FLAGS_IF_ADDR, 60 ; every 60s
|
||||||
.dw sramTimerSI7021SendHumidity, sendHumidity, 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
|
#endif
|
||||||
.dw 0 ; end of list
|
.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.
|
; Called every 100ms. Add your routine calls here. No arguments, no results.
|
||||||
|
|
||||||
@@ -366,6 +414,11 @@ onEvery100ms:
|
|||||||
ldi yh, HIGH(ledA3Sram)
|
ldi yh, HIGH(ledA3Sram)
|
||||||
rcall Led_Tick
|
rcall Led_Tick
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MODULES_CNY70
|
||||||
|
rcall CNY70_Every100ms
|
||||||
|
#endif
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -9,6 +9,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.equ AQHOME_VALUETYPE_UNKNOWN = 0
|
||||||
.equ AQHOME_VALUETYPE_TEMP = 1
|
.equ AQHOME_VALUETYPE_TEMP = 1
|
||||||
.equ AQHOME_VALUETYPE_HUMIDITY = 2
|
.equ AQHOME_VALUETYPE_HUMIDITY = 2
|
||||||
|
|
||||||
@@ -21,6 +22,7 @@
|
|||||||
.equ AQHOME_FW_MODULE_LCD = 5
|
.equ AQHOME_FW_MODULE_LCD = 5
|
||||||
.equ AQHOME_FW_MODULE_SI7021 = 6
|
.equ AQHOME_FW_MODULE_SI7021 = 6
|
||||||
.equ AQHOME_FW_MODULE_STATS = 7
|
.equ AQHOME_FW_MODULE_STATS = 7
|
||||||
|
.equ AQHOME_FW_MODULE_CNY70 = 8
|
||||||
|
|
||||||
|
|
||||||
.equ AQHOME_FW_TYPE_ATT84_BASE = 0
|
.equ AQHOME_FW_TYPE_ATT84_BASE = 0
|
||||||
|
|||||||
@@ -136,6 +136,10 @@ initModules:
|
|||||||
rcall Stats_Init
|
rcall Stats_Init
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef MODULES_CNY70
|
||||||
|
rcall CNY70_Init
|
||||||
|
#endif
|
||||||
|
|
||||||
; done
|
; done
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
<subdirs>
|
<subdirs>
|
||||||
bmp280
|
bmp280
|
||||||
|
cny70
|
||||||
com2
|
com2
|
||||||
comproto
|
comproto
|
||||||
flash
|
flash
|
||||||
|
|||||||
11
avr/modules/cny70/0BUILD
Normal file
11
avr/modules/cny70/0BUILD
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
<?xml?>
|
||||||
|
|
||||||
|
<gwbuild>
|
||||||
|
|
||||||
|
<extradist>
|
||||||
|
main.asm
|
||||||
|
</extradist>
|
||||||
|
|
||||||
|
</gwbuild>
|
||||||
|
|
||||||
|
|
||||||
182
avr/modules/cny70/main.asm
Normal file
182
avr/modules/cny70/main.asm
Normal file
@@ -0,0 +1,182 @@
|
|||||||
|
; ***************************************************************************
|
||||||
|
; copyright : (C) 2023 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. *
|
||||||
|
; ***************************************************************************
|
||||||
|
|
||||||
|
|
||||||
|
; doesn't work, yet
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ***************************************************************************
|
||||||
|
; data
|
||||||
|
|
||||||
|
.dseg
|
||||||
|
|
||||||
|
|
||||||
|
.equ CNY70_FLAGS_ADC_STARTED = 0x01
|
||||||
|
.equ CNY70_FLAGS_ADC_FINISHED = 0x02
|
||||||
|
.equ CNY70_FLAGS_ADC_VALID = 0x04
|
||||||
|
|
||||||
|
.equ CNY70_TIMER_100MS = 20 ; every 2s
|
||||||
|
|
||||||
|
|
||||||
|
cny70DataBegin:
|
||||||
|
cny70Flags: .byte 1
|
||||||
|
cny70LastData: .byte 1
|
||||||
|
cny70TimerCounter: .byte 1
|
||||||
|
cny70DataEnd:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ***************************************************************************
|
||||||
|
; code
|
||||||
|
|
||||||
|
.cseg
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; ---------------------------------------------------------------------------
|
||||||
|
; Init module.
|
||||||
|
;
|
||||||
|
; IN:
|
||||||
|
; - nothing
|
||||||
|
; OUT:
|
||||||
|
; - CFLAG: set if okay, clear on error
|
||||||
|
; USED:
|
||||||
|
|
||||||
|
CNY70_Init:
|
||||||
|
; preset SRAM data area
|
||||||
|
ldi xh, HIGH(cny70DataBegin)
|
||||||
|
ldi xl, LOW(cny70DataBegin)
|
||||||
|
clr r16
|
||||||
|
ldi r17, (cny70DataEnd-cny70DataBegin)
|
||||||
|
rcall Utils_FillSram
|
||||||
|
|
||||||
|
; setup pins and interrupts
|
||||||
|
sbi CNY70_DDR_LED, CNY70_PINNUM_LED ; set DATA port as output
|
||||||
|
cbi CNY70_PORT_LED, CNY70_PINNUM_LED ; LED off
|
||||||
|
cbi CNY70_PORT_ADC, CNY70_PINNUM_ADC ; disable internal pullup for ADC
|
||||||
|
cbi CNY70_DDR_ADC, CNY70_PINNUM_ADC ; set ADC port as input
|
||||||
|
|
||||||
|
ldi r16, (1<<ADLAR) | (1<<CNY70_ADCSRB_ADC) ; "8 bit" mode, disable digital pin input buffer
|
||||||
|
out ADCSRB, r16
|
||||||
|
|
||||||
|
sec
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CNY70_Fini:
|
||||||
|
sec
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CNY70_Run:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CNY70_Every100ms:
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
lds r16, cny70Flags
|
||||||
|
andi r16, CNY70_FLAGS_ADC_STARTED
|
||||||
|
brne CNY70_Every100ms_done
|
||||||
|
|
||||||
|
lds r16, cny70TimerCounter
|
||||||
|
inc r16
|
||||||
|
cpi r16, CNY70_TIMER_100MS
|
||||||
|
brcc CNY70_Every100ms_startConversion
|
||||||
|
sts cny70TimerCounter, r16
|
||||||
|
rjmp CNY70_Every100ms_done
|
||||||
|
|
||||||
|
CNY70_Every100ms_startConversion:
|
||||||
|
clr r16
|
||||||
|
sts cny70TimerCounter, r16
|
||||||
|
rcall cny70StartConversion
|
||||||
|
CNY70_Every100ms_done:
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cny70StartConversion:
|
||||||
|
sbi CNY70_PORT_LED, CNY70_PINNUM_LED ; LED on
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
nop
|
||||||
|
; setup adc
|
||||||
|
ldi r16, CNY70_MUX_ADC
|
||||||
|
out ADMUX, r16
|
||||||
|
; enable adc, enable irq, clear irq, select prescaler 8 (125kHz)
|
||||||
|
ldi r16, (1<<ADEN) | (1<<ADIE) | (1<<ADIF) | (1<<ADPS1) | (1<<ADPS0)
|
||||||
|
out ADCSRA, r16
|
||||||
|
|
||||||
|
sbic ADCSRA, ADSC ; start conversion
|
||||||
|
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
cli
|
||||||
|
lds r16, cny70Flags
|
||||||
|
ori r16, CNY70_FLAGS_ADC_STARTED
|
||||||
|
andi r16, ~CNY70_FLAGS_ADC_FINISHED
|
||||||
|
sts cny70Flags, r16
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cny70Isr:
|
||||||
|
push r15
|
||||||
|
in r15, SREG
|
||||||
|
push r16
|
||||||
|
cbi CNY70_PORT_LED, CNY70_PINNUM_LED ; LED off
|
||||||
|
in r16, ADCH
|
||||||
|
sts cny70LastData, r16 ; store value
|
||||||
|
clr r16 ; disable ADC
|
||||||
|
out ADCSRA, r16
|
||||||
|
lds r16, cny70Flags
|
||||||
|
ori r16, CNY70_FLAGS_ADC_FINISHED | CNY70_FLAGS_ADC_VALID
|
||||||
|
andi r16, ~CNY70_FLAGS_ADC_STARTED
|
||||||
|
sts cny70Flags, r16
|
||||||
|
pop r16
|
||||||
|
out SREG, r15
|
||||||
|
pop r15
|
||||||
|
reti
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
CNY70_SendAdc:
|
||||||
|
lds r16, cny70Flags
|
||||||
|
andi r16, CNY70_FLAGS_ADC_VALID
|
||||||
|
brne CNY70_SendAdc_haveValue
|
||||||
|
sec
|
||||||
|
ret
|
||||||
|
CNY70_SendAdc_haveValue:
|
||||||
|
ldi r16, 0xff ; destination address
|
||||||
|
ldi r17, VALUE_ID_ADC ; value id
|
||||||
|
ldi r22, AQHOME_VALUETYPE_UNKNOWN
|
||||||
|
lds r18, cny70LastData ; value
|
||||||
|
clr r19
|
||||||
|
ldi r20, 1 ; denominator
|
||||||
|
clr r21
|
||||||
|
ldi xl, LOW(com2SendBuffer)
|
||||||
|
ldi xh, HIGH(com2SendBuffer)
|
||||||
|
rcall CPRO_WriteValue
|
||||||
|
rjmp COM2_SendPacket
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user