Browse Source

control/README.md : Initial commit.

master
kevin 4 years ago
parent
commit
fa39953cc4
1 changed files with 83 additions and 0 deletions
  1. 83
    0
      control/README.md

+ 83
- 0
control/README.md View File

@@ -0,0 +1,83 @@
1
+This folder contains the _picadae_ control code.
2
+
3
+The _picadae_ control program consists of three parts:
4
+
5
+- _tiny_ : Keyboard solenoid driver
6
+- _ctrl_ : Keyboard central controller
7
+- _app_  : Monitor and command utility.
8
+
9
+# Architecture
10
+
11
+The keyboard control hardware consists of 8 driver boards
12
+mounted above the solenoids on the keyboard assembly.
13
+Each driver board has 11 key driver circuits and can
14
+therefore control 11 piano keys. Each key driver
15
+circuit consists of an ATtiny85 microcontroller
16
+which controls a set of power transistors
17
+which in turn control the state of the solenoid.
18
+The solenoid can be in one of three states:
19
+
20
+- off
21
+- attack
22
+- hold 
23
+
24
+The attack state is triggered by pulsing the 
25
+the solenoid with a fast (250 microsecond to
26
+30 millisecond) 36 volt pulse. The duration
27
+of the pulse determines the attack dynamic.
28
+The hold state then holds the key down
29
+during the sustain portion of the note.
30
+
31
+All 88 ATtiny85 microncontrollers are attached
32
+to a single I2C bus which is shared with
33
+an Arduino Uno.  The application computer
34
+communicate with the Uno via 
35
+a serial connection. The Uno in turn
36
+translates messages between the 
37
+ATtiny85 channel computers and the
38
+application computer.
39
+
40
+# Keyboard central controller : Arduino Uno Serial Interface
41
+
42
+Read a register value of `<count>` bytes from channel `<i2c-addr>`
43
+
44
+    'r' <i2c-addr> <register> <count>
45
+	
46
+Write a register value of `<count>` bytes from channel `<i2c-addr>`
47
+
48
+	'w' <i2c-addr> <register> <count> <value-0> <value-1> ... <value-n>
49
+
50
+
51
+# Keyboard solenoid driver : ATtiny85 Firmware
52
+
53
+
54
+PWM counter frequency and period.
55
+for each possible `div` setting
56
+with 16 Mhz system clock.
57
+
58
+Value | Div  | Frequency   | Period
59
+------|------|-------------|-------
60
+ 1    |    1 |    16    M  | 62.5 n 
61
+ 2    |    2 |     8    M  |  125 n
62
+ 3    |    4 |     4    M  |  250 n
63
+ 4    |    8 |     2    M  |  500 n
64
+ 5    |   16 |     1    M  |    1 u
65
+ 6    |   32 |   500    K  |    2 u
66
+ 7    |   64 |   250    K  |    4 u
67
+ 8    |  128 |   125    K  |    8 u
68
+ 9    |  256 | 62500    Hz |   16 u
69
+10    |  512 | 31250    Hz |   32 u
70
+11    | 1024 | 15625    Hz |   64 u
71
+12    | 2048 | 7812.5   Hz |  128 u
72
+13    | 4096 | 3906.25  Hz |  256 u
73
+14    | 8192 | 1953.125 Hz |  512 u
74
+15    |16384 | 976.6625 Hz | 1024 u 
75
+
76
+
77
+# Monitor and command utility : Python Utility
78
+
79
+
80
+
81
+
82
+
83
+

Loading…
Cancel
Save