1+ '''
2+ Created on Apr 28, 2024
3+
4+ @author: Pat Deegan
5+ @copyright: Copyright (C) 2024 Pat Deegan, https://psychogenic.com
6+ '''
7+
8+ from ttboard .demoboard import DemoBoard
9+ from ttboard .mode import RPMode
10+ from ttboard .pins .pins import Pins
11+
12+ import ttboard .logging as logging
13+ log = logging .getLogger (__name__ )
14+
15+ import ttboard .util .time as time
16+
17+
18+ def die_on_error (msg :str ):
19+ log .error (msg )
20+ return False
21+
22+ def run (tt :DemoBoard , loops :int = 2 , note_delay_ms :int = 2000 ):
23+
24+ if not tt .shuttle .has ('tt_um_psychogenic_neptuneproportional' ):
25+ return die_on_error ("This chip doesn't got neptune on-board!" )
26+
27+ if tt .user_config .has_section ('tt_um_psychogenic_neptuneproportional' ):
28+ log .info ('Found a neptune section in config--letting it handle things' )
29+ else :
30+ log .info ('No neptune section in config--doing it manual style' )
31+ tt .mode = RPMode .ASIC_RP_CONTROL
32+ tt .reset_project (True ) # hold in reset, in case something else is loaded
33+ # input byte
34+ # clock speed is lower bits, input comes on in5
35+ # display mode single/control are bits 6 and 7
36+ tt .input_byte = 0b11001000
37+ tt .clock_project_PWM (4000 )
38+ tt .bidir_mode = [Pins .IN ]* 8
39+
40+ tt .shuttle .tt_um_psychogenic_neptuneproportional .enable ()
41+ tt .reset_project (False ) # start her up
42+
43+ notes = [
44+ ('E2' , 83 ),
45+ ('A2' , 110 ),
46+ ('D3' , 146 ),
47+ ('E3' , 83 * 2 ),
48+ ('G3' , 196 ),
49+ ('A3' , 220 ),
50+ ('B3' , 247 ),
51+ ('D4' , 146 * 2 ),
52+ ('E4' , 330 ),
53+ ('G4' , 196 * 2 ),
54+ ]
55+
56+ pwm = tt .in5 .pwm (10 )
57+ for _i in range (loops ):
58+ for n in notes :
59+ pwm .freq (n [1 ])
60+ print (f'"Playing" a note: { n [0 ]} ({ n [1 ]} Hz)' )
61+ for _j in range (3 ):
62+ time .sleep_ms (int (note_delay_ms / 3 ))
63+ reported_count = tt .bidir_byte
64+ ratio = n [1 ]/ reported_count
65+ print (f' Bidir count: { reported_count } (ratio { ratio :.1f} ), Outputs { hex (tt .output_byte )} ' )
66+
67+
68+
69+ pwm .deinit () # shut that down
70+ tt .in5 (0 ) # bring low
71+
72+
0 commit comments