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?
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?
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...
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
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
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.
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.
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.