-         

Ergebnis 1 bis 6 von 6

Thema: Interrupts mit SPI

  1. #1

    Interrupts mit SPI

    Anzeige

    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

  2. #2
    Gast

    Hier mein eingesetzter Code

    Hier der Code meines Masters!!!

    Code:
    '*******************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 )

    Code:
    '*******************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???

  3. #3
    Hat eigentlich irgendwer schon Erfahrung mit SPI???

  4. #4
    Benutzer Stammmitglied
    Registriert seit
    29.12.2003
    Ort
    Stekborn
    Beiträge
    44
    Ich habe zwer keine Anung dafon noch nicht !
    Kauf dir diese Buch, da wird ales erleutert

    AVR- RISC Mikrocontroller
    ISBN 3-7723-5476-9

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.11.2004
    Beiträge
    370
    Hi, Hast du noch nen I/O an jedem AVR frei? dann könntest du ja über eine extraleitung nen interrupt auslösen!?

  6. #6
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.836
    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)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •