// to be called from systick void Mdm_Worker() { if (timer != 0) { timer --; } if (timer == 1) { if (Mdm_state == MDM_STATE_CMD) { LED_GREEN(LED_OFF); LED_YELLOW(LED_OFF); LED_RED(LED_OFF); // cmd timeout cmd_len = 0; } else if (Mdm_state == MDM_STATE_COMM) { // timeouted :( LED_YELLOW(LED_ON); // turn off receiver RFM_IdleMode(); // turn off led in 'timeout'. timer = Mdm_CMDTimeout; Mdm_state = MDM_STATE_CMD; } else if (Mdm_state == MDM_STATE_ANALYZER) { // start sample ADC_start(); } } }
int main (void) { DIO_init(); LCD_init(); LCD_gotoxy(1,1); printf("AVR ADC Tutorial"); LCD_gotoxy(1,2); ADC_init(); ADC_Configure_Reference(VREFERENCE_VALUE); ADC_Configure_PRESCALAR(PRESCALAR_VALUE); ADC_Enable(); ADC_start(); while(1) { LCD_gotoxy(1,2); adc_read=ADC_read_8bits(ADC0); printf("%d",adc_read); printf (" " ); TO_DELAY(500); } return(0); }
int main() { ADC_Init(); uint16_t delay = 512; DDRB = 0b11111011; DDRC = 0b11011111; DDRD = 0b00000000; for(;;) { ADC_start(5); PORTB = 0xff; PORTC = 0b11011111; PORTD = 0xff; mydelay(1024-delay); PORTB = 0x00; PORTC = 0x00; PORTD = 0x00; mydelay(delay); delay = lookup[ADC_result()/3]; } }
int main(int argc, char **argv) { initialize(); clear_array(); PORTE = 0; ADC_enable(); ADC_set_channel(ADC_MUX_ADC5); ADC_set_prescaler(ADC_PRESCALER_128); ADC_start(); while(1){ set_array_red(read_ADC(ADC_MUX_ADC5)); } }
int main(void) { // int i, j; int sine_table[NTABLE], cosine_table[NTABLE]; int mseq_table[CYCLES * NTABLE * MSEQ_LENGTH]; float size; float s; // float aI, aQ; // float uI[M]; // Store last M samples of yI // float uQ[M]; // Store last M samples of yQ // float vI, vQ; // float xI, xQ; // float w = 0; // float wq = 0; int spb = MSEQ_LENGTH * CYCLES * NTABLE; int last_samples[spb * MSG_LEN]; int i = 0; USART_initialize(3000000, 1); // set baud rate to 3,000,000 DAC_initialize(FS); // set sample rate DAC_ready_flag = 0; // clear the DAC ready flag DAC_start(); // start the DAC running ADC_initialize(FS); ADC_start(); ADC_ready_flag = 0; // clear the ADC ready flag int mseq[MSEQ_LENGTH] = { 1, 0, 1, 0, 1, 0, 1 }; int msg_table[MSG_LEN * CYCLES * NTABLE]; int recieved[MSG_LEN]; //char message[MSG_LEN] = "testing"; int msg[MSG_LEN] = { 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0 }; size = (float) (NTABLE / TABCYCLES); for (i = 0; i < NTABLE; i++) { sine_table[i] = (int) floor(32767 * sin(2.0 * PI * i / (float) size)); cosine_table[i] = (int) floor(32767 * cos(2.0 * PI * i / (float) size)); } for (i = 0; i < spb; i++) { mseq_table[i] = (mseq[i / (NTABLE * CYCLES)]) ? -sine_table[i % NTABLE] : cosine_table[i % NTABLE]; } for (i = 0; i < CYCLES * NTABLE * MSG_LEN; i++) { msg_table[i] = (msg[i / (CYCLES * NTABLE)]) ? -sine_table[i % NTABLE] : sine_table[i % NTABLE]; } for (i = 0; i < MSG_LEN; i++) { recieved[i] = 0; } i = 0; int m = 0; int strength = 0; int maxstrength = 0; for (i = 0; i < spb; i++) { last_samples[i] = 0; } int cycles = 0; int seconds = 0; int state = 0; // 0: listening for mseq // 4: initializing collection of packet data // 5: collecting packet data // 6: decoding & printing data while (1) { if (ADC_ready_flag != 0 && DAC_ready_flag != 0) { ADC_ready_flag = 0; DAC_ready_flag = 0; if (state == 0) { DAC1_value = mseq_table[m]; s = ADC1_value + 15000; // PIN 35A - Grab ADC value last_samples[m] = s; strength = 0; for (i = 0; i < spb; i++) { // Slow? strength += (last_samples[(m + 1 + i) % spb] * mseq_table[i]) / 32767; } strength /= 100; m++; m = m % spb; cycles++; cycles = cycles % FS; if (strength > 7500) printf("Convolution: %i \n", strength); if (strength > 7500) { printf("CAUGHT MSEQ\n"); state = 4; m = 0; } if (strength > maxstrength) { maxstrength = strength; printf("Max Strength: "); printf("%i", maxstrength); printf("\n"); } if (cycles == 0) { seconds++; printf("[O3] Seconds elapsed: "); printf("%i", seconds); printf("\n"); } } else if (state == 4) { if (m == -1) { m = 0; state = 5; last_samples[m] = ADC1_value + 15000; m = 1; DAC1_value = msg_table[m]; } else { m = -1; }; DAC1_value = msg_table[0]; } else if (state == 5) { s = ADC1_value + 15000; last_samples[m] = s; int zero_s = 0; int one_s = 0; if (((m + 1) % (CYCLES * NTABLE)) == 0) { zero_s = 0; one_s = 0; for (i = (((m + 1) - (CYCLES * NTABLE))); i <= m; i++) { one_s += ((last_samples[i]) / 100) * ((-sine_table[i % NTABLE]) / 100); zero_s += ((last_samples[i]) / 100) * ((sine_table[i % NTABLE]) / 100); } printf("zero strength: %i\n", zero_s); printf("one strength: %i\n", one_s); if (zero_s > one_s) { printf("got 0\n"); recieved[((m + 1) / (CYCLES * NTABLE)) - 1] += 0; } else { printf("got 1\n"); recieved[((m + 1) / (CYCLES * NTABLE)) - 1] += 1; } } if (m == CYCLES * NTABLE * MSG_LEN) state = 6; m++; DAC1_value = msg_table[m]; } else if (state == 6) { if (m < 20000) m++; else { state = 4; for (i = 0; i < MSG_LEN; i++) { printf("%i ", recieved[i]); } printf("\n"); } } } } }