AVR: PinX lesen waehrend SPI?

T

Thorsten Ostermann

Guest
Hallo NG!

KAnn man eigentlich bei den AVRs den zum MISO gehörenden Pinstautus
PinB6 beim Mega162) lesen, während der SPI noch läuft? Ich habe hier
einen Söave am Mega hängen, der nicht ganz synchron zum Mega läuft.
Dadurch geht mir immer das letzte Bit durch die Lappen. Das würde ich
gerne "von Hand" nachlesen und in's Ergbenis reinschiften. Sobald ich
den SPI abschalte, wird aber der Slave wieder hochohmig...

Kann es eigentlich sein, das das Bild auf S. 164 im Datenblatt
(2513F–AVR–12/03, Timing bei SPI-Mode 1,3) falsch ist? Wenn ich das DB
richtig verstehe, müßte im Mode1 bei steigender Flanke der Ausgang
(MOSI) geändert werden, wärend MISO auf der fallenden Flanke gesampled
wird. Im Bild passiert beides bei der fallenden Flanke. Irgendwie muß
man doch die Zeitverzögerung zwischen Master und Slave ausgleichen können?!

Gruß
Thorsten
--
Kunst kommt aber von 'können',
nicht von 'kennst du schon den neuesten trick?'
Gunther in oecher.computer zum Thema "Gutes Webdesign"
 
Thorsten Ostermann wrote:
Hallo NG!
Hallo

KAnn man eigentlich bei den AVRs den zum MISO gehörenden Pinstautus
PinB6 beim Mega162) lesen, während der SPI noch läuft? Ich habe hier
einen Söave am Mega hängen, der nicht ganz synchron zum Mega läuft.
Dadurch geht mir immer das letzte Bit durch die Lappen. Das würde ich
gerne "von Hand" nachlesen und in's Ergbenis reinschiften. Sobald ich
den SPI abschalte, wird aber der Slave wieder hochohmig...
Das Schaltbild der Ports (S. 67) zeigt, dass der Pin Status fuer Port B
mittels RPB aus dem Syncronisierungslatch gelesen und ueber den internen
Bus zur ALU tranportiert wird. Der Tabelle 33 (S. 73) kann man
entnehmen, wie der Port angesteuert wird. In deinem Fall (SPI im Master
mode => SPCR->SPE=1 und SPCR->MSTR=1) wird also DDOEB6=1 (Direction
override aktiv), DDOVB6=0 (Input mode), PUOEB6=1 und
PUOVB6=PORTB6*/SFIOR->PUD (Pull-Up wie bei Inputs ueblich), DIEOE=0
(Input override nicht aktiv). Damit ist die Eingangsschaltung von PB6
aktiv und wird vom externen Signal bzw. dem Pull-Up getrieben (Muss so
sein, da die SPI an DIB6 sonst kein MISO Signal abgreifen koennte).

Was du machen willst sollte also moeglich sein. Durch den
Syncronisierungslatch ist das gelesene Signal aber verzoegert (siehe S.
64/65). Der aus PINB->PB6 gelesene Wert entspricht immer dem Zustand des
zugehoerigen Pins in der Mitte des letzten Taktes!

Kann es eigentlich sein, das das Bild auf S. 164 im Datenblatt
(2513F-AVR-12/03, Timing bei SPI-Mode 1,3) falsch ist? Wenn ich das DB
richtig verstehe, müßte im Mode1 bei steigender Flanke der Ausgang
(MOSI) geändert werden, wärend MISO auf der fallenden Flanke gesampled
wird.
So ist es doch auch eingezeichnet. "Change of MOSI" zeigt Aenderungen
auf der steigenden Flanke von SCK und "Sample of MISO" zeigt einen Puls
auf der fallenden Flanke von SCK.

Im Bild passiert beides bei der fallenden Flanke. Irgendwie muß
man doch die Zeitverzögerung zwischen Master und Slave ausgleichen können?!
Nein, MISO wird vom Slave auf der steigenden Flanke von SCK geaendert
und vom Master auf der fallenden gesampled. Das Bild ist richtig.


Micha
--
Wer sagte das doch noch mal: Er koenne garnicht so viel essen, wie er
kotzen koenne?
Horst-D Winzler in de.sci.electronics
 

Welcome to EDABoard.com

Sponsor

Back
Top