Beispiel #1
0
/*SPI initialization*/
void SPI_init()
{
	DDRB=(1<<PCINT15)|(1<<PCINT13)|(1<<PORTB4); // set SCK, MOSI and SS as output
	SPCR=(1<<SPE)|(1<<MSTR)|(1<<SPR0); // Enable SPI | set as master | SCK freq = mclk/8
	
	set_ss(1);
	// enable adc conversion
	set_ss(0);
	spi_tranceiver(0x94);
	spi_tranceiver(0x00);
	spi_tranceiver(0x00);
	set_ss(1);
}
Beispiel #2
0
/* Single measure from the GYRO */
uint8_t single_measure(){ 
	
	uint8_t res_adc1;
	uint8_t res_adc2;
	uint16_t angular_rate_temp = 0x0000;
	uint8_t angular_rate = 0x00;
	int EOC = 0;
	
	// start command
	set_ss(0);
	spi_tranceiver(0x94);
	spi_tranceiver(0x00);
	spi_tranceiver(0x00);
	set_ss(1);
	
	// wait until EOC is set ( end of conversion )
	while(!EOC){
		set_ss(0);
		spi_tranceiver(0x80);
		res_adc1 = spi_tranceiver(0x00);
		res_adc2 = spi_tranceiver(0x00);
		set_ss(1);
		if((res_adc1 & 0x20) == 0x20){ 
			EOC = 1;
		}
	}
	
	angular_rate_temp = (res_adc1 << 8) | res_adc2;			// angular_rate = res_adc1 & res_adc2
	angular_rate_temp >>= 4;								// shift four bits right
	angular_rate_temp &= 0x00ff;							// stores the MSB 8 bits	
	angular_rate = angular_rate_temp;
	
	return angular_rate; 
}
Beispiel #3
0
void updateLeds()
{
	//Start frame
	spi_tranceiver(0x00);
	spi_tranceiver(0x00);
	spi_tranceiver(0x00);
	spi_tranceiver(0x00);


	//led frames
	for (int i=0; i<8; i++)
	{
		spi_tranceiver(0xFF);
		spi_tranceiver(leds[i][BLUE]);
		spi_tranceiver(leds[i][GREEN]);
		spi_tranceiver(leds[i][RED]);
	}

	//end frame
	for (int i=0; i<8; i += 16)
	{
		spi_tranceiver(0xFF);
	}
}
Beispiel #4
0
int main(void)
{
    lcd_init(LCD_DISP_ON_CURSOR_BLINK);           //Initialize LCD
    spi_init_slave();                             //Initialize slave SPI
    
    unsigned char data, buffer[10];
    
    DDRA  = 0x00;                                 //Initialize PORTA as INPUT
    PORTA = 0xFF;                                 //Enable Pull-Up Resistors
    
    while(1)
    {
        lcd_clrscr();                             //LCD Clear screen
        lcd_home();                               //LCD move cursor to home 
        lcd_puts("Testing");
        lcd_gotoxy(0,1);
        data = spi_tranceiver(ACK);               //Receive data, send ACK
        itoa(data, buffer, 10);                   //Convert integer into string
        lcd_puts(buffer);                         //Display received data
        _delay_ms(20);                            //Wait
    }
}