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
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
ne. deine spi am atmel ist doch master, oder? dann kannst den SS als normalen I/O benutzen. da stimmt was andres nicht.
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 ^^
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 =)
http://books.google.de/books?id=C9ueBI8_KtIC&pg=PA11&dq=mikrocontroller+programmierung+der+avr+risc+familie&cd=2#v=onepage&q=&f=false Seite 379 oben übrigens ein klasse Buch!
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.