Compare commits

...

1 Commits

Author SHA1 Message Date
Markus Koch 9ef2a719a9 Add audio VU meter 2018-03-24 18:02:54 +01:00
2 changed files with 96 additions and 1 deletions

@ -1 +1 @@
Subproject commit 7828be22aa5a97c31f8d8286b50336f9193224a1
Subproject commit ed32a6d2fd0c2544ef753aa9e827660e56ff7d59

View File

@ -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++;
}
}