Author | Rob Jansen, Copyright © 2018..2018, all rights reserved. |
Adapted-by | |
Compiler | 2.4q6 |
This is the receive only version of Virtual_Wire, see the file virtual_wire.jal for all changes compared to the original Virtual_Wire library and more information.
http://www.airspayce.com/mikem/arduino/VirtualWire.pdf
-
No dependency found
const byte VW_RAMP_INC_ADVANCE = (VW_RAMP_INC + VW_RAMP_ADJUST)
var byte vw_rx_count = 0
const byte VW_RAMP_TRANSITION = VW_RX_RAMP_LEN/2
var word vw_rx_bits = 0
var word data_2
const byte VW_SPEED_2000 = 125
const byte VW_RX_SAMPLES_PER_BIT = 8
const byte VW_MAX_PAYLOAD = VW_MAX_MESSAGE_LEN - 3
var byte vw_rx_integrator = 0
var bit vw_rx_sample = false
const byte VW_RAMP_INC = (VW_RX_RAMP_LEN/VW_RX_SAMPLES_PER_BIT)
const byte VW_RAMP_ADJUST = 9
const byte symbols_d[] =
var bit vw_rx_last_sample = false
const byte VW_SPEED_1000 = 250
const byte VW_RX_RAMP_LEN = 160
var bit vw_rx_active = FALSE
var byte vw_rx_bit_count = 0
const byte VW_RAMP_INC_RETARD = (VW_RAMP_INC - VW_RAMP_ADJUST)
var byte vw_rx_return_buf[VW_MAX_PAYLOAD]
var bit vw_rx_done = FALSE
var byte this_byte
var byte vw_tx_rx_buf[VW_MAX_MESSAGE_LEN * 2]
var byte vw_rx_len = 0
var bit vw_rx_enabled = FALSE
var byte vw_rx_pll_ramp = 0
const byte VW_RAMP_INC_ADVANCE = (VW_RAMP_INC + VW_RAMP_ADJUST)
Internal ramp adjustment parameter
var byte vw_rx_count = 0
The incoming message expected length
const byte VW_RAMP_TRANSITION = VW_RX_RAMP_LEN/2
Internal ramp adjustment parameter
var word vw_rx_bits = 0
Last 12 bits received, so we can look for the start symbol
var word data_2
No documentation found
const byte VW_SPEED_2000 = 125
2000 bits/second
const byte VW_RX_SAMPLES_PER_BIT = 8
Number of samples per bit.
const byte VW_MAX_PAYLOAD = VW_MAX_MESSAGE_LEN - 3
The maximum payload length, count (1) and FCS (2) must be subtracted.
var byte vw_rx_integrator = 0
This is the integrate and dump integral. If there are <5 0 samples in the PLL cycle the bit is declared a 0, else a 1
var bit vw_rx_sample = false
Current receiver sample
const byte VW_RAMP_INC = (VW_RX_RAMP_LEN/VW_RX_SAMPLES_PER_BIT)
Ramp adjustment parameters Standard is if a transition occurs before VW_RAMP_TRANSITION (80) in the ramp, the ramp is retarded by adding VW_RAMP_INC_RETARD (11) else by adding VW_RAMP_INC_ADVANCE (29) If there is no transition it is adjusted by VW_RAMP_INC (20) Internal ramp adjustment parameter
const byte VW_RAMP_ADJUST = 9
Internal ramp adjustment parameter
const byte symbols_d[] =
Conversion table for 6 to 4 symbol decoding using a lookup table. We only need to indicate the values from the encoding table. Without lookup table the conversion would take too long.
var bit vw_rx_last_sample = false
Last receivers sample.
const byte VW_SPEED_1000 = 250
Selection of bitrates.
const byte VW_RX_RAMP_LEN = 160
The size of the receiver ramp. Ramp wraps modulo this number
var bit vw_rx_active = FALSE
Flag indicates if we have seen the start symbol of a new message and are in the processes of reading and decoding it
var byte vw_rx_bit_count = 0
How many bits of message we have received. Ranges from 0 to 12
const byte VW_RAMP_INC_RETARD = (VW_RAMP_INC - VW_RAMP_ADJUST)
Internal ramp adjustment parameter
var byte vw_rx_return_buf[VW_MAX_PAYLOAD]
The buffer to copy the return message to for the main program. This buffer is smaller than the combined vw_tx_rx_buf since it only holds data no symbol.s
var bit vw_rx_done = FALSE
Flag to indicate that a new message is available
var byte this_byte
No documentation found
var byte vw_tx_rx_buf[VW_MAX_MESSAGE_LEN * 2]
Transmit and receive buffer. The symbol buffer for transmission is combined with the data buffer for reception.
var byte vw_rx_len = 0
The incoming message buffer length received so far
var bit vw_rx_enabled = FALSE
Flag to indicate the receiver PLL is to run
var byte vw_rx_pll_ramp = 0
PLL ramp, varies between 0 and VW_RX_RAMP_LEN-1 (159) over VW_RX_SAMPLES_PER_BIT (8) samples per nominal bit time. When the PLL is synchronised, bit transitions happen at about the 0 mark.
vw_rx_start()
Enable the receiver. When a message becomes available, vw_rx_done flag is set, and vw_wait_rx() will return.
vw_setup(byte in bitrate)
This procedure initialized the timer 0 that is used for creating the pulse time interrupt. This has to be VW_RX_SAMPLES_PER_BIT times the bit time.
vw_rx_stop()
Disable the receiver
timer2_interrupt()
This is the interrupt service routine called when timer1 overflows Its job is to output the next bit from the transmitter (every 8 calls) and to call the PLL code if the receiver is enabled
vw_wait_rx()
Wait for the receiver to get a message Busy-wait loop until the ISR says a message is available can then call vw_get_message()
_vw_pll()
Called 8 times per bit period by the timer interrupt routine Phase locked loop tries to synchronise with the transmitter so that bit transitions occur at about the time vw_rx_pll_ramp is 0 Then the average is computed over each bit period to deduce the bit value
_vw_timer_setup(byte in bitrate)
Intialize Timer 2 to generate the RF bit time.
vw_have_message() return bit
Return true if there is a message available
vw_get_message(byte in out len) return bit
Get the last message received (without byte count or FCS) Copy at most *len bytes, set *len to the actual number copied Return true if there is a message and the FCS is OK The data is copied to a receive buffer.
_vw_calc_crc(word in crc, byte in data) return word
Calculate new crc over given data. Formula is: Xexp16 + Xexp12 + Xexp5 + 1
16f1825 | 16f1825_virtual_wire_receiver.jal |