#include #include #define F_CPU 1600000UL /* SPCR SPI controler register Bit 7 SPIE - interrupt enable Bit 6 SPE - SPI enable Bit 5 DORD - Data order msb=0 or lsb=1 first Bit 4 MSTR - Master=1/slave=0 select Bit 3 CPOL - clock polarity Bit 2 CPHA - clock phase Bit 1 SPR1 - Clock rate select 1 Bit 0 SPR0 - Clock rate select 0 000 /4 001 /16 010 /64 011 /128 100 /2 101 /8 110 /32 111 /64 */ /* SPSR - SPI Status register Bit 7 SPIF - interrupt flag Bit 6 WCOl - Write COLlision flag Bit 5-1 används inte alltid 0 Bit 0 SPI2X - Double SPI speed bit EEPROM uploading och downloading sida 308 i databladet */ /* SPDR - SPI Data Register = read write register. Om man skriver till detta register så påbörjas överföringen. Om man läser från detta register läses Shift Register Receive buffer. */ /* Port B pinnar PB5 SCK PB4 MISO PB3 MOSI Pb2 SS PB0 PCINT0 */ char cData; void SPI_MasterInit(void) { /* Set MOSI and SCK output, all others input */ DDRB = (1 << DDB3) | (1 << DDB5) | (1 << DDB2); /* Enable SPI, Master, set clock rate fck/16 */ SPCR = (1 << SPE) | (1 << MSTR) | (1 << SPR1) | (1 << SPR0); } void SPI_MasterTransmit(char cData) { /* Start transmission */ //cData = 0xF8; SPDR = cData; /* Wait for transmission complete */ while (!(SPSR & (1 << SPIF))) ; } void delayLoop(uint32_t iterations) { while ((--iterations) > 0) { asm volatile("nop"); } } int main(void) { PRR = (0 << PRSPI); DDRB = (1 << DDB0) | (1 << DDB3) | (1 << DDB5); PORTB = (0 << PB0); while (1) { SPI_MasterInit(); SPI_MasterTransmit(0xC3); delayLoop(100); SPI_MasterTransmit(0xAA); delayLoop(100); SPI_MasterTransmit(0xF8); delayLoop(10000); } } // #include // #include // #define SPI_SS_PIN 10 // #define SPI_MOSI_PIN 11 // #define SPI_MISO_PIN 12 // #define SPI_SCK_PIN 13 // #define SPI_CLOCK_SPEED 1000000 // void setup() { // pinMode(SPI_SS_PIN, OUTPUT); // digitalWrite(SPI_SS_PIN, HIGH); // SPI.begin(); // SPI.setClockDivider(SPI_CLOCK_DIV128);//divide the clock by 8 // } // void loop() { // SPI.beginTransaction(SPISettings(SPI_CLOCK_SPEED, MSBFIRST, 0x00)); // digitalWrite(SPI_SS_PIN, LOW); // SPI.transfer(0xAA); // SPI.transfer(0x0F); // SPI.transfer(0xC3); // SPI.endTransaction(); // digitalWrite(SPI_SS_PIN, HIGH); // delay(100); // }