PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : SPI...aber wie?



full_metall_bunny
24.08.2005, 21:39
Hallo Leute, ich hoffe einer von euch kann mir helfen.
Ich will zwei Chips über SPI miteinander Kommunizieren lassen. Einer steckt auf einem STK500 und einer auf einer selbstgelöteten Platine. Beides Mega8.
Der auf dem Stk500 ist der Slave und wenn er das Byte "0101_1010" erhalten hat, soll eine bestimmte LED blinken.
Klappt irgendwie aber nicht.
Diverse Messungen mit dem Oszi haben ergeben, dass die Signale an den Pins anliegen. Aber übernehmen tut er sie offensichtlich nicht. Vielleicht ist was am Quellcode falsch? Ich kann den fehler nicht finden. Bitte helft wenn ihr könnt. Habe ein ähnliches Problem mit I2C.

Master


'------------------------------------------------------------------
' SPI-Master-radbaugruppe-SS.BAS
'Programm zum Nachweis der SPI-Funktiom des Masters mit selbstgewähltem SS-Pin
'Master ist ein Mega8 auf dem Board der Radbaugruppe mit 16MHz Taktfrequenz
'Es handelt sich um die angepasste Version von "spi-master-Stk500,bas"
'/SS hier selbst gewählt (PC2)
'----------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 16000000
$baud = 19200

Dim B As Byte
'PB4(MISO) ist Eingang, Rest sind Ausgänge
Ddrb = &B1110_1111
'alle Pins von PortC= Ausgänge
Ddrc = &B1111_1111

'selbstgewählter /SS-Pin
Ss Alias Portc.2
'zur Übersicht
Mosi Alias Portb.3
Miso Alias Portb.4
Sck Alias Portb.5
'----------------

Enable Interrupts

Config Spi = Hard , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 16
'zu sendendes Byte
B = &B0101_1010

'Datenregister initialisieren
Spdr = 0 ' start with sending 0 the first time

'SPI pins initialisieren
Spiinit

Do

Reset Ss '/SS auf log. "0" ziehen -> Start der Übertrag
Spiout B , 1 'Sendebefehl, sendet 1 Byte
Set Ss '/SS wieder log."1" -> beendet Übertrag.

Loop


End


Slave


'------------------------------------------------------------------
' SPI-slave_stk500-LED.BAS
'Programm zum Nachweis der SPI-Funktiom des Masters
'Master ist ein Mega8 auf dem STK500 mit 8MHz Taktfrequenz
'+ LED 5 blimkt, wenn Datenregister SPDR = 0 (Startwert)
'+ LED 4 blinkt, wenn Datenregister SPDR = B (B = vom Master gesendetes Byte)
'----------------------------------------------------------------
$regfile = "m8def.dat"
$crystal = 8000000
$baud = 19200



Ddrb = &B0001_0000
Config Portd = Output 'LEDs
'\SS = Portb.2
'MOSI = Portb.3
'MISO = Portb.4
'SCK = Portb.5

'Hilfsvariable um Lesezugriff auf SPDR zu testen
Dim Hilf As Byte
Dim B As Byte

Dim _ssspdr As Byte ' dies ist das SPI SLAVE SPDR register
Dim _ssspif As Bit ' SPI interrupt revceive bit
Dim _ssspsr As Byte 'SPI Statusregister Bit 7 muss gesetzt werden, wenn Übertragung beendet
B = &B0101_1010

'SPI konfigurieren
Config Spi = Hard , Data Order = Msb , Master = No , Polarity = Low , Phase = 0

'SPI pins initialisieren
Spiinit
_ssspdr = 0

Do
Hilf = _ssspdr
If Hilf = 0 Then
Portd.5 = Not Portd.5
Waitms 400
End If
If Hilf = B Then
Portd.4 = Not Portd.4
'Portd = _ssspsr
Waitms 400
End If

Loop

End


MfG
Christian

full_metall_bunny
28.08.2005, 11:56
Konnte jemand von den Downloadern schon was damit anfangen oder hat einen Fehler gefunden?
Würde mich über Feedback freuen.

Christian