Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupts mit SPI
ElSwallow
05.01.2005, 16:47
Hallo,
habe für mein kleines Roboterprojekt zwei AT90S4433 per SPI verbunden.
Die Kommunikation funktioniert auch, wenn ich die Abfrage des SPI's in einer Schleife ausführe.
Jedoch wenn ich das ganze mit einem Interrupt abfrage, funktioniert die Wertübergabe einmal, danach bleibt der Wert immer gleich.
Jemand 'ne Idee oder ein ähnliches Skript das funktioniert (Master und Slave)???
Gruss L@rs
Hier der Code meines Masters!!!
'*******************SPI-Master ************************************
$regfile = "4433def.dat"
$crystal = 4000000
Config Spi = Hard , Interrupt = Off , Data Order = Msb , Master = Yes , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 0
sbi DDRB,5 ' SCK output
cbi DDRB,4 ' MISO input
sbi DDRB,3 ' MOSI output
Dim Richtung As Byte 'var ist die Variable die übergeben wird
Spiinit
'********************************Hauptschleife**** ******************************
Main:
Richtung = "r"
Spiout Richtung , 1 'ein Byte senden
Wait 3
Richtung = "v"
Spiout Richtung , 1 'ein Byte senden
Wait 3
Goto Main
'************************************************* ******************************
End 'end program
Und nun der Code meines Slaves (funktioniert so leider nicht )
'*******************SPI-Slave mit Interrupt************************************
$regfile = "4433def.dat"
$crystal = 4000000
Config Spi = Hard , Interrupt = On , Data Order = Msb , Master = No , Polarity = Low , Phase = 0 , Clockrate = 128 , Noss = 0
sbi DDRB,5 ' SCK output
cbi DDRB,4 ' MISO input
sbi DDRB,3 ' MOSI output
Enable Interrupts
Dim Richtung As Byte
On Spi Daten_empfangen
Ddrb = &B11100000
Portd = &B00000000
Spiinit
'**********************************Hauptschleife** ******************************
Main:
Do
Portd = &B00000000
Select Case Richtung
Case "v"
Goto Vorwaerts
Case "r"
Goto Rueckwaerts
End Select
Loop
'******************************Daten_empfangen**** ******************************
Daten_empfangen:
Spiin Richtung , 1
Richtung = "r"
Return
'*******************************Vorwaerts********* ******************************
Vorwaerts:
Richtung = 0 'Zurücksetzen von Richtung
Portd = &B01100000 'Ausgabe an Motortreiber
Wait 3 'solange läuft der Motor
Goto Main
'*********************************Rueckwaerts***** ******************************
Rueckwaerts:
Richtung = 0 'Zurücksetzen von Richtung
Portd = &B10100000 'Ausgabe an Motortreiber
Wait 3 'solange läuft der Motor
Goto Main
End
Hat irgendwer 'ne Idee??? ](*,)
ElSwallow
09.01.2005, 19:09
Hat eigentlich irgendwer schon Erfahrung mit SPI???
Franziskus
09.01.2005, 21:30
Ich habe zwer keine Anung dafon noch nicht !
Kauf dir diese Buch, da wird ales erleutert
AVR- RISC Mikrocontroller
ISBN 3-7723-5476-9
sebastian.heyn
10.01.2005, 09:52
Hi, Hast du noch nen I/O an jedem avr frei? dann könntest du ja über eine extraleitung nen interrupt auslösen!?
Hi, für den Slave stell' ich mir den Clock-Pin eigentlich als Input vor.
Du definierst bei Master & Slave als Output.
mfg robert
Edit: hab' ich den SPIINIT übersehen oder isser nicht da ?
Edit2: Widerruf: gut, ich sag nix mehr (neue Brille)
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.