with timer1 as fixed sample rate of 1ms
This commit is contained in:
parent
4b8c5a46e9
commit
a412db2b88
53
main.c
53
main.c
@ -9,7 +9,7 @@
|
|||||||
#define STARTADC ADCSRA |= (1<<ADSC)
|
#define STARTADC ADCSRA |= (1<<ADSC)
|
||||||
#define PB_mic PB0
|
#define PB_mic PB0
|
||||||
#define NOISE 100
|
#define NOISE 100
|
||||||
#define SCALE_FACTOR 8
|
#define SCALE_FACTOR 10
|
||||||
//resolution fft calc:
|
//resolution fft calc:
|
||||||
//https://3roam.com/fft-resolution-bandwidth-calculator/
|
//https://3roam.com/fft-resolution-bandwidth-calculator/
|
||||||
//128 samples , 1kSPS = 7.8Hz
|
//128 samples , 1kSPS = 7.8Hz
|
||||||
@ -31,6 +31,7 @@
|
|||||||
//
|
//
|
||||||
const float log_scale = 64./log(64./SCALE_FACTOR + 1.);
|
const float log_scale = 64./log(64./SCALE_FACTOR + 1.);
|
||||||
|
|
||||||
|
int msec;
|
||||||
int main (void)
|
int main (void)
|
||||||
{
|
{
|
||||||
int i,i2;
|
int i,i2;
|
||||||
@ -41,9 +42,12 @@ int main (void)
|
|||||||
char im[64];
|
char im[64];
|
||||||
char buff[64];
|
char buff[64];
|
||||||
char temp;
|
char temp;
|
||||||
|
msec=0;
|
||||||
struct cRGB led_bar1[8];
|
struct cRGB led_bar1[8];
|
||||||
//DDRB = (1<<mic);//would be setting output, default is input so no need for setting
|
//DDRB = (1<<mic);//would be setting output, default is input so no need for setting
|
||||||
setupADC();
|
setupADC();
|
||||||
|
setupTimer();
|
||||||
|
|
||||||
OSCCAL = 240;//overclock!!! to 30MHz
|
OSCCAL = 240;//overclock!!! to 30MHz
|
||||||
for(i=0;i<8;i++)
|
for(i=0;i<8;i++)
|
||||||
{
|
{
|
||||||
@ -55,19 +59,23 @@ int main (void)
|
|||||||
{
|
{
|
||||||
buff[i]=0;
|
buff[i]=0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sei();
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
//######RECORD SAMPLES######
|
//######RECORD SAMPLES######
|
||||||
sum = 0;
|
sum = 0;
|
||||||
for(i=0;i<64;i++)
|
for(i=0;i<64;i++)
|
||||||
{
|
{
|
||||||
|
msec=0;
|
||||||
STARTADC;
|
STARTADC;
|
||||||
sample[i] = (ADCH-128); //read Analog value register 8bit center -128
|
sample[i] = (ADCH-128); //read Analog value register 8bit center -128
|
||||||
//sample[i] = (sample[i] <= NOISE) ? 0 : (sample[i] - NOISE); //noise reduction
|
//sample[i] = (sample[i] <= NOISE) ? 0 : (sample[i] - NOISE); //noise reduction
|
||||||
im[i]=0; //pseudo data for funciton
|
im[i]=0; //pseudo data for funciton
|
||||||
//
|
//
|
||||||
sum+=sample[i];//dc-bias
|
sum+=sample[i];//dc-bias
|
||||||
|
|
||||||
|
//while(msec==0);
|
||||||
}
|
}
|
||||||
avg = sum/64;//calculate bias
|
avg = sum/64;//calculate bias
|
||||||
for(i=0;i<64;i++)
|
for(i=0;i<64;i++)
|
||||||
@ -79,11 +87,12 @@ int main (void)
|
|||||||
//
|
//
|
||||||
for(i=0;i<64;i++)
|
for(i=0;i<64;i++)
|
||||||
{
|
{
|
||||||
|
|
||||||
sample[i] = sample[i] *SCALE_FACTOR;
|
|
||||||
sample[i] = (sample[i]*0.6 + buff[i]*0.5);
|
|
||||||
buff[i] = sample[i];
|
|
||||||
if(sample[i]<0) sample[i] = 0;
|
if(sample[i]<0) sample[i] = 0;
|
||||||
|
if(sample[i]>64) sample[i]=64;
|
||||||
|
sample[i] = sample[i] *SCALE_FACTOR;
|
||||||
|
sample[i] = (sample[i]*0.7 + buff[i]*0.3);
|
||||||
|
buff[i] = sample[i];
|
||||||
|
|
||||||
}
|
}
|
||||||
for(i=0;i<8;i++)
|
for(i=0;i<8;i++)
|
||||||
{
|
{
|
||||||
@ -93,23 +102,23 @@ int main (void)
|
|||||||
}
|
}
|
||||||
//avg written to sample[0..7]
|
//avg written to sample[0..7]
|
||||||
|
|
||||||
if(sample[i]<30)
|
if(sample[i]<20)
|
||||||
{
|
{
|
||||||
led_bar1[i].r=0;
|
led_bar1[i].r=0;
|
||||||
led_bar1[i].g=0;
|
led_bar1[i].g=0;
|
||||||
led_bar1[i].b=sample[i];
|
led_bar1[i].b=sample[i];
|
||||||
}
|
}
|
||||||
else if(sample[i]<50)
|
else if(sample[i]<40)
|
||||||
{
|
{
|
||||||
led_bar1[i].r=0;
|
led_bar1[i].r=0;
|
||||||
led_bar1[i].g=sample[i];
|
led_bar1[i].g=sample[i];
|
||||||
led_bar1[i].b=0;
|
led_bar1[i].b=sample[i]/2;
|
||||||
}
|
}
|
||||||
else if(sample[i]<100)
|
else if(sample[i]<60)
|
||||||
{
|
{
|
||||||
led_bar1[i].r=sample[i];
|
led_bar1[i].r=sample[i];
|
||||||
led_bar1[i].g=0;
|
led_bar1[i].g=0;
|
||||||
led_bar1[i].b=0;
|
led_bar1[i].b=sample[i]/2;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -128,14 +137,28 @@ int map(int value, int old_min, int old_max,int new_min, int new_max)
|
|||||||
|
|
||||||
void setupTimer(void)
|
void setupTimer(void)
|
||||||
{
|
{
|
||||||
TCCR1 = (1<<CS13)|(1<<CS12)|(1<<CS11)|(1<<CS10)| //CK/16384
|
TCCR1 = (1<<CS13)|(1<<CS10)|(1<<CTC1); //clear timer on compare match
|
||||||
(1<<CTC1); //clear timer on compare match
|
|
||||||
GTCCR = 0; //default values should be ok
|
GTCCR = 0; //default values should be ok
|
||||||
OCR1A = 255; //Compare value of timer / overflow , sets OCF1A
|
OCR1C = 117; //Compare value of timer / overflow , sets OCF1A
|
||||||
//
|
OCR1A = 117;
|
||||||
|
TIMSK = (1<<OCIE1A);//|(1<<TOIE1); //enable interupt compare a
|
||||||
|
TIFR = (1<<OCF1A); //flag register "aka when to interrupt
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
* 1/(30Mhz/16384) *255 = 0.139264s Time for one overflow
|
* 1/(30Mhz/16384) *255 = 0.139264s Time for one overflow
|
||||||
* 1024 = 0.008704s
|
* 1024 = 0.008704s
|
||||||
* 2024 = 0.017204s
|
* 2024 = 0.017204s
|
||||||
* 255/0.017204*0.001=15 counts = 1ms
|
* 255/0.017204*0.001=15 counts = 1ms
|
||||||
|
* 256 gives 1ms
|
||||||
|
*/
|
||||||
|
|
||||||
|
void wait_period(void)
|
||||||
|
{
|
||||||
|
// TIFR |=(1<<TOV1); //clear overflow flag
|
||||||
|
}
|
||||||
|
|
||||||
|
ISR(TIMER1_COMPA_vect)
|
||||||
|
{
|
||||||
|
msec++;
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user