int main(void) {

    DDRB = 0Xff;
    DDRD = 0xff;
    
    MPU6050_initialize();
    USART_initialize();
    
    //int data;
    
    //data = read_byte_from_slave(0x68,0x1B);
    //USART_transmit_byte(data);
    //data = read_byte_from_slave(0x68,0x1C);
    //USART_transmit_byte(data);


    while(1) {
        
        //USART_transmit_byte('\xff');
        //_delay_ms(1000);
        //PORTD ^= (1<<5);
        
    }
    
    return(0);

}
Пример #2
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");
				}
			}
		}
	}
}