Forum: Mikrocontroller und Digitale Elektronik SPI und ATmega128


von claus e. (c0dy)


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

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

an MOSI solltest du ja deine Daten sehen die du ins SPDR schreibst.

Sascha

von Falk B. (falk)


Lesenswert?

MOSI Pin auf Ausgang konfiguriert? Das muss man nämlich selber machen, 
nicht wie beim UART, wo das automatisch passiert.

von claus e. (c0dy)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.