Add audio VU meter
This commit is contained in:
		
							parent
							
								
									3328ee7871
								
							
						
					
					
						commit
						9ef2a719a9
					
				| @ -1 +1 @@ | ||||
| Subproject commit 7828be22aa5a97c31f8d8286b50336f9193224a1 | ||||
| Subproject commit ed32a6d2fd0c2544ef753aa9e827660e56ff7d59 | ||||
| @ -25,6 +25,8 @@ | ||||
| #include "uart.h" | ||||
| #include "hcs12ss59t/hcs12ss59t.h" | ||||
| 
 | ||||
| void vu_meter(); | ||||
| 
 | ||||
| enum { | ||||
| 	SEND_ENCAPSULATED_COMMAND = 0, | ||||
| 	GET_ENCAPSULATED_RESPONSE, | ||||
| @ -292,6 +294,7 @@ void waitboot() | ||||
| int main(void) | ||||
| { | ||||
| 	waitboot(); | ||||
| 	vu_meter(); // For debugging only
 | ||||
| 	wdt_enable(WDTO_1S); | ||||
| 	odDebugInit(); | ||||
| 	hardwareInit(); | ||||
| @ -342,3 +345,95 @@ int main(void) | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| #define ADC_NOISE 15 // ADC RAW value
 | ||||
| #define BAR_SPEED 22 // In application cycles
 | ||||
| #define PK_SPEED 40 // In application cycles
 | ||||
| #define PK_DELAY 36 // In PKBAR cycles
 | ||||
| 
 | ||||
| void vu_meter() | ||||
| { | ||||
| 	uint16_t vu_new; | ||||
| 	uint8_t vu[2] = {0, 0}; | ||||
| 	uint8_t pk[2] = {0, 0}; | ||||
| 	uint8_t pk_del[2] = {0, 0}; | ||||
| 	uint16_t adc_val[2]; | ||||
| 	int cnt = 0; | ||||
| 	uint16_t adc_max  = 175; | ||||
| 	int i; | ||||
| 
 | ||||
| 	cli(); | ||||
| 
 | ||||
| 	/* Config ADC */ | ||||
| 	ADCSRA = (1 << ADEN) | (1 << ADPS1); | ||||
| 
 | ||||
| 	hcs12ss59t_init(); | ||||
| 	DDRD |= (1 << PD0); | ||||
| 	FILAMENT_EN; | ||||
| 	hcs12ss59t_set_brightness(8); | ||||
| 	hcs12ss59t_set_text(" HCS12SS59T "); | ||||
| 	hcs12ss59t_en_progress(); | ||||
| 
 | ||||
| 	/* main event loop */ | ||||
| 	for(;;){ | ||||
| 		if (!(PIND & (1 << PD7))) { | ||||
| 			cli(); | ||||
| 			hcs12ss59t_set_text("-BOOTLOADER-"); | ||||
| 			FILAMENT_DIS; | ||||
| 			wdt_enable(WDTO_15MS); | ||||
| 			while (1); // WD Timeout -> CPU reset
 | ||||
| 		} | ||||
| 
 | ||||
| 		/* Acquire data */ | ||||
| 		ADMUX = (4) | (1 << REFS0) | (1 << REFS1) | (1 << REFS1); | ||||
| 		ADCSRA |= (1 << ADSC); | ||||
| 		while (!(ADCSRA & (1 << ADIF))); | ||||
| 		ADCSRA |= (1 << ADIF); | ||||
| 		ADMUX = (5) | (1 << REFS0) | (1 << REFS1) | (1 << REFS1); | ||||
| 		ADCSRA |= (1 << ADSC); | ||||
| 		adc_val[0] = ADC; | ||||
| 		while (!(ADCSRA & (1 << ADIF))); | ||||
| 		ADCSRA |= (1 << ADIF); | ||||
| 		adc_val[1] = ADC; | ||||
| 
 | ||||
| 
 | ||||
| 		for (i = 0; i < 2; ++i) { | ||||
| 			if (adc_val[i] < ADC_NOISE) | ||||
| 				adc_val[i] = 0; | ||||
| 			else | ||||
| 				adc_val[i] -= ADC_NOISE; | ||||
| 			vu_new = adc_val[i] * 60 / adc_max; | ||||
| 			if (vu_new >= vu[i]) { | ||||
| 				vu[i] = vu_new; | ||||
| 			} else { | ||||
| 				if ((cnt % BAR_SPEED) == 0) { | ||||
| 					if (vu[i] > 0) { | ||||
| 						vu[i] -= 1; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 			if (vu_new > pk[i]) { | ||||
| 				pk[i] = vu_new; | ||||
| 				pk_del[i] = PK_DELAY; | ||||
| 			} else { | ||||
| 				if (pk_del[i] == 0) { | ||||
| 					if ((cnt % PK_SPEED) == 0) { | ||||
| 						if (pk[i] > 0) { | ||||
| 							pk[i]--; | ||||
| 						} | ||||
| 					} | ||||
| 				} else { | ||||
| 					if ((cnt % PK_SPEED) == 0) { | ||||
| 						pk_del[i]--; | ||||
| 					} | ||||
| 				} | ||||
| 			} | ||||
| 		} | ||||
| 
 | ||||
| 		hcs12ss59t_set_progress_peak(vu[0], vu[1], pk[0], pk[1]); | ||||
| 
 | ||||
| 		if (cnt == 209) | ||||
| 			cnt = 0; | ||||
| 		else | ||||
| 			cnt++; | ||||
| 	} | ||||
| } | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user