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 :)
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 :)