PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SPI "visualisiert"



digitali
23.01.2006, 23:25
Tachjen,

hab mal spasseshalber etwas mit dem SPI-Bus rumhantiert. Wollte demnaechst damit mal den MCP2515 (CAN-Controller) etwas naeher untersuchen.
Auf einem ATMega16 habe ich einfach frei Schnauze einige Pins von Port D als SPI deklariert und mal nen Zweikanal-Oszi drangehangen:

http://www.speckmann.de/images/spi.jpg

Auf Kanal 1 (Pind.0) haengt Clock. Hier sieht man sehr gut die 8 Takte. Auf Kanal 2 (Pind.1) sind die Signale von MOSI (DOut) sichtbar. Hier wird unterdessen ein Byte rausgeschoben. Und zwar dezimal die 151. Auch das kann man sehr gut erkennen. Von Rechts nach Links zaehlend ist Bit 1, 2, 4, 16 und 128 auf High, zusammen 151. Passt also wunderbar.
SPI arbeitet ja wie ein Schieberegister. Das DatenByte wird dabei bitweise auf MOSI "herausgeschoben".

Hier noch mal der Codeschnipsel dazu:

--------------------------------
$regfile = "m16def.dat"
$crystal = 16000000

Config Spi = Soft , Din = Pind.2 , Dout = Pind.1 , Ss = None , Clock = Pind.0

Dim X As Byte
Dim Y As Byte

X = 151
Spiinit

Do
Waitms 1
Y = Spimove(x)
Loop

End
--------------------------------

Ich hatte gerade Langeweile und vielleicht dient es ja dem einen oder anderen etwas zum Verstaendnis :)

Rage_Empire
24.01.2006, 12:16
Warum stellst du es nicht ins Download-Verzeichnis? So wird man es mit Sicherheit irgendwann nicht mehr finden...nur so ein Tip.

Kunki
13.03.2006, 21:06
Hallo,

ich beschäftige mich von der Schule aus mit dem SPI-Bus und versuche gerade zwei Atmegas miteinander komunizieren zu lassen. Klappt auch ganz gut (Master-Slave).
Nun mein Problem, welches eher ein Verständnisproblem ist.
Ich will nun ein bereitgestelltes Funkmodul über SPI ansteuern. Das Funkmodul schickt gewisse Anfragebytes, welche der Prozessor beantworten muss(Initzialisieren). Das Funkmodul generiert den Clock beim Senden, mein Atmega 32 ist auf Hard eigestellt. Normalerweise generiert ja der Master den Clock (in meinem Fall ja der Atmega), kann ich trotzdem Daten empfangen? Obwohl der Atmega für die zeit eigentlich Slave ist und den Clock nicht generieren darf?
Also auf den Punkt: Wenn ich den Befehl Spiin benutze, generiert der Atmega dann ein Clock?
Ich hoffe ich habe mein Problem deutlich erklärt, wäre klasse, wenn jemand kurz was dazu sagen könnte, da es sehr wichtig ist:)

schon mal danke im vorraus