summaryrefslogtreecommitdiffstats
path: root/keyboard/hhkb_rn42/MEMO.txt
blob: f2aaa7c0462b5220c23c7c157bd1da961ebe7966 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
Roving RN-42
============

Bug:
- with Nexus5 keyboard and mouse are very laggy.

- lose USB connection during power-down mode - DONE
    - USB initialize code in main() causes this - WRONG
    - Do not power-down during USB connection is active - DONE 11/11
        (USB_DeviceState == USB_DEVICE_Configured) is used to check USB connection
        matrix_power_down() matrix.c - 11/23

- When given power only from wall wart adapter
    - it sleeps. it should not sleep
    - Configured state without USB connection?

- timer is slow while power down - DONE 11/26
    - time out interrupt is lost while power down?
    - interrupt of watchdog timer compensates timer counter(avr/suspend.c)

- USB plug-in fails while BT
    - it ends in suspend state
    - maybe, not responsive to host enumeration process due to power-down.
    - matrix_power_down() only when state is unattached - 11/26
        - need to observe a while
- repeated CHARGING/FULL_CHARGED
    - In LTC sharp pulses are observed.
    - MCP has no pulse but still has a problem.
    - needs more wait before read pin state? - NO
- wrongly suspended when powered from adapter without USB connection - DONE
    - suspend event may occur when plug into adapter
    - and never wake until conected to real USB line
    - without debug print via USB no problem; CSW(wake just after suspend as real USB line)
    - seems like USB print causes this problem after suspended

- Factory Reset PIO4 doesn't work
    - the reason is unclear - 12/08 NOT LOOK INTO ANY MORE
    - WORKAROUND: use serial pins(3.3V, GND, RX and TX)
        - SF,1 and R,1 to set factory defalult
    

Todo:
- LED cover and switch knob and new Slide Switch
- RN42 auto configuration
    - configure the module as HID device every time powering up
    - this'll reduce work load of assembly

- move rn42 to protocol directory when it becomes reusable stack

- sendchar() in lufa.c no buffer
    - no buffering. character lost can be caused.
- LUFA sendchar should be buffered and serial_uart.c buffur size is too large(256).

- switch BT host connections
- BT operations
    - disconnect
    - new connection
    - switch next connection
    - remove connection

- sendchar() in lufa.c block loop   - DONE 11/29
    - block loop when powered with AC adapter
    - FrameNumber is not updated when adapter powered

Improving:
- ADC resolution
    AVR120
    AVR32138
    - Enhancing ADC resolution by oversampling
        AVR121  http://www.atmel.com/images/doc8003.pdf
    - disable digital input buffer DIDR(7.8.6)

Design:
- suspend.h - DONE 11/26
    - remove argument from suspend_power_down() for backward compatitibility
- remove MCU dependent power saving code from core/keyboard - DONE 11/23
    - it should be located in project matrix.c
- HHKB matrix.c needs matrix_prev?
    - is_modified() is obsolete now. really needs?
- ADC: removing AREF capacitor C10
    - seems to be better while usb powered
    - still bad while battery powered
    http://electronics.stackexchange.com/questions/105849/avcc-and-capacitor-using-adc
- ADC: smaller resistors for voltage dividor
    - 1K + 1K: not improved. - 11/27


LUFA:
USB connection check: state of USB deivce
- USB_DeviceState:
    USB_Deivce_State_t { Unattached, Powered, Default, Addressed, Configured*, Suspended* }
    Unattached: unpluged
    Powered:    pluged with power adapter
    Default:    enumerate process bigin
    Addressed:  addressed
    Configured: enumerated
    Suspended:  suspended

- USB_IsInitialized: state of LUFA core setup
    becomes true in USB_Init()  USBController_AVR8.c
    becomes false in USB_Disable()  USBController_AVR8.c
- USB_VBUS_GetStatus(): state of VBUS(power/connection)
- USB_Disable() detaches, disables all interrupts, controller, PLL, regulater.

- When connect to power adapter
    - event happened: CW or CSW or C or DDC
    - USB state: not configured

- USB evnets
    - USB connect: CSWRWRW
    - USB connect but fail to enumeration: CWRWRWRWS
    - USB disconnect: D
    - Power adapter connect: CW, CSW, C
    - Power adapter disconnect: D


Power saving:
- Pro2 current consumption
    - active: 138.2mA(no device on Hub)
    - suspended: 30.9mA(WakeUp enabled DIPSW6)
    - suspended: 0mA->46.0mA(WakeUp disabled DIPSW6)
- Pro current consumption
    - active: 54.0mA
    - suspended: 40.5mA(WakeUp enabled DIPSW6)
    - suspended: 0.3mA(WakeUp disabled DIPSW6)

- RN42 3.3V
    - disconnected(Idle): 5mA (config mode)
    - connected(Active):
        SW,0000:  23-26mA
        SW,0010:  27-29mA worse than 0000 for unknown reason
        SW,0020:  17-19mA mouse NG
        SW,0030:  13-16mA laggy mouse NG
        SW,0050:  10-13mA laggy mouse NG

- matrix power saving
    - power saving while externally powered and not while unpluged
- confirm suspend mode lufa.c: matrix_power_*, suspend_wakeup_condition
- 8MHz clock
- When not connected in a few minutes get into deep sleep to save battery life
- CTS is needed for waking up from deep sleep? How deep sleep is activated?
- firmware controlled 3.3V DC converter to switch on/off BT module
- sleep MCU and BT module(keyboard is not used)
- deep sleep MCU and BT module(keyboard is not used for long time)
- deep sleep MCU and turn off BT module(keyboard is not used and not connected)
- Battery ADC; switching, high resistance
    - switching gnd end of divider with PF4
    - high resistor 100K/1M?
        capacitor   10nF
        http://www.eevblog.com/forum/beginners/measuring-battery-voltage-without-consuming-current/
- During USB suspend change clock source to internal RC from external Xtal(6.8)
- FRZCLK: you can freeze clock for power saving. still WAKEUPI and VBUSTI interrupts are available while freezing.(21.7.3)
- Suspend: Clear Suspend Bit, Freeze clock, disable PLL, MCU sleep(21.13)
- Voltage reference(8.1.1)
    - to reduce power consumption while power down mode
- unset ADEN before sleep(24.7)







Lipo
----
850mA lasts around 9 hours(07/28)

Sparkfun Polymer Lithium Ion Battery 850mAh:
https://www.sparkfun.com/products/341
Lipo Cell spec:
https://www.sparkfun.com/datasheets/Batteries/063048%20Li-polymer.pdf
Protection spec:
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Prototyping/BatteryProtection.pdf
                                min     typical max
    over-charge                 4.255   4.280   4.305
    over-charge discover?       4.030   4.080   4.130
    over-discharge              2.827   2.900   2.973
    over-discharge discover     3.022   3.100   3.178

ADC voltage monitor:    voltage divider 10K+10K(0.5)
                        ADC=V*0.5/2.56*1024

    V       ADC
    ------------------
    4.20    0x347(839)
    3.10    0x26b(619)




TROUBLE SHOOT
-------------
07/16   After fix of voltage dividor on GPIO6, had a trouble that it could not send a char to BT module, though could receive.
        Found R8 had wrong 1K resistor and changed to 10K, after that it can send to the module again. Not sure how it had sent with the wrong 1K before.

07/18   On Linux, had an USB related trouble; keyobard or console didn't work for some reason. Changing PID cured this problem. Very annoying, took very long time before resolved it.

12/07   rn42_rts() read 1 every time. R12 broke in open mode(no coductive), idk why, too much heat with soldering? and PF1 pin was not soldered.
        It resolved with resoldering PF1 and new resistor on R12.




Done:
- low battery alert(solid light) 09/04
- *** Rev.E BT test *** - DONE
    - with MCP73832, new Schottky, tantalum caps - DONE 12/07
        * MCP73832 doesn't leak from Vcc pin when unpluged and battery powered
            34mV vs 2.07V(MCP73831) at Vcc pin
            MCP73832 doesn't need revese protection diode D5
        * PMEG2010ER is very low VF while reverse current/voltage is high
            VF=0.96 vs 1.98(RB160M-30TR)with Fluke 175
            Anode of D11 is 680mV vs 20mV(RB160M-30TR)
            780mV is still low < 1.4V VBUS plugin detection(21.11)
                this doesn't cause false VBUS detect
                and 780mV on MCP73832 Vcc pin is also no problem.
            D5 can be removed.
    - ADC divider switching - DONE 12/07
        * Drain and Source of Q4 Pch was reversed wrongly on Rev.E.

    - reverse current from Lipo charger - DONE 12/07
        * MCP73832 has no recverse current from Vcc pin unlike MCP73831


- Rev.F design - DONE
    - current measure point - DONE 12/08
    - change value of cap 68->47    - DONE 12/08
    - PPTC land pattern: no solder jumper, use 0Ohm resistor instead - CANCEL 12/08
    - Q4 Pch FET: wrong Drain and Source - DONE 12/08
    - D5 can be removed.    - DONE 12/08



- BT_INDICATOR LED turns on wrongly when touching line or pin.  -- pull-up enabled on PF6/GPIO2 08/30
- Lipo charger configuration: fast charge time:  USB charger spec? -- used 2kohm
- use LED of charger to alarm low battery. LED should be powered directly from Lipo? - cancel; powered from VUSB
- Use RTS in serial_uart.c to resolve missing chars from help message of RN-42 - done
- CTS/RTS lines are needed? just connect in loop back if no flow control is needed. - done
- add IO pin to charger status CHRG; LED control(low) and detect charge status(input HiZ) 07.24
- LINKED: add trace on PIO2 to PF6   07.24
- Lipo voltage ADC sensing
- Lipo charger MCP73831: needs capacitor 4.7uF *2
- USB connection check - 07.01
- BT on/off check: whether RX line is pulled up? - checking RTS 07.01
- USB/BT switching  BT is on -> BT, BT is off -> USB - 07.01
- Under voltage lock out UVLO for protection of Lipo - Lipo has discharge protection at 3.100V    07.01
- Power saving: HHKB scan, BT radio control - 9h with 850mAh, this is enough   07.01
- Power selector doesn't work; Q4 MOSFET leaks from Lipo to USB power line. -- use Schottky instead 07/04