Forum: Mikrocontroller und Digitale Elektronik SPI pin "austauschen"


von 123 (Gast)


Lesenswert?

Hallo,

folgendes Problem:
Ich habe einen Arduino Mega 2560, bei dem der Pin 52, also der SCK Pin 
der ICSP-Schnittstelle 
(http://images.wikia.com/qmast/images/d/df/8u2ISP.png), leider auf dauer 
ein ist (defekt durch Überspannung an diesem pin...).
Meine Frage daraus ist, ob man diesen Pin auch durch einen anderen 
Austauschen kann also sprich einen anderen Pin als SCK definieren kann 
bzw. ob man den Serial Clock mit einen Programmschnipsel auf einem 
anderen I/O Pin erzeugen kann?
Wenn ja wie bzw. wo? Welche Frequenz hat der Serial Clock üblicherweise 
oder ist das nicht sooo wichtig?

von c-hater (Gast)


Lesenswert?

123 schrieb:

> Meine Frage daraus ist, ob man diesen Pin auch durch einen anderen
> Austauschen kann also sprich einen anderen Pin als SCK definieren kann

Nein.

> bzw. ob man den Serial Clock mit einen Programmschnipsel auf einem
> anderen I/O Pin erzeugen kann?

Ja, aber nicht mit Arduino-Scheiße, da muß Asm ran. Das ist das einzig 
Wahre. Im Sinne von: Das ist das einzige mit reproduzierbarem exakten 
Timing.

Aber: der Mega2560 hat doch bestimmt auch schon SPI-Master-fähige 
USARTs. Nimmst du einfach diese?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

SPI braucht kein "reproduzierbares Timing". Das ist das Gute daran...

von Dr. Sommer (Gast)


Lesenswert?

c-hater schrieb:
> Ja, aber nicht mit Arduino-Scheiße, da muß Asm ran. Das ist das einzig
> Wahre. Im Sinne von: Das ist das einzige mit reproduzierbarem exakten
> Timing.
Da die Arduino-Scheiße einfach nur C++ und eine Library ist, kann man da 
ganz wunderbar asm ("...") schreiben für exaktes Timing in ASM. Und 
ansonsten hat Lothar natürlich recht...

von tommy (Gast)


Lesenswert?

Im Titel schreibt er "SPI", im Text aber von "ICSP" !

von Kaj (Gast)


Lesenswert?

tommy schrieb:
> Im Titel schreibt er "SPI", im Text aber von "ICSP" !
Und? Einfach mal in den Schaltplan von dem Arduinoboard schauen, und du 
siehst das der SCK Pin (PB1) sowohl als Pin52 rausgeführt wird, aber 
ebenfalls auf den ICSP-Header geführt ist. Kein Grund ihm irgendwas 
vorzuwerfen.

c-hater schrieb:
>> bzw. ob man den Serial Clock mit einen Programmschnipsel auf einem
>> anderen I/O Pin erzeugen kann?
>
> Ja, aber nicht mit Arduino-Scheiße, da muß Asm ran.
Pins kann man natürlich nur in Asm auf High und Low setzen. Dieses 
Feature gibt es für C und/oder C++ leider nicht... echt schade. So ein 
Mist aber auch...

c-hater schrieb:
> Im Sinne von: Das ist das einzige mit reproduzierbarem exakten
> Timing.
Weil Arduino-User auch ständig solch super zeitkritische sachen machen, 
wo es auf jeden Takt ankommt... Ich bin mir in diesem Falle zu 100% 
sicher das keinerlei Notwendigkeit besteht Asm zu nutzen.

123 schrieb:
> Meine Frage daraus ist, ob man diesen Pin auch durch einen anderen
> Austauschen kann also sprich einen anderen Pin als SCK definieren kann
definieren ist etwas ungeschickt ausgedrückt. Du kannst einen anderen 
Pin als SCK benutzen, klar. Ist dann allerdings nicht so schnell wie der 
Hardware-Clk es war. Einfach einen Pin aussuchen, auf ausgang schalten, 
und dann abwechselnd auf high und low schalten. Und schon hast du einen 
neuen SCK-Pin.

Grüße

von tommy (Gast)


Lesenswert?

Kaj schrieb:
> tommy schrieb:
>> Im Titel schreibt er "SPI", im Text aber von "ICSP" !
> Und? Einfach mal in den Schaltplan von dem Arduinoboard schauen, und du
> siehst das der SCK Pin (PB1) sowohl als Pin52 rausgeführt wird, aber
> ebenfalls auf den ICSP-Header geführt ist. Kein Grund ihm irgendwas
> vorzuwerfen.

Ja, ist schon bisserl spät ;-)
ICSP braucht er ja nicht, denn er hat ja den Bootloader.

N8

von Ralph (Gast)


Lesenswert?

c-hater schrieb:
> da muß Asm ran. Das ist das einzig
> Wahre. Im Sinne von: Das ist das einzige mit reproduzierbarem exakten
> Timing.

Absoluter Schwachsinn.

Die Aussage passt nur wenn das der einzig ausgeführte Code ist.

Sobald da noch etwas anderes läuft, und da ganz besonders Interrupts, 
kannst du das vergessen.

Der vom Compiler aus C(++) erzeugte Code ist da aber ganz genauso 
reproduzierbar in seinem Timinig wie der handgeschrieben Assembler.

Ob der handgeschrieben Assembler vielleicht ein paar Zyklen weniger 
braucht als der vom Compiler erzeugt ist ein anderes Thema.

von Mike (Gast)


Lesenswert?

c-hater schrieb:
>> bzw. ob man den Serial Clock mit einen Programmschnipsel auf einem
>> anderen I/O Pin erzeugen kann?
>
> Ja, aber nicht mit Arduino-Scheiße, da muß Asm ran.

Wenn du das in C nicht gebacken kriegst, solltest du dich aus der 
Diskussion hier vielleicht einfach mal raus halten.

von Max H. (hartl192)


Lesenswert?

Wenn der Arduino keinen zweiten SPI hat wäre Soft SPI eine Lösung. Wenn 
der TO das Hardware SPI weiterbenutzen und nur den Clock in Software 
machen will halte ich das vor allem bei großen Geschwindigkeiten für 
unmöglich, wenn das Arduino zeug wie digitalwrite verwendet wird. Bei 
Soft SPI sollte es auch mit digitalwrite/read klappen, ist dann halt 
entsprechend langsam

Soft SPI: 
http://www.iesensor.com/blog/2013/07/09/software-spi-library-for-arduino-tested-on-mega2560/

Mike schrieb:
> Wenn du das in C nicht gebacken kriegst, solltest du dich aus der
> Diskussion hier vielleicht einfach mal raus halten.
Und wenn du nichts Sinnvolles beizutragen hast, solltest du dich auch 
raushalten.

: Bearbeitet durch User
von Peter D. (peda)


Lesenswert?

Die 4 UARTs lassen sich bequem als SPI-Master benutzen. Ist sogar 
schneller, da gepuffert.

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.