parent
85058fcf29
commit
634093507f
@ -0,0 +1,43 @@ |
|||||||
|
import gex |
||||||
|
|
||||||
|
CMD_SET_FREQUENCY = 0 |
||||||
|
CMD_SET_DUTY = 1 |
||||||
|
CMD_STOP = 2 |
||||||
|
CMD_START = 3 |
||||||
|
|
||||||
|
class PWMDim(gex.Unit): |
||||||
|
""" |
||||||
|
Simple 4-channel PWM output with a common frequency |
||||||
|
""" |
||||||
|
|
||||||
|
def _type(self): |
||||||
|
return 'PWMDIM' |
||||||
|
|
||||||
|
def set_frequency(self, hertz:int, confirm=True): |
||||||
|
""" Set freq """ |
||||||
|
pb = gex.PayloadBuilder() |
||||||
|
pb.u32(hertz) |
||||||
|
self._send(CMD_SET_FREQUENCY, pb.close(), confirm=confirm) |
||||||
|
|
||||||
|
def set_duty(self, duty_dict, confirm=True): |
||||||
|
""" Set duty (dict - number1234 -> duty 0-1000) """ |
||||||
|
pb = gex.PayloadBuilder() |
||||||
|
|
||||||
|
for (k,v) in enumerate(duty_dict): |
||||||
|
pb.u8(k-1) |
||||||
|
pb.u16(v) |
||||||
|
|
||||||
|
self._send(CMD_SET_DUTY, pb.close(), confirm=confirm) |
||||||
|
|
||||||
|
def set_duty_single(self, ch1234, duty1000, confirm=True): |
||||||
|
""" Set duty of a single channel """ |
||||||
|
pb = gex.PayloadBuilder() |
||||||
|
pb.u8(ch1234-1) |
||||||
|
pb.u16(duty1000) |
||||||
|
self._send(CMD_SET_DUTY, pb.close(), confirm=confirm) |
||||||
|
|
||||||
|
def stop(self, confirm=True): |
||||||
|
self._send(CMD_STOP, confirm=confirm) |
||||||
|
|
||||||
|
def start(self, confirm=True): |
||||||
|
self._send(CMD_START, confirm=confirm) |
@ -0,0 +1,66 @@ |
|||||||
|
#!/bin/env python3 |
||||||
|
import time |
||||||
|
|
||||||
|
import gex |
||||||
|
|
||||||
|
with gex.Client(gex.TrxRawUSB()) as client: |
||||||
|
ow = gex.OneWire(client, 'ow') |
||||||
|
# print("Presence: ", ow.test_presence()) |
||||||
|
print("Devices:", ow.search()) |
||||||
|
|
||||||
|
def meas(addr): |
||||||
|
ow.write([0x44], addr=addr) |
||||||
|
ow.wait_ready() |
||||||
|
data = ow.query([0xBE], 9, addr=addr) |
||||||
|
pp = gex.PayloadParser(data) |
||||||
|
return pp.i16() * 0.0625 |
||||||
|
|
||||||
|
while True: |
||||||
|
a = meas(6558392391241695016) |
||||||
|
b = meas(1802309978572980008) |
||||||
|
print("in: %.2f °C, out: %f °C" % (a, b)) |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# # search the bus for alarm |
||||||
|
# if False: |
||||||
|
# ow = gex.OneWire(client, 'ow') |
||||||
|
# print("Presence: ", ow.test_presence()) |
||||||
|
# print("Devices w alarm:", ow.search(alarm=True)) |
||||||
|
# |
||||||
|
# # simple 1w check |
||||||
|
# if False: |
||||||
|
# ow = gex.OneWire(client, 'ow') |
||||||
|
# print("Presence: ", ow.test_presence()) |
||||||
|
# print("ROM: 0x%016x" % ow.read_address()) |
||||||
|
# print("Scratch:", ow.query([0xBE], rcount=9, addr=0x7100080104c77610, as_array=True)) |
||||||
|
# |
||||||
|
# # testing ds1820 temp meas without polling |
||||||
|
# if False: |
||||||
|
# ow = gex.OneWire(client, 'ow') |
||||||
|
# print("Presence: ", ow.test_presence()) |
||||||
|
# print("Starting measure...") |
||||||
|
# ow.write([0x44]) |
||||||
|
# time.sleep(1) |
||||||
|
# print("Scratch:", ow.query([0xBE], 9)) |
||||||
|
# |
||||||
|
# # testing ds1820 temp meas with polling |
||||||
|
# if False: |
||||||
|
# ow = gex.OneWire(client, 'ow') |
||||||
|
# print("Presence: ", ow.test_presence()) |
||||||
|
# print("Starting measure...") |
||||||
|
# ow.write([0x44]) |
||||||
|
# ow.wait_ready() |
||||||
|
# data = ow.query([0xBE], 9) |
||||||
|
# |
||||||
|
# pp = gex.PayloadParser(data) |
||||||
|
# |
||||||
|
# temp = pp.i16()/2.0 |
||||||
|
# th = pp.i8() |
||||||
|
# tl = pp.i8() |
||||||
|
# reserved = pp.i16() |
||||||
|
# remain = float(pp.u8()) |
||||||
|
# perc = float(pp.u8()) |
||||||
|
# |
||||||
|
# realtemp = temp - 0.25+(perc-remain)/perc |
||||||
|
# print("Temperature = %f °C (th %d, tl %d)" % (realtemp, th, tl)) |
@ -0,0 +1,45 @@ |
|||||||
|
import time |
||||||
|
|
||||||
|
import gex |
||||||
|
|
||||||
|
C3 = 130.81; Cx3 = 138.59; D3 = 146.83; Dx3 = 155.56; E3 = 164.81; F3 = 174.61 |
||||||
|
Fx3 = 185.00; G3 = 196.00; Gx3 = 207.65; A3 = 220.00; Ax3 = 233.08; B3 = 246.94 |
||||||
|
C4 = 261.63; Cx4 = 277.18; D4 = 293.66; Dx4 = 311.13; E4 = 329.63; F4 = 349.23 |
||||||
|
Fx4 = 369.99; G4 = 392.00; Gx4 = 415.30; A4 = 440.00; Ax4 = 466.16; B4 = 493.88 |
||||||
|
C5 = 523.25; Cx5 = 554.37; D5 = 587.33; Dx5 = 622.25; E5 = 659.25; F5 = 698.46 |
||||||
|
Fx5 = 739.99; G5 = 783.99; Gx5 = 830.61; A5 = 880.00; Ax5 = 932.33; B5 = 987.77 |
||||||
|
|
||||||
|
with gex.Client(gex.TrxRawUSB()) as client: |
||||||
|
pwm = gex.PWMDim(client, 'dim') |
||||||
|
|
||||||
|
# O O/ #/ #~ #= |
||||||
|
# 16, 8, 4, 2, 1 |
||||||
|
notes = [ |
||||||
|
(G3, 2), |
||||||
|
(G4, 2), (E4, 6), (G4, 2), (E4, 2), (A4, 6), (0, 2), (B4, 2), |
||||||
|
(G4, 2), (E4, 6), (A4, 2), (G4, 2), (D4, 6), (0, 2), (G3, 2), |
||||||
|
|
||||||
|
(G4, 2), (E4, 6), (D4, 2), (C4, 2), (C5, 6), (0, 2), (A4, 2), |
||||||
|
(G4, 2), (E4, 4), (0, 2), (D4, 2), (A3, 2), (C4, 6), (0, 2), (G3, 2), |
||||||
|
|
||||||
|
#rep |
||||||
|
(G4, 2), (E4, 6), (G4, 2), (E4, 2), (A4, 6), (0, 2), (B4, 2), |
||||||
|
(G4, 2), (E4, 6), (A4, 2), (G4, 2), (D4, 6), (0, 2), (G3, 2), |
||||||
|
|
||||||
|
(G4, 2), (E4, 6), (D4, 2), (C4, 2), (C5, 6), (0, 2), (A4, 2), |
||||||
|
|
||||||
|
(G4, 2), (E4, 6), (D4, 2), (A3, 2), (C4, 6), (0, 2), #(C4, 2), |
||||||
|
] |
||||||
|
|
||||||
|
for p in notes: |
||||||
|
pwm.stop() |
||||||
|
time.sleep(0.01) |
||||||
|
f = round(p[0]) |
||||||
|
print(f) |
||||||
|
if f > 0: |
||||||
|
pwm.set_frequency(f) |
||||||
|
pwm.start() |
||||||
|
time.sleep(0.1*p[1]) |
||||||
|
|
||||||
|
pwm.stop() |
||||||
|
|
@ -0,0 +1,15 @@ |
|||||||
|
import time |
||||||
|
|
||||||
|
import gex |
||||||
|
|
||||||
|
with gex.Client(gex.TrxRawUSB()) as client: |
||||||
|
pwm = gex.PWMDim(client, 'dim') |
||||||
|
|
||||||
|
pwm.start() |
||||||
|
pwm.set_duty_single(1, 500) |
||||||
|
for i in range(2000, 200, -15): |
||||||
|
pwm.set_frequency(i) |
||||||
|
time.sleep(0.05) |
||||||
|
|
||||||
|
pwm.stop() |
||||||
|
|
Loading…
Reference in new issue