158 lines
2.9 KiB
Plaintext
158 lines
2.9 KiB
Plaintext
;;********************************************************************************
|
|
;; @file
|
|
;; @brief DHT22 driver (WIP)
|
|
;; @ingroup driver
|
|
;; @details
|
|
;; @depends IO-W65C22N
|
|
;;
|
|
;;********************************************************************************
|
|
|
|
;;TODO EVERYTHING
|
|
;DHT_REQUEST_L = $00
|
|
;DHT_REQUEST_H = %01010000 ; = 20480 PHI2 pulses = 20,5 ms at 1 MHz
|
|
|
|
;DHT_RECV_H = %10011100
|
|
;DHT_RECV_L = %01000000 ; = 40000 PHI2 = 40ms
|
|
|
|
;; Status Variables, Used to determine what is sent by temp module
|
|
;DHT_STATUS = $400
|
|
;DHT_NONE = 0
|
|
;DHT_WAIT_REQ = 1
|
|
;DHT_WAIT_RESP = 2
|
|
;DHT_RECV = 3
|
|
;DHT_DONE = 4
|
|
|
|
;DHT_BIT = $401
|
|
;DHT_BIT_ROT = $402
|
|
|
|
|
|
;DHT_VALUES = $405 ;
|
|
;DHT_OFFSET = $403
|
|
;DHT_OFF_RH_HIGH = 0 ; offsets to DHT_VALUES
|
|
;DHT_OFF_RH_LOW = 1
|
|
;DHT_OFF_T_HIGH = 2
|
|
;DHT_OFF_T_LOW = 3
|
|
;DHT_OFF_CHECKSUM = 4
|
|
;DHT_OFF_DONE = 5
|
|
|
|
|
|
;message_dht: .asciiz "DHT-Request gesendet."
|
|
;dht_wait:
|
|
; ldx #$00
|
|
;dht_wait_:
|
|
; lda message_dht,x
|
|
; sta TO_PRINT,x
|
|
; inx
|
|
; bne dht_wait_
|
|
; jsr lcd_print_clear
|
|
;dht_wait_loop: ; check after every interrpt if dht program is done and then return home
|
|
; lda #'.'
|
|
; jsr _lcd::print_char
|
|
; wai
|
|
; lda DHT_STATUS
|
|
; cmp #DHT_DONE
|
|
; bne dht_wait_loop
|
|
|
|
;dht_exit:
|
|
; jsr kb_read
|
|
; cmp #'*'
|
|
; jeq home
|
|
; bra dht_exit
|
|
; jmp return_home
|
|
|
|
;dht_request: ; send request to sensor
|
|
; sei
|
|
|
|
; lda #%00000001 ; set PA1-0 to output 0
|
|
; ora IO2 + IO_DDRA
|
|
; sta IO2 + IO_DDRA
|
|
; lda #(LCD_CLEAR | $00)
|
|
; sta IO2 + IO_RA
|
|
|
|
; ; start timer
|
|
; lda #DHT_REQUEST_L
|
|
; sta IO2 + IO_T1CL
|
|
; lda #DHT_REQUEST_H
|
|
; sta IO2 + IO_T1CH
|
|
|
|
; lda #DHT_WAIT_REQ
|
|
; sta DHT_STATUS
|
|
|
|
; cli
|
|
; jmp dht_wait
|
|
|
|
|
|
;dht_request_end:
|
|
; lda #%10000010
|
|
; sta IO2 + IO_IER ; enable Interrupt for CA1
|
|
; lda #%11111110
|
|
; and IO2 + IO_DDRA
|
|
; sta IO2 + IO_DDRA ; set PA1-0 to input
|
|
|
|
; lda #DHT_WAIT_RESP
|
|
|
|
|
|
|
|
;dht_response: ; receive response from sensor
|
|
; lda #DHT_RECV
|
|
; sta DHT_STATUS
|
|
; stz DHT_OFFSET
|
|
; lda #7
|
|
; sta DHT_BIT
|
|
|
|
;dht_recv:
|
|
; ; start timer
|
|
; lda #DHT_RECV_L
|
|
; sta IO2 + IO_T1CL
|
|
; lda #DHT_RECV_H
|
|
; sta IO2 + IO_T1CH
|
|
; rts
|
|
|
|
;dht_recv_read:
|
|
; ; read PA2
|
|
; lda IO2 + IO_RA
|
|
; and #%00000001
|
|
; ldx DHT_BIT
|
|
; beq dht_recv_end
|
|
;dht_recv_rot:
|
|
; rol
|
|
; dex
|
|
; bne dht_recv_rot
|
|
;dht_recv_end:
|
|
; ldy DHT_OFFSET
|
|
; ora DHT_VALUES,y
|
|
; sta DHT_VALUES,y
|
|
; ; determine if 8 bits are done
|
|
; ldx DHT_BIT
|
|
; beq dht_recv_next
|
|
; rts
|
|
;dht_recv_next:
|
|
; lda #7
|
|
; sta DHT_BIT
|
|
; inc DHT_OFFSET
|
|
; cmp DHT_OFF_DONE
|
|
; beq dht_display
|
|
; rts
|
|
|
|
;dht_display:
|
|
; ldx #0
|
|
;dht_display_:
|
|
; lda DHT_VALUES,x
|
|
; sta TO_PRINT,x
|
|
; inx
|
|
; cpx #5
|
|
; bne dht_display_
|
|
; jsr lcd_print_clear
|
|
; rts
|
|
|
|
;dht_irq:
|
|
; lda DHT_STATUS
|
|
; cmp #DHT_WAIT_REQ
|
|
; beq dht_request_end
|
|
; cmp #DHT_WAIT_RESP
|
|
; beq dht_response
|
|
; cmp #DHT_RECV
|
|
; beq dht_recv
|
|
; rts
|
|
|