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


von Christoph H. (webturtle)


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.

von Purzel H. (hacky)


Lesenswert?

Man kann natuerlich immer einen Soft-SPI machen und beliebige Port-Pins 
verwenden.

von Oliver (Gast)


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

von Peter R. (gelb)


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

von Purzel H. (hacky)


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.

von Christoph H. (webturtle)


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.

von spess53 (Gast)


Lesenswert?

Hi

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

In etwa so:
1
out_spi:                push r16
2
                        push r18
3
                        ldi r16,8
4
out_spi10:              cbi dog_port,dog_si
5
                        cbi dog_port,dog_clk
6
                        sbrc r18,7
7
                        sbi dog_port,dog_si
8
                        lsl r18
9
                        nop
10
                        sbi dog_port,dog_clk
11
                        nop
12
                        dec r16
13
                        brne out_spi10
14
                        cbi dog_port,dog_clk
15
                        pop r18
16
                        pop r16
17
                        ret

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

MfG Spess

von Tim S. (maxxie)


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.

von Christoph H. (webturtle)


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.

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.