changeset 86:13b705bb165f

Debugging kishsaver. - Hardcoded strobe lines (required to make the hardware less noisy) - Updated debug code
author Jacob Alexander <haata@users.sf.net>
date Wed, 13 Nov 2013 22:48:49 -0500
parents 0e3157680bd1
children 74745739c96a
files Scan/avr-capsense/scan_loop.c USB/pjrc/usb_com.c setup.cmake
diffstat 3 files changed, 64 insertions(+), 40 deletions(-) [+]
line wrap: on
line diff
--- a/Scan/avr-capsense/scan_loop.c	Sat Apr 13 22:35:59 2013 -0400
+++ b/Scan/avr-capsense/scan_loop.c	Wed Nov 13 22:48:49 2013 -0500
@@ -274,7 +274,7 @@
 void recovery( uint8_t on );
 
 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 );
 
 void setup_ADC( void );
@@ -639,23 +639,36 @@
 
 void strobe_w(uint8_t strobe_num) {
 
-	PORTC &= ~(D_MASK);
+	PORTC &= ~(C_MASK);
 	PORTD &= ~(D_MASK);
 	PORTE &= ~(E_MASK);
 
 #ifdef SHORT_C
 	strobe_num = 15 - strobe_num;
 #endif
+	/*
+	printHex( strobe_num );
+	print(" ");
+	strobe_num = 9 - strobe_num;
+	printHex( strobe_num );
+	print("\n");
+	*/
 
 	switch(strobe_num) {
 
-	case 0: PORTD |= (1 << 0); break;
-	case 1: PORTD |= (1 << 1); break;
+	// XXX Kishsaver strobe (note that D0, D1 are not used)
 	case 2: PORTD |= (1 << 2); break;
 	case 3: PORTD |= (1 << 3); break;
 	case 4: PORTD |= (1 << 4); 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
 
 	case 6: PORTD |= (1 << 6); break;
@@ -710,6 +723,7 @@
 #endif
 #endif
 #endif
+*/
 
 	default:
 		break;
@@ -717,7 +731,7 @@
 
 }
 
-
+#if 0
 int sampleColumn_i(uint8_t column, uint8_t muxes, int16_t * buffer) {
 
 	// ensure all probe lines are driven low, and chill for recovery delay.
@@ -728,7 +742,7 @@
 	_delay_us(RECOVERY_US);
 	recovery(0);
 
-	uint8_t index = 0;
+	//uint8_t index = 0;
 
 	for (uint8_t i=0; i<8; ++i) {
 		if(muxes & (1 << i)) {
@@ -743,8 +757,8 @@
 	//uint16_t sample;
 
 	while (! (ADCSRA & (1 << ADIF))); // wait until ready.
-	//sample = ADC; // 1st sample, icky.
-	ADC; // 1st sample, icky. XXX Not sure if the compiler throws this away, but less compiler warnings -HaaTa
+	sample = ADC; // 1st sample, icky.
+	//ADC; // 1st sample, icky. XXX Not sure if the compiler throws this away, but less compiler warnings -HaaTa
 
 	strobe_w(column);
 	//recovery(0);
@@ -773,8 +787,8 @@
 	ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
 	//wait for last read to complete.
 	while (! (ADCSRA & (1 << ADIF)));
-	//sample = ADC; // throw away strobe'd value.
-	ADC; // throw away strobe'd value.
+	sample = ADC; // throw away strobe'd value.
+	//ADC; // throw away strobe'd value.
 
 #if 0
 	for (uint8_t i=0; i <= index; ++i) {
@@ -802,8 +816,8 @@
 
 		ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
 		while (! (ADCSRA & (1 << ADIF)));
-		//sample = ADC; // throw away warmup value.
-		ADC; // throw away warmup value.
+		sample = ADC; // throw away warmup value.
+		//ADC; // throw away warmup value.
 
 
 
@@ -844,19 +858,20 @@
 	return 0;
 
 }
+#endif
 
 
 int sampleColumn_k(uint8_t column, int16_t * buffer) {
 	// 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 << ADIF); // clear int flag by writing 1.
 
 	// sync up with adc clock:
 	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
-	//sample = ADC; // throw it away.
+	//ADC; // throw it away. // XXX Not sure if the compiler throws this away, but less compiler warnings -HaaTa
+	sample = ADC; // throw it away.
 
 	for(uint8_t mux=0; mux < 8; ++mux) {
 
@@ -870,8 +885,8 @@
 			ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
 			//wait for last read to complete.
 			while (! (ADCSRA & (1 << ADIF)));
-			//sample = ADC; // throw away strobe'd value.
-			ADC; // throw away strobe'd value.
+			sample = ADC; // throw away strobe'd value.
+			//ADC; // throw away strobe'd value.
 		}
 
 		recovery(0);
@@ -880,8 +895,8 @@
 		ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
 		//wait for last read to complete.
 		while (! (ADCSRA & (1 << ADIF)));
-		//sample = ADC; // throw away strobe'd value.
-		ADC; // throw away strobe'd value.
+		sample = ADC; // throw away strobe'd value.
+		//ADC; // throw away strobe'd value.
 
 		ADCSRA |= (1 << ADIF); // clear int flag by writing 1.
 		while (! (ADCSRA & (1 << ADIF)));
@@ -916,6 +931,7 @@
 
 	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) {
 		if(samples[SAMPLE_OFFSET + i] - adc_mux_averages[i] > BUMP_THRESHOLD) {
 			// was a hump
@@ -949,14 +965,15 @@
 void dumpkeys(void) {
 	//print(" \n");
 	if(error) {
+		if (count >= WARMUP_LOOPS && error) {
+			dump();
+		}
+
+		// Key scan debug
+		/*
 		for (uint8_t i=0; i < STROBE_LINES; ++i) {
 				printHex(usb_keymap[i]);
 				print(" ");
-
-				//print(" ");
-		}
-		if (count >= WARMUP_LOOPS && error) {
-			dump();
 		}
 
 		print(" : ");
@@ -966,6 +983,7 @@
 		printHex(error_data);
 		error_data = 0;
 		print(" : " NL);
+		*/
 	}
 
 	// XXX Will be cleaned up eventually, but this will do for now :P -HaaTa
@@ -976,16 +994,19 @@
 
 				// Add to the Macro processing buffer
 				// 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 );
 					print(" ");
+				*/
 				}
 			}
 		}
 	}
-	if(usb_dirty) print("\n");
+	//if(usb_dirty) print("\n");
 	usb_keyboard_send();
 }
 
@@ -994,6 +1015,7 @@
 
 	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) {
 			if(!(i & 0x0f)) {
 				print("\n");
@@ -1007,6 +1029,7 @@
 
 		print("\n");
 
+		// Previously read full ADC scans?
 		for(int i =0; i< KEY_COUNT; ++i) {
 			if(!(i & 0x0f)) {
 				print("\n");
@@ -1020,27 +1043,24 @@
 		}
 	}
 
-
-	//}
-
+	// Per strobe information
 //	uint8_t cur_strober = 0xe;
 	uint8_t cur_strober = ze_strober;
 	print("\n");
 
 	printHex(cur_strober);
 	//print(":         ");
-	print(": ");
 #if 1
-	print("\n");
+	// Previously read ADC scans on current strobe
+	print(" :");
 	for (uint8_t i=0; i < MUXES_COUNT; ++i) {
 		print(" ");
 		printHex(full_samples[(cur_strober << MUXES_COUNT_XSHIFT) + i]);
 	}
 
-	print("\n");
+	// Averages current set on current strobe
+	print(" :");
 //	printHex(threshold);
-//	print(": ");
-
 	for (uint8_t i=0; i < MUXES_COUNT; ++i) {
 		print(" ");
 		printHex(keys_averages[(cur_strober << MUXES_COUNT_XSHIFT) + i]);
@@ -1066,8 +1086,9 @@
 	//printHex(full_av);
 	//printHex(count);
 	//print(" : ");
-	print("\n");
+	print("\n      ");
 
+	// Current keymap values
 	for (uint8_t i=0; i < STROBE_LINES; ++i) {
 		printHex(cur_keymap[i]);
 		print(" ");
@@ -1081,7 +1102,7 @@
 	//print(" ");
 
 
-
+	/* Already printing this above...
 	for (uint8_t i=0; i < MUXES_COUNT; ++i) {
 		print(" ");
 		//printHex(adc_mux_averages[i] + adc_strobe_averages[ze_strober] - full_av);
@@ -1092,7 +1113,9 @@
 		//printHex(keys_averages[(ze_strober << MUXES_COUNT_XSHIFT) + i] + (uint8_t)threshold);
 		printHex(keys_averages[(ze_strober << MUXES_COUNT_XSHIFT) + i]);
 	}
+	*/
 
+	/* Being printed in dumpkeys()
 	if(error) {
 		print(" ");
 		printHex(error);
@@ -1102,6 +1125,7 @@
 		error_data = 0;
 	}
 	//print("\n");
+	*/
 
 	ze_strober++;
 	ze_strober &= 0xf;
@@ -1118,6 +1142,6 @@
 
 	//printHex(ADCSRA);
 	//print(" ");
-			//print("\n");
+	//print("\n");
 }
 
--- a/USB/pjrc/usb_com.c	Sat Apr 13 22:35:59 2013 -0400
+++ b/USB/pjrc/usb_com.c	Wed Nov 13 22:48:49 2013 -0500
@@ -83,7 +83,7 @@
 
 	// Wait an extra second for the PC's operating system to load drivers
 	// and do whatever it does to actually be ready for input
-	_delay_ms(1000);
+	//_delay_ms(1000); // TODO
 }
 
 
--- a/setup.cmake	Sat Apr 13 22:35:59 2013 -0400
+++ b/setup.cmake	Wed Nov 13 22:48:49 2013 -0500
@@ -17,7 +17,7 @@
 #| 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
 
-#| 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
 set(  ScanModule  "avr-capsense" )