SPI und ATmega128

OP #3113863
Lesenswert?

Hallo,

ich habe hier einen ATmega128 und bin dabei eine Verbindung zum einem 
ENC28j60 per SPI aufzubauen.

Will ich nun Daten übertragen, verhalten sich das clocksignal und der 
chipselect wie gewollt, jedoch messe ich mit dem Oszi auf MOSI 5V und 
ein bisschen "zuckeln" zum gleichen Zeitpunkt des CLK-signals.

Meine Funktionen sehen so aus:
1
void spi_write(uint8_t op, uint8_t address, uint8_t data)
2
{
3
   CSACTIVE; //ss low
4
   SPDR = op | (address & ADDR_MASK);
5
   while(!(SPSR&(1<<SPIF)))
6
   // write data
7
   SPDR = data;
8
   while(!(SPSR&(1<<SPIF)))
9
   CSPASSIVE; //ss high
10
}
11

12
void spi_init()
13
{
14
...
15
   SPCR = (1 << SPE) | (1 << MSTR);
16
   SPSR |= (1 << SPI2X);
17
...
18
}

Hat einer auf die schnelle eine Idee? Kann ich das Überhaupt testen ohne 
"Buspartner"?

Grüße
OP #3117317
Lesenswert?

Hi,

danke für die schnellen Antworten.

>an MOSI solltest du ja deine Daten sehen die du ins SPDR schreibst.
Genau auf MOSI messe ich durchweg HIGH-Pegel.
>MOSI Pin auf Ausgang konfiguriert? Das muss man nämlich selber machen,
>nicht wie beim UART, wo das automatisch passiert.
Da ist das Problem, MOSI und MISO vertauscht. Danke für den Tipp Falk !
1
DDRB |= (1 << MISO) | (1 << SCK); // mosi, sck output
2
DDRB &= ~(1 << MOSI); // MISO is input

Grüße

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren