- 3D-Druck Einstieg und Tipps         
Seite 1 von 7 123 ... LetzteLetzte
Ergebnis 1 bis 10 von 62

Thema: ASM für SPI .. ist das richtig so?

  1. #1
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29

    ASM für SPI .. ist das richtig so?

    Anzeige

    Powerstation Test
    Hallo

    Mein CAN Controller (Slave) will einfach nicht funktionieren.
    Vielleicht ist das SPI falsch konfiguriert. Wäre echt schön wenn jemand
    helfen könnte. Das ganze ist auf nem Steckbrett aufgebaut. Hier der Code der im Mega8515 (Master) abgelegt ist:

    ; -------------------------- KONFIGURIEREN -------------------
    ldi temp, 0b10100000 ; Output = SCK & MOSI
    out DDRB, temp

    ldi temp, 0b01010001 ; SPIEnabled, MasterMode, SPI Clock Rate=
    ; OSC/16 = 250kHz @ 4MHz OSC
    out SPCR, temp

    ; ---------------------- per SPI was senden ------------------
    cbi PortB, 4 ; /CS pull down
    ldi temp, 0b00000010 ; WRITE-Instruction
    rcall spiout
    sbi PortB, 4 ; release /CS



    ; -------------------- SUBFUNKTION FÜR SENDEN ------------
    spiout:
    out SPDR, temp
    wait_spi:
    sbis SPSR,SPIF ; Transmission complete?
    rjmp wait_spi

    ret ; back...



    Ich bin schon am verzweifeln, ich weis echt nicht wo ich den Fehler
    suchen soll. Mein restliches Programm bin ich schon hundertmal
    durchgegangen. Leider programmieren das alle bis auch mich in C.
    Deshalb krieg ich auch von nirgendwo Hilfe. Ist doch zum heulen.

  2. #2
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Du musst das SPIF zurücksetzen.

    Code:
    		SPDR = data;
    		
    		// wait for xmission to complete
    		while (!(SPSR & (1 << SPIF)));
    			
    		// clear SPIF	
    		data = SPDR;
    Ist zwar C, aber das raffst du schon
    Disclaimer: none. Sue me.

  3. #3
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    und ich dachte schon das wärs gewesen... ich habs so gemacht:

    spiout:

    out SPDR, temp
    wait_spi:
    sbis SPSR,SPIF ; Transmission complete?
    rjmp wait_spi
    ; SPIF is set

    in temp2, SPSR
    in temp2, SPDR ; release SPIF by reading Register

    ret ; back to programm..


    leider nicht geholfen, aber ich denke dass es einer von vielen Fehlern ist.

    Dank Dir!

  4. #4
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    CS wird nicht als OUT geschaltet. Zumindest passt's nicht zu deinem Kommentar...
    Disclaimer: none. Sue me.

  5. #5
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    Du meinst diese Zeile?
    ldi temp, 0b10100000 ; Output = SCK & MOSI

    SCK ist bit 7 und MOSI bit 5
    beide = 1 = output

    Oder hab ich was übersehen?

  6. #6
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Port B.4 schaltet ein CS-Signal, momentan zwischen high-Z und Pullup. Mag sein, daß es ok ist. Sieht aber etwas wunderlich aus...
    Disclaimer: none. Sue me.

  7. #7
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    ach so wenn du das meinst, dass VOR
    cbi PortB, 4 ; /CS pull down

    eigentlich noch stehen müsste:
    sbi PortB, 4 ; /CS up

    dann hast du recht. Das habe ich auch gerade bemerkt. Erst hoch , dann tief, am Ende wieder hoch. So muss es.

  8. #8
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    Ein weiterer schwerer Fehler ist:
    Ich habe /SS auf Input gehabt.

    Es muss aber Output sein. (Laut Datenblatt unlogisch)

    Jetzt geht die CAN Verbindung. Nur ist wieder etwas komisch:

    Das gesendete Byte wird ca. 12 mal übertragen (eben warens 15 Mal) danach steht die Übertragung still. Weis jemand Rat?

  9. #9
    Neuer Benutzer Öfters hier
    Registriert seit
    23.03.2006
    Beiträge
    29
    Wenn ich das Sendeintervall halbiere (halb so lange Pause zwischen dem Senden) werden doppelt so viele Bytes übertragen.... also etwa 24. Danach scheint die Verbindung wie unterbrochen...

  10. #10
    Erfahrener Benutzer Robotik Einstein Avatar von SprinterSB
    Registriert seit
    09.06.2005
    Ort
    An der Saar
    Beiträge
    2.802
    Kann sein daß der CAN-Controller abschmiert? (Puffer voll, ...)
    Disclaimer: none. Sue me.

Seite 1 von 7 123 ... LetzteLetzte

Berechtigungen

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

fchao-Sinus-Wechselrichter AliExpress