www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Pin des SPI Bus beim Atmega8


Autor: Christoph Hoell (webturtle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand einen Link zu einer Anleitung wie man beim Atmega8 andere 
Pins für SPI nutzen kann?

Bei CS ist ja eh egal, aber ich müsste auch die anderen frei wählen 
können. Laut Datenblatt sollte das gehen. Aber ich versteh nicht so 
recht wie. Und man kann ja SPI nicht mit HAPSIM simulieren, daher weiss 
ich nicht recht wie an die Sache rangehen soll.

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man kann natuerlich immer einen Soft-SPI machen und beliebige Port-Pins 
verwenden.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die Funktionen aller Pins aller AVR's sind festgelegt, da lässt sich 
nichts frei wählen. Wenn du die eingebaute Hardware-SPI-Einheit nutzen 
willst, geht das nur auf den im Datenblatt angegebenen Pins.

Mit einer Software-SPI hast du natürlich freie Pinwahl, wirst aber nicht 
die Geschwindigkeit der Hardware-Lösung erreichen.

Oliver

Autor: Peter Roth (gelb)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Christoph Hoell schrieb:

> Bei CS ist ja eh egal,

Nein, ist es nicht. Beim Slave musst du CS verwenden, beim Master kannst 
du den Pin 'frei' nur als Ausgang verwenden.

> aber ich müsste auch die anderen frei wählen können. Laut Datenblatt       > 
sollte das gehen.

Leider nicht. Wo steht das?

Du kannst jederzeit selbst SPI zu Fuß betreiben, also einen Portpin 
hin-und her schalten, der dann als Takt dient und auf einem weiteren Pin 
Daten ein- und ausgeben.

Grüße, Peter

Autor: Zwölf Mal Acht (hacky)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was man wie bewegen muss, steht auch im Datenblatt. Hierfuer ist das 
Datenblatt des anzusteuernden Devices konsultieren.
Die Hardware SPI ist uebrgens auch nicht so toll. Ein Interrupt pro Byte 
ist nicht der Knaller. Speziell wenn der Compiler den Rest macht. Push 
All, pop All, Reti, dann ist man bald mit soft-SPI gleich schnell.

Autor: Christoph Hoell (webturtle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
The following code examples show how to initialize the SPI as a Master 
and how to perform
a simple transmission. DDR_SPI in the examples must be replaced by the 
actual
Data Direction Register controlling the SPI pins. DD_MOSI, DD_MISO and 
DD_SCK
must be replaced by the actual data direction bits for these pins. E.g. 
if MOSI is placed
on pin PB5, replace DD_MOSI with DDB5 and DDR_SPI with DDRB.

Ist ein Zitat aus dem Datenblatt des Atmega 8. Dort legen sie MOSI auf 
PB5, wo ja normal SCK liegt.

Dann kommt dieser Code:

SPI_MasterInit:
; Set MOSI and SCK output, all others input
ldi r17,(1<<DD_MOSI)|(1<<DD_SCK)
out DDR_SPI,r17
; Enable SPI, Master, set clock rate fck/16
ldi r17,(1<<SPE)|(1<<MSTR)|(1<<SPR0)
out SPCR,r17
ret

Aber ich seh dort nicht wirklich woher der Atmega dann wissen soll dass 
MOSI nun auf einem anderen bin liegt.

Aber weils da stand dachte ich es ging einfach.
Muss dann mal nach Software SPI googlen. Gibt es auch nicht grad viele 
Ergebnisse in Assembler.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Muss dann mal nach Software SPI googlen. Gibt es auch nicht grad viele
>Ergebnisse in Assembler.

In etwa so:
out_spi:                push r16
                        push r18
                        ldi r16,8
out_spi10:              cbi dog_port,dog_si
                        cbi dog_port,dog_clk
                        sbrc r18,7
                        sbi dog_port,dog_si
                        lsl r18
                        nop
                        sbi dog_port,dog_clk
                        nop
                        dec r16
                        brne out_spi10
                        cbi dog_port,dog_clk
                        pop r18
                        pop r16
                        ret

Ersetze 'dog_port' durch deinen Port und 'dog_si' und 'dog_clk' durch 
deine
Pins.

MfG Spess

Autor: Tim Seidel (maxxie)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da steht, WENN es auf PB5 liegt, da steht nicht es kann bei einem 
atmega8 auf pin PB5 sein. Der Code funktioniert eben auch für andere 
atmegas, bei denen die Pinbelegung anders ist.

MOSI ist bei dir PB3, SCK PB5. Nichts anderes.

Autor: Christoph Hoell (webturtle)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja mag sein, dass es so dort steht. Dann sollte da aber halt ein Hinweis 
dazu stehen. Es steht ja immerhin in einem Atmega8 Datenblatt und nicht 
in irgendeinem App Note. Davon steht dort ein "passiv" was darauf 
hindeutet, dass es einfach so entschieden wurde.
Aber egal, brauch man jetzt nicht zu diskutieren. spess53 hat mir schon 
gut geholfen.

Und dann fand ich auch noch ein Appnote bezüglich Software SPI.
mit beidem zusammen werde ich es wohl hinkriegen.

Danke.

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.