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
SlaveCode:'------------------------------------------------------------------ ' 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
MfGCode:'------------------------------------------------------------------ ' 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
Christian







Zitieren

Lesezeichen