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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.