Forum: Mikrocontroller und Digitale Elektronik SPI und I/O Pin zeiten


von Alex (Gast)


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

von Michael M. (Gast)


Lesenswert?

seite 156 im datenblatt sagt, dass du was falsch machst.

von Alex (Gast)


Lesenswert?

Stimmt der SS Pin wird automatisch auf input gesetzt. Sollte nun ein 
Highsignal anliegen blockiert der uC. Damit hat sich mein Gedankengang 
wohl erledigt  Danke für die Hilfe
Grüße
Alex

von Michael M. (Gast)


Lesenswert?

ne. deine spi am atmel ist doch master, oder? dann kannst den SS als 
normalen I/O benutzen.

da stimmt was andres nicht.

von Axel K. (axel)


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 ^^

von Michael M. (Gast)


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 =)

von Axel K. (axel)


Lesenswert?


von Alex (Gast)


Lesenswert?

Ich werde das nachher mal ausprobieren. 8 Takte sollten hier in Ordnung 
sein. Danke für die Hilfe!

Von mir auch Glückwünsche zum 1000sten :)
Grüße
Alex

von Alex (Gast)


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

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.