Debugging kishsaver.
- Hardcoded strobe lines (required to make the hardware less noisy) - Updated debug code
This commit is contained in:
parent
4ce6d34cd8
commit
a108dbbbc3
@ -274,7 +274,7 @@ void dumpkeys( void );
|
|||||||
void recovery( uint8_t on );
|
void recovery( uint8_t on );
|
||||||
|
|
||||||
int sampleColumn ( uint8_t column );
|
int sampleColumn ( uint8_t column );
|
||||||
int sampleColumn_i( uint8_t column, uint8_t muxes, int16_t * buffer); // XXX Not currently used
|
//int sampleColumn_i( uint8_t column, uint8_t muxes, int16_t * buffer); // XXX Not currently used
|
||||||
int sampleColumn_k( uint8_t column, int16_t *buffer );
|
int sampleColumn_k( uint8_t column, int16_t *buffer );
|
||||||
|
|
||||||
void setup_ADC( void );
|
void setup_ADC( void );
|
||||||
@ -639,23 +639,36 @@ void recovery(uint8_t on) {
|
|||||||
|
|
||||||
void strobe_w(uint8_t strobe_num) {
|
void strobe_w(uint8_t strobe_num) {
|
||||||
|
|
||||||
PORTC &= ~(D_MASK);
|
PORTC &= ~(C_MASK);
|
||||||
PORTD &= ~(D_MASK);
|
PORTD &= ~(D_MASK);
|
||||||
PORTE &= ~(E_MASK);
|
PORTE &= ~(E_MASK);
|
||||||
|
|
||||||
#ifdef SHORT_C
|
#ifdef SHORT_C
|
||||||
strobe_num = 15 - strobe_num;
|
strobe_num = 15 - strobe_num;
|
||||||
#endif
|
#endif
|
||||||
|
/*
|
||||||
|
printHex( strobe_num );
|
||||||
|
print(" ");
|
||||||
|
strobe_num = 9 - strobe_num;
|
||||||
|
printHex( strobe_num );
|
||||||
|
print("\n");
|
||||||
|
*/
|
||||||
|
|
||||||
switch(strobe_num) {
|
switch(strobe_num) {
|
||||||
|
|
||||||
case 0: PORTD |= (1 << 0); break;
|
// XXX Kishsaver strobe (note that D0, D1 are not used)
|
||||||
case 1: PORTD |= (1 << 1); break;
|
|
||||||
case 2: PORTD |= (1 << 2); break;
|
case 2: PORTD |= (1 << 2); break;
|
||||||
case 3: PORTD |= (1 << 3); break;
|
case 3: PORTD |= (1 << 3); break;
|
||||||
case 4: PORTD |= (1 << 4); break;
|
case 4: PORTD |= (1 << 4); break;
|
||||||
case 5: PORTD |= (1 << 5); break;
|
case 5: PORTD |= (1 << 5); break;
|
||||||
|
|
||||||
|
// TODO REMOVEME
|
||||||
|
case 6: PORTD |= (1 << 6); break;
|
||||||
|
case 7: PORTD |= (1 << 7); break;
|
||||||
|
case 8: PORTE |= (1 << 0); break;
|
||||||
|
case 9: PORTE |= (1 << 1); break;
|
||||||
|
case 15: PORTC |= (1 << 5); break;
|
||||||
|
/*
|
||||||
#ifdef ALL_D
|
#ifdef ALL_D
|
||||||
|
|
||||||
case 6: PORTD |= (1 << 6); break;
|
case 6: PORTD |= (1 << 6); break;
|
||||||
@ -710,6 +723,7 @@ void strobe_w(uint8_t strobe_num) {
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -717,7 +731,7 @@ void strobe_w(uint8_t strobe_num) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
|
int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
|
||||||
|
|
||||||
// ensure all probe lines are driven low, and chill for recovery delay.
|
// ensure all probe lines are driven low, and chill for recovery delay.
|
||||||
@ -728,7 +742,7 @@ int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
|
|||||||
_delay_us(RECOVERY_US);
|
_delay_us(RECOVERY_US);
|
||||||
recovery(0);
|
recovery(0);
|
||||||
|
|
||||||
uint8_t index = 0;
|
//uint8_t index = 0;
|
||||||
|
|
||||||
for (uint8_t i=0; i<8; ++i) {
|
for (uint8_t i=0; i<8; ++i) {
|
||||||
if(muxes & (1 << i)) {
|
if(muxes & (1 << i)) {
|
||||||
@ -743,8 +757,8 @@ int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
|
|||||||
//uint16_t sample;
|
//uint16_t sample;
|
||||||
|
|
||||||
while (! (ADCSRA & (1 << ADIF))); // wait until ready.
|
while (! (ADCSRA & (1 << ADIF))); // wait until ready.
|
||||||
//sample = ADC; // 1st sample, icky.
|
sample = ADC; // 1st sample, icky.
|
||||||
ADC; // 1st sample, icky. XXX Not sure if the compiler throws this away, but less compiler warnings -HaaTa
|
//ADC; // 1st sample, icky. XXX Not sure if the compiler throws this away, but less compiler warnings -HaaTa
|
||||||
|
|
||||||
strobe_w(column);
|
strobe_w(column);
|
||||||
//recovery(0);
|
//recovery(0);
|
||||||
@ -773,8 +787,8 @@ int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
|
|||||||
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
||||||
//wait for last read to complete.
|
//wait for last read to complete.
|
||||||
while (! (ADCSRA & (1 << ADIF)));
|
while (! (ADCSRA & (1 << ADIF)));
|
||||||
//sample = ADC; // throw away strobe'd value.
|
sample = ADC; // throw away strobe'd value.
|
||||||
ADC; // throw away strobe'd value.
|
//ADC; // throw away strobe'd value.
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
for (uint8_t i=0; i <= index; ++i) {
|
for (uint8_t i=0; i <= index; ++i) {
|
||||||
@ -802,8 +816,8 @@ int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
|
|||||||
|
|
||||||
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
||||||
while (! (ADCSRA & (1 << ADIF)));
|
while (! (ADCSRA & (1 << ADIF)));
|
||||||
//sample = ADC; // throw away warmup value.
|
sample = ADC; // throw away warmup value.
|
||||||
ADC; // throw away warmup value.
|
//ADC; // throw away warmup value.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -844,19 +858,20 @@ int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int sampleColumn_k(uint8_t column, int16_t * buffer) {
|
int sampleColumn_k(uint8_t column, int16_t * buffer) {
|
||||||
// ensure all probe lines are driven low, and chill for recovery delay.
|
// ensure all probe lines are driven low, and chill for recovery delay.
|
||||||
//uint16_t sample;
|
uint16_t sample;
|
||||||
|
|
||||||
ADCSRA |= (1 << ADEN) | (1 << ADSC); // enable and start conversions
|
ADCSRA |= (1 << ADEN) | (1 << ADSC); // enable and start conversions
|
||||||
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
||||||
|
|
||||||
// sync up with adc clock:
|
// sync up with adc clock:
|
||||||
while (! (ADCSRA & (1 << ADIF))); // wait until ready.
|
while (! (ADCSRA & (1 << ADIF))); // wait until ready.
|
||||||
ADC; // throw it away. // XXX Not sure if the compiler throws this away, but less compiler warnings -HaaTa
|
//ADC; // throw it away. // XXX Not sure if the compiler throws this away, but less compiler warnings -HaaTa
|
||||||
//sample = ADC; // throw it away.
|
sample = ADC; // throw it away.
|
||||||
|
|
||||||
for(uint8_t mux=0; mux < 8; ++mux) {
|
for(uint8_t mux=0; mux < 8; ++mux) {
|
||||||
|
|
||||||
@ -870,8 +885,8 @@ int sampleColumn_k(uint8_t column, int16_t * buffer) {
|
|||||||
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
||||||
//wait for last read to complete.
|
//wait for last read to complete.
|
||||||
while (! (ADCSRA & (1 << ADIF)));
|
while (! (ADCSRA & (1 << ADIF)));
|
||||||
//sample = ADC; // throw away strobe'd value.
|
sample = ADC; // throw away strobe'd value.
|
||||||
ADC; // throw away strobe'd value.
|
//ADC; // throw away strobe'd value.
|
||||||
}
|
}
|
||||||
|
|
||||||
recovery(0);
|
recovery(0);
|
||||||
@ -880,8 +895,8 @@ int sampleColumn_k(uint8_t column, int16_t * buffer) {
|
|||||||
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
||||||
//wait for last read to complete.
|
//wait for last read to complete.
|
||||||
while (! (ADCSRA & (1 << ADIF)));
|
while (! (ADCSRA & (1 << ADIF)));
|
||||||
//sample = ADC; // throw away strobe'd value.
|
sample = ADC; // throw away strobe'd value.
|
||||||
ADC; // throw away strobe'd value.
|
//ADC; // throw away strobe'd value.
|
||||||
|
|
||||||
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
|
||||||
while (! (ADCSRA & (1 << ADIF)));
|
while (! (ADCSRA & (1 << ADIF)));
|
||||||
@ -916,6 +931,7 @@ int sampleColumn(uint8_t column) {
|
|||||||
|
|
||||||
rval = sampleColumn_k(column, samples+SAMPLE_OFFSET);
|
rval = sampleColumn_k(column, samples+SAMPLE_OFFSET);
|
||||||
|
|
||||||
|
//for(uint8_t i=0; i<1; ++i) { // TODO REMOVEME
|
||||||
for(uint8_t i=0; i<8; ++i) {
|
for(uint8_t i=0; i<8; ++i) {
|
||||||
if(samples[SAMPLE_OFFSET + i] - adc_mux_averages[i] > BUMP_THRESHOLD) {
|
if(samples[SAMPLE_OFFSET + i] - adc_mux_averages[i] > BUMP_THRESHOLD) {
|
||||||
// was a hump
|
// was a hump
|
||||||
@ -949,14 +965,15 @@ uint8_t testColumn(uint8_t strobe) {
|
|||||||
void dumpkeys(void) {
|
void dumpkeys(void) {
|
||||||
//print(" \n");
|
//print(" \n");
|
||||||
if(error) {
|
if(error) {
|
||||||
|
if (count >= WARMUP_LOOPS && error) {
|
||||||
|
dump();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Key scan debug
|
||||||
|
/*
|
||||||
for (uint8_t i=0; i < STROBE_LINES; ++i) {
|
for (uint8_t i=0; i < STROBE_LINES; ++i) {
|
||||||
printHex(usb_keymap[i]);
|
printHex(usb_keymap[i]);
|
||||||
print(" ");
|
print(" ");
|
||||||
|
|
||||||
//print(" ");
|
|
||||||
}
|
|
||||||
if (count >= WARMUP_LOOPS && error) {
|
|
||||||
dump();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
print(" : ");
|
print(" : ");
|
||||||
@ -966,6 +983,7 @@ void dumpkeys(void) {
|
|||||||
printHex(error_data);
|
printHex(error_data);
|
||||||
error_data = 0;
|
error_data = 0;
|
||||||
print(" : " NL);
|
print(" : " NL);
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
// XXX Will be cleaned up eventually, but this will do for now :P -HaaTa
|
// XXX Will be cleaned up eventually, but this will do for now :P -HaaTa
|
||||||
@ -976,16 +994,19 @@ void dumpkeys(void) {
|
|||||||
|
|
||||||
// Add to the Macro processing buffer
|
// Add to the Macro processing buffer
|
||||||
// Automatically handles converting to a USB code and sending off to the PC
|
// Automatically handles converting to a USB code and sending off to the PC
|
||||||
bufferAdd( key );
|
//bufferAdd( key );
|
||||||
|
|
||||||
if(usb_dirty) {
|
if(usb_dirty)
|
||||||
|
{
|
||||||
|
/*
|
||||||
printHex( key );
|
printHex( key );
|
||||||
print(" ");
|
print(" ");
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(usb_dirty) print("\n");
|
//if(usb_dirty) print("\n");
|
||||||
usb_keyboard_send();
|
usb_keyboard_send();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -994,6 +1015,7 @@ void dump(void) {
|
|||||||
|
|
||||||
if(!dump_count) { // we don't want to debug-out during the measurements.
|
if(!dump_count) { // we don't want to debug-out during the measurements.
|
||||||
|
|
||||||
|
// Averages currently set per key
|
||||||
for(int i =0; i< KEY_COUNT; ++i) {
|
for(int i =0; i< KEY_COUNT; ++i) {
|
||||||
if(!(i & 0x0f)) {
|
if(!(i & 0x0f)) {
|
||||||
print("\n");
|
print("\n");
|
||||||
@ -1007,6 +1029,7 @@ void dump(void) {
|
|||||||
|
|
||||||
print("\n");
|
print("\n");
|
||||||
|
|
||||||
|
// Previously read full ADC scans?
|
||||||
for(int i =0; i< KEY_COUNT; ++i) {
|
for(int i =0; i< KEY_COUNT; ++i) {
|
||||||
if(!(i & 0x0f)) {
|
if(!(i & 0x0f)) {
|
||||||
print("\n");
|
print("\n");
|
||||||
@ -1020,27 +1043,24 @@ void dump(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Per strobe information
|
||||||
//}
|
|
||||||
|
|
||||||
// uint8_t cur_strober = 0xe;
|
// uint8_t cur_strober = 0xe;
|
||||||
uint8_t cur_strober = ze_strober;
|
uint8_t cur_strober = ze_strober;
|
||||||
print("\n");
|
print("\n");
|
||||||
|
|
||||||
printHex(cur_strober);
|
printHex(cur_strober);
|
||||||
//print(": ");
|
//print(": ");
|
||||||
print(": ");
|
|
||||||
#if 1
|
#if 1
|
||||||
print("\n");
|
// Previously read ADC scans on current strobe
|
||||||
|
print(" :");
|
||||||
for (uint8_t i=0; i < MUXES_COUNT; ++i) {
|
for (uint8_t i=0; i < MUXES_COUNT; ++i) {
|
||||||
print(" ");
|
print(" ");
|
||||||
printHex(full_samples[(cur_strober << MUXES_COUNT_XSHIFT) + i]);
|
printHex(full_samples[(cur_strober << MUXES_COUNT_XSHIFT) + i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
print("\n");
|
// Averages current set on current strobe
|
||||||
|
print(" :");
|
||||||
// printHex(threshold);
|
// printHex(threshold);
|
||||||
// print(": ");
|
|
||||||
|
|
||||||
for (uint8_t i=0; i < MUXES_COUNT; ++i) {
|
for (uint8_t i=0; i < MUXES_COUNT; ++i) {
|
||||||
print(" ");
|
print(" ");
|
||||||
printHex(keys_averages[(cur_strober << MUXES_COUNT_XSHIFT) + i]);
|
printHex(keys_averages[(cur_strober << MUXES_COUNT_XSHIFT) + i]);
|
||||||
@ -1068,6 +1088,7 @@ void dump(void) {
|
|||||||
//print(" : ");
|
//print(" : ");
|
||||||
print("\n ");
|
print("\n ");
|
||||||
|
|
||||||
|
// Current keymap values
|
||||||
for (uint8_t i=0; i < STROBE_LINES; ++i) {
|
for (uint8_t i=0; i < STROBE_LINES; ++i) {
|
||||||
printHex(cur_keymap[i]);
|
printHex(cur_keymap[i]);
|
||||||
print(" ");
|
print(" ");
|
||||||
@ -1081,7 +1102,7 @@ void dump(void) {
|
|||||||
//print(" ");
|
//print(" ");
|
||||||
|
|
||||||
|
|
||||||
|
/* Already printing this above...
|
||||||
for (uint8_t i=0; i < MUXES_COUNT; ++i) {
|
for (uint8_t i=0; i < MUXES_COUNT; ++i) {
|
||||||
print(" ");
|
print(" ");
|
||||||
//printHex(adc_mux_averages[i] + adc_strobe_averages[ze_strober] - full_av);
|
//printHex(adc_mux_averages[i] + adc_strobe_averages[ze_strober] - full_av);
|
||||||
@ -1092,7 +1113,9 @@ void dump(void) {
|
|||||||
//printHex(keys_averages[(ze_strober << MUXES_COUNT_XSHIFT) + i] + (uint8_t)threshold);
|
//printHex(keys_averages[(ze_strober << MUXES_COUNT_XSHIFT) + i] + (uint8_t)threshold);
|
||||||
printHex(keys_averages[(ze_strober << MUXES_COUNT_XSHIFT) + i]);
|
printHex(keys_averages[(ze_strober << MUXES_COUNT_XSHIFT) + i]);
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Being printed in dumpkeys()
|
||||||
if(error) {
|
if(error) {
|
||||||
print(" ");
|
print(" ");
|
||||||
printHex(error);
|
printHex(error);
|
||||||
@ -1102,6 +1125,7 @@ void dump(void) {
|
|||||||
error_data = 0;
|
error_data = 0;
|
||||||
}
|
}
|
||||||
//print("\n");
|
//print("\n");
|
||||||
|
*/
|
||||||
|
|
||||||
ze_strober++;
|
ze_strober++;
|
||||||
ze_strober &= 0xf;
|
ze_strober &= 0xf;
|
||||||
|
@ -83,7 +83,7 @@ inline void usb_setup(void)
|
|||||||
|
|
||||||
// Wait an extra second for the PC's operating system to load drivers
|
// Wait an extra second for the PC's operating system to load drivers
|
||||||
// and do whatever it does to actually be ready for input
|
// and do whatever it does to actually be ready for input
|
||||||
_delay_ms(1000);
|
//_delay_ms(1000); // TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
#| All of the modules must be specified, as they generate the sources list of files to compile
|
#| All of the modules must be specified, as they generate the sources list of files to compile
|
||||||
#| Any modifications to this file will cause a complete rebuild of the project
|
#| Any modifications to this file will cause a complete rebuild of the project
|
||||||
|
|
||||||
#| Please the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones
|
#| Please look at the {Scan,Macro,USB,Debug}/module.txt for information on the modules and how to create new ones
|
||||||
|
|
||||||
##| Deals with acquiring the keypress information and turning it into a key index
|
##| Deals with acquiring the keypress information and turning it into a key index
|
||||||
set( ScanModule "avr-capsense" )
|
set( ScanModule "avr-capsense" )
|
||||||
|
Reference in New Issue
Block a user