SPI und I/O Pin zeiten

Gast #1637973
Lesenswert?

Hallo zusammen!

Ich habe ein Problem, und zwar habe ich mir einen IO Pin eines ATmega644 
zum auslesen von Daten beschaltet. Was ich vorher nicht gesehen habe 
ist, das der Pin gleichzeitig auch der SS Pin der SPI ist. Allerdings 
benutze ich diese als Master. Jedes mal wenn ich nun den SS Pin auf high 
lege blockiert der ATmega644 normal weil der denkt, das er nun Slave 
sein soll und Wartet auf Daten (Falls der Pin auf Eingang steht) 
.Deshalb will ich einen workaround programmieren. Wenn der Pin auf 
Ausgang steht blockiert er nähmlich nicht. Und zwar soll dieses 
folgendermaßen aussehen:

spi deaktivieren
pin auf input setzen
pin auslesen
pin auf output setzen
spi aktivieren(/Initialisieren

So sollte er nicht mehr blockieren. Allerdings sind die Abfragen auch 
Zeitkritisch. Im Datenblatt steht nicht sehr viel hierrüber. Jemand ne 
ahnung welche Zeiten das initialisieren der SPI benötigt und wieviel 
Zeit es dauert einen Pin von Ausgang auf Eingang zu setzen?

Bin für jede hilfe Dankbar!
Grüße
Alex
#1638233
Lesenswert?

Ich glaube ich habe verstanden was du meinst. Du benutzt deinen SS Pin 
zum Einlesen von Zuständen ne?


Das Problem ist klar erkannt und so wie du es Lösen willst geht es auch.



Zu den Timings:

-SPI deaktivieren

SPE in SPCR auf 0 setzen   =   2Takte

-Pin SS auf Eingang

Entsprechend Byte ins DDRB Register schreiben = 2 Takte


Daten einlesen....... = 1 Takt


und das ganze wieder umgekehrt = 4 Takte

MfG Axel


edit:
Du kannst den SS im SPI Masterbetrieb entweder als Eingang oder Ausgang 
proggen. WENN er als EINGANG dann muss er immer aus Highliegen um den 
Masterbetrieb beizubehalten


edit2: Glückwunsch adrem zum 1000sten Post ^^
Gast #1638235
Lesenswert?

Axel Krüger schrieb:
> Das Problem ist klar erkannt und so wie du es Lösen willst geht es auch.
hm, sry, seh ich anders. laut datenblatt sollte das doch gehen.
habs vorher schnell in nem simulator ausprobiert - der meinte auch, dass 
der SS normaler I/O ist, wenn die SPI als master betrieben wird.

> edit2: Glückwunsch adrem zum 1000sten Post ^^
danke ^^
puh, zum glück wars kein blöder post - die chancen dazu standen nicht 
schlecht =)
Gast #1638459
Lesenswert?

Hallo
also es funktioniert so wie gedacht. Allerdings mit 2 Takten unterschied 
:)

spi deaktivieren
pin auf input setzen

2 Takte warten asm("nop");

pin auslesen

pin auf output setzen
spi aktivieren/Initialisieren



Falls hier nicht 2 Takte gewartet wird zeigt der mir die falschen werte 
an.
Danke für die hilfe!


Grüße
Alex

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren