Forum: Compiler & IDEs SPI 2 Devices als Slave Mega128


von Hans Peter (Gast)


Lesenswert?

Hallo

Ist es denn wirklich so schwer mit dem SPI Bus???


Habe ein Display und eine SD-Card am Hardware SPI meines 128iger Mega.


Port B
Pin B.3 =MISO
Pin B.2 = MOSI
Pin B.1 = CLK
Pin A.1 = CS SD-CARD
Pin B.5 = CS Display
Pin B.6 = Reset Display

B.2 B.1 ist parallel am Display und SDCARD

B.3 nur empfangen an SDCARD und nicht am Display da  es nur empfängt.

SS nicht belegt

wie initialisiere ich den SPI???

wie kommuniziere ich mit dem Display und mit der SDCARD????

Komme nicht weiter.

wenn ich den Code von Ullrich radig nehme für die MMC

geht mein Display nicht aber die SDCARD.

Wenn ich den code für das Nokia 6100 nutze geht das display aber die SD
nicht.


Ich mußß ja nur einmal den SPI initialsieren und dann nur mit CS den
Slave auswählen aber wie???

habe schon probiert den CS auf High der SDCARD und den CS auf low des
Displays um das Display anzusteuern aber ohne erfolg.


könnte mir einer ein Beispiel zeigen wie man den SPI global
initialisiert und dann das entsprechende gerät über CS abfragt.

Danke

von inoffizieller WM-Rahul (Gast)


Lesenswert?

Allgemeiner Ablauf der SPI-Kommunikation:

setze das CS-Signal des Slave low.
übertrage Daten in beide Richtung synchron zum Takt (Dazu muß man nur
ein bestimmtes Bit in einem SPI-Register setzen. (Müsste ich jetzt auch
nachgucken).
Solange CS low ist, übernimmt der Slave mit jeder (vorher festgelegten)
Taktflanke (SCK) die Daten.

Wenn du also mit der SD-Karte kommunizieren möchstest, mußt du Port A.1
auf low setzen und Port B.5 muß high sein.
Der Ruhezustand beider Pins ist High (kann man auch per externem
Pull-Up-Widerstand erzwingen).

>habe schon probiert den CS auf High der SDCARD und den CS auf low des
>Displays um das Display anzusteuern aber ohne erfolg.

Das könnte auch an der Taktgeschwindigkeit liegen.

von Wolfram (Gast)


Lesenswert?

>>SS nicht belegt
gib SS einen definierten Pegel, siehe Datenblatt, sonst schaltet der MC
mal ganz schnell in den SPI-Slavemodus.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> sonst schaltet der MC
> mal ganz schnell in den SPI-Slavemodus.

Nur, wenn man ihn zuvor als SPI slave konfiguriert hat.  Wenn er
SPI master ist, ist das /SS-Pin ein normales GPIO-Pin.

von Wolfram (Gast)


Lesenswert?

Ich zitiere mal aus dem ATmega128 Datenblatt S.166
>Master Mode
>When the SPI is configured as a master (MSTR in SPCR is set), the
>user can determine the direction of the SS pin. If SS is configured
>as an output, the pin is a general output pin which does not affect
>the SPI system. Typically, the pin will be driving the SS pin of the
>SPI slave. If SS is configured as an input, it must be held high to
>ensure Master SPI operation. If the SS pin is driven low by
>peripheral circuitry when the SPI is configured as a master with the
>SS pin defined as an input, the SPI system interprets this as another
>master selecting the SPI as a slave and starting to send data to it.
>To avoid bus contention, the SPI system takes the following actions:
>1. The MSTR bit in SPCR is cleared and the SPI system becomes a
>slave. As a result of the SPI becoming a slave, the MOSI and SCK pins
>become inputs.

Wenn also jemand den SS Pin nicht benutzt ist der auf Default eingang
, kein Pullup jetzt muss er nur noch ein bisschen nach low kippen und
der Master ist ein Slave.

von Rolf Magnus (Gast)


Lesenswert?

> wenn ich den Code von Ullrich radig nehme für die MMC
>
> geht mein Display nicht aber die SDCARD.

Da fehlt ein Komma. Meinst du:

 ... geht mein Display, nicht aber die SDCARD.

oder

 ... geht mein Display nicht, aber die SDCARD.

?

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

> Wenn also jemand den SS Pin nicht benutzt ist der auf Default
> eingang, kein Pullup jetzt muss er nur noch ein bisschen nach low
> kippen und der Master ist ein Slave.

OK, überredet. ;-)

Ist wohl sowieso das Sinnvollste, diesen Pin als Standard-Slaveselect
zu benutzen.  Im vorliegenden Fall braucht man natürlich zwei
Slaveselects, aber spricht ja nix dagegen, einen davon mit /SS zu
implementieren.

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.