Example #1
0
// 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();
		}
	}
}
Example #2
0
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);

}
Example #3
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];
	}
}
Example #4
0
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));
	}
}	
Example #5
0
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");
				}
			}
		}
	}
}