mikrocontroller.net

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


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
seite 156 im datenblatt sagt, dass du was falsch machst.

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Michael M. (Gast)
Datum:

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

da stimmt was andres nicht.

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht 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 ^^

Autor: Michael M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
http://books.google.de/books?id=C9ueBI8_KtIC&pg=PA...

Seite 379 oben


übrigens ein klasse Buch!

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.