Commit 548e07d3 authored by Jan Pospisil's avatar Jan Pospisil

added OneWire function (not working yet); added calculation for pulse configuration

parent 811d92b0
......@@ -21,7 +21,7 @@ class ConColors:
m = encoreio.Module.get_instance('fmc_fpg', 0)
WB_DEBUG = True
WB_DEBUG_2_SV = True
WB_DEBUG_2_SV = False
WB_DEBUG_2_SV_FILE = 'wb_trace.svh'
###################################################################
......@@ -370,6 +370,79 @@ def Debug():
PrintBits(debug, 0, 2, "CH1 FSM state", ("Stop", "WaitForTrigger", "Generating", "Outputting"))
PrintBits(debug, 3, 5, "CH2 FSM state", ("Stop", "WaitForTrigger", "Generating", "Outputting"))
###################################################################
## OneWire stuff
###################################################################
OW_CMD_ROM_SEARCH = 0xF0
OW_CMD_ROM_READ = 0x33
OW_CMD_ROM_MATCH = 0x55
OW_CMD_ROM_SKIP = 0xCC
OW_CMD_ALARM_SEARCH = 0xEC
OW_CMD_CONVERT_T = 0x44
OW_CMD_WRITE_SCRATCHPAD = 0x4E
OW_CMD_READ_SCRATCHPAD = 0xBE
OW_CMD_COPY_SCRATCHPAD = 0x48
OW_CMD_RECALL_E_2 = 0xB8
OW_CMD_READ_POWER_SUPPLY = 0xB4
# overdrive: 0 - normal mode / 1 - overdrive mode
def OneWireReset(overdrive = 0):
print 'OW: reset'
WbWrite('onewire_ctrl_sta', 0x08 | (overdrive << 2) | 0x02)
reg = WbRead('onewire_ctrl_sta')
while (0x08 & reg):
reg = WbRead('onewire_ctrl_sta')
reg &= 0x01
print 'OW: presence = '+str(reg)
return reg
def OneWireSlot(bit, overdrive = 0):
WbWrite('onewire_ctrl_sta', 0x08 | (overdrive << 2) | bit)
reg = WbRead('onewire_ctrl_sta')
while (0x08 & reg):
reg = WbRead('onewire_ctrl_sta')
return reg & 0x01
def OneWireReadBit(overdrive = 0):
result = OneWireSlot(overdrive, 1)
print 'OW: read bit = '+str(result)
return result
def OneWireWriteBit(bit, overdrive = 0):
print 'OW: write bit('+str(bit)+')'
OneWireSlot(overdrive, bit)
def OneWireRead(overdrive = 0):
result = 0;
for i in range(8):
result |= OneWireReadBit(overdrive)
result <<= 1
print 'OW: read = '+hex(result)
return result
def OneWireWrite(byte, overdrive = 0):
print 'OW: write('+hex(byte)+')'
for i in range(8):
OneWireWriteBit(byte & 1, overdrive)
byte >>= 1
def OneWireReadRom(overdrive = 0):
presence = OneWireReset(overdrive)
if presence == 0:
print 'OW Thermometer is not present!'
return
OneWireWrite(OW_CMD_ROM_READ, overdrive)
print hex(OneWireRead())
print hex(OneWireRead())
print hex(OneWireRead())
print hex(OneWireRead())
print hex(OneWireRead())
print hex(OneWireRead())
print hex(OneWireRead())
print hex(OneWireRead())
###################################################################
## Test functions
###################################################################
......@@ -383,10 +456,25 @@ def Init(memoryPart = -1):
SetVcxoFrequency(-0.2105) # 125.0000 MHz
ClearMemory(0, '*', memoryPart)
# time 't' is in [ns] - same as other times
# output: (bit, delay)
# bit - position of the bit to set
# delay - delay parameter to be set
def CalculateParams(t):
rfPeriod = 4.99
delayOffset = 3.739
bit = int(t/rfPeriod) # bit position
rest = t - bit * rfPeriod # in ns
rest += delayOffset
delay = int(round(rest * 100)) # delay IC value
return (bit, delay)
def TestPulse(channel = 1, overflow = 17820):
# configure channel
WbWrite('overflow', overflow)
WbWrite('trig_latency', 8)
WbWrite('trig_latency', 11)
# start = 5
# length = 20
......@@ -407,25 +495,40 @@ def TestPulse(channel = 1, overflow = 17820):
# CreatePulse(channel, 13, 23)
# CreatePulse(channel, 14, 24)
CreatePulse(channel, 5, 10)
CreatePulse(channel, 20, 50)
CreatePulse(channel, 100, 300)
# CreatePulse(channel, 5, 10)
# CreatePulse(channel, 20, 50)
# CreatePulse(channel, 100, 300)
# all times in ns
pulseDelay = 4.87
pulseWidth = 12.3
(setBit, setDelay) = CalculateParams(pulseDelay)
(resBit, resDelay) = CalculateParams(pulseDelay + pulseWidth)
CreatePulse(channel, setBit, resBit)
WbWrite('ch'+str(channel)+'_delay_set', 100)
WbWrite('ch'+str(channel)+'_delay_res', 500)
WbWrite('ch'+str(channel)+'_delay_set', setDelay)
WbWrite('ch'+str(channel)+'_delay_res', resDelay+18)
Enable(channel)
StartOnce(channel)
Start(channel)
Init(15)
# Init(15)
Init()
Control()
Status()
TestPulse(1, 400)
# TestPulse(1, 600)
TestPulse(1)
# TestPulse(2)
Control()
Status()
Debug()
# OneWireReadRom(1) # does not work :/
###################################################################
## debug ending
###################################################################
......@@ -434,3 +537,4 @@ if WB_DEBUG_2_SV:
WB_DEBUG_2_SV_FP.write('\n')
WB_DEBUG_2_SV_FP.write('$display("Error count: %0d\\n", errors);\n')
WB_DEBUG_2_SV_FP.close()
WB_DEBUG_2_SV = False
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment