Hi,
ich habe jetzt mal eine SPI Kommunikation zwischen zwei Mega32 aufgebaut. Allerdings bin ich nicht ganz zufrieden: Mein Master überträgt 4 bytes zum Slave. Nur scheint dadurch der Slave total ausgelastet zu sein. Das liegt wohl daran dass ich ein "on SPI" interrupt verwende, aber wie komme ich ohne den aus..?
Hier der Code vom Master:
Der code vom Slave:Code:'MASTER '===CHIP SETTINGS=== $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 19200 'SPI Config Spi = Hard , Interrupt = Off , Data Order = Lsb , Master = Yes , Polarity = High , Phase = 1 , Clockrate = 4 'SPI Dim A(4) As Byte Enable Interrupts Spiinit 'Main Loop soll nur die 4 Bytes verändern Do If A(1) < 200 Then Incr A(1) Else A(1) = 16 End If If A(2) < 250 Then Incr A(2) Else A(2) = 0 End If If A(3) > 1 Then Decr A(3) Else A(3) = 233 End If If A(4) > 60 Then Decr A(4) Else A(4) = 160 End If Spiout A(1) , 4 Waitms 3 '300Hz transfer von 4 bytes ist das ziel Loop
Alle Leitungen (MOSI, MISO, SCK, SS) sind direkt 1:1 verbunden. Hatte es zwar erst aus "Sicherheitsgründen" mit 10k Widerständen versucht aber da ging gar nix.Code:'===CHIP SETTINGS=== $regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 $baud = 19200 'SPI Config Spi = Hard , Interrupt = On , Data Order = Lsb , Master = No , Polarity = High , Phase = 1 , Clockrate = 4 Dim A(4) As Byte Enable Interrupts On Spi Wasempfangen Enable Spi Spiinit Do Toggle Led_gelb Waitms 3 'wenn die led regelmäßig hell ist -> µC läuft ungestört. Ist aber nicht so Loop 'SPI Wasempfangen: Spiin A(1) , 4 Toggle Led_rot 'diese flackert auch sehr unregelmäßig Return
Hat jemand einen Tipp wie ich ohne Interrupts auskomme? Ich dachte mein Haupt-µC soll der Slave sein, da er dann kein SCK erzeugen muss. Ist das sinnvoll? Wie könnte überhaupt ein Master Daten vom Slave empfangen?
Was auch ein bisschen nervt: Zum programmieren (über die ISP Schnittstelle) muss ich jedes mal die SPI Verbindung Master/Slave trennen, sonst werden die µC's nicht erkannt. Gibts da vielleicht nen Trick?
Vielen Dank für eure Hilfe!






Zitieren

Lesezeichen