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.
Man kann natuerlich immer einen Soft-SPI machen und beliebige Port-Pins verwenden.
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
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
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.
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.