28. 3. 2013
/*
* inicializace SPI
*------------------------------------------------------------------------------*/
void SPI_init(void)
{
DDRB |= (1<<3) | (1<<5) | (1<<2);
// SPI enable, Data order 0 MSB first, Master, clock fosc/2 (0 1 0)
SPCR = (0<<SPIE) | (1<<SPE) | (0<<DORD) | (1<<MSTR) | (0<<CPOL) | (0<<CPHA) | (1<<SPR1) |(0<<SPR0);
SPSR = (0<<SPI2X);
}
/*
* Vyslani Bytu po SPI
*------------------------------------------------------------------------------*/
void SPI_transmit(unsigned char c)
{
SPDR = c;
while(!(SPSR & (1<<SPIF)));
}
/*
* Nastaveni DAC
*------------------------------------------------------------------------------*/
void SPI_set_DAC(char chan, unsigned int val)
{
val &= 0x0FFF;
val |= (chan<<15) | (1<<12);
PORTD &= ~(1<<5); // nastavi CS DAC na 0 (= aktivni)
SPI_transmit(val>>8);
SPI_transmit(val);
PORTD |= (1<<5); // nastavi CS DAC na 1
}