Forum

Einloggen | Registrieren | RSS  

Atmega als SPI Slave (Elektronik)

verfasst von spi, 05.02.2013, 11:23 Uhr

Hallo, ich möchte mit einem Atmega als SPI Slave Daten von einem anderen
IC empfangen, der als Master läuft. Den Atmega habe ich wie folgt
konfiguriert:

SPI.c
#include
#include
#include "uart.h"

unsigned char status;

void spi_slave_init (void) {
DDRB |= (1< //SPI on + Interrupt, MSB first, Slave select, CLK idle low, sample rising edge
SPCR = (1< status = SPSR; //Status löschen
}

char spi_slave_receive(void)
{uint8_t dummy;
/* Wait for reception complete */
while(!(SPSR & (1< dummy=SPDR;
/* Return Data Register */
return SPDR;
}


Allerdings bin ich beim Empfang nicht sicher, wie das richtig gemacht
wird.

SETREG_DATA // grün
SETRXTX // blau

SPDR=0x00;
byte2=spi_slave_receive();
if(byte2==0x13) uart_puts_P("byte2"); // Inhalt soll testweise per UART ausgegeben werden (code von Peter Fleury)
else uart_puts_P("xxx");

_delay_ms(20);
CLRREG_DATA
CLRRXTX

Auf dem Bild im Anhang ist zu sehen, wie der Master-IC bei Aktivierung
der beiden Ports (grün & blau) den Clock wieder aktiviert und dann 24
Bit sendet. Ein SS vom Master aus gibt es nicht, deshalb habe ich den
Atmega SS dauerhaft auf GND gelegt.





Gesamter Thread:

Atmega als SPI Slave - spi, 05.02.2013, 11:23