mikrocontroller.net

Forum: Compiler & IDEs SPI 2 Devices als Slave Mega128


Autor: Hans Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: inoffizieller WM-Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfram (Gast)
Datum:

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

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Wolfram (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rolf Magnus (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

?

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.