www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik SPI SS-Pin in Programmschleife


Autor: Joerg Seemann (joerg_seemann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo hallo,

ich hab mir schon wieder zwei tage versaut, mit spi.
problem: ich habe SPI-anweisungen geschrieben und das klappt soweit.

nur, wenn ich die anweisung in eine schleife setze scheint sich der
takt um den faktor 20 zu erhöhen.

beispiel:

reset
...
spi_test
loop:
rjmp loop

...funktioniert

reset
...
spi_test   //funktioniert
loop:
spi_test   //20fache Geschwindigkeit
rjmp loop


????? kann jemand das problem eingrenzen ?????

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was hat das denn mit dem SS-Pin zu tun? Außerdem kann meine Glaskugel 
leider nicht erkennen, was "spi_test" überhaupt macht...

Autor: Joerg Seemann (joerg_seemann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
naja, deiner Glaskugel sei gesagt, dass "spi_test" mal angenommen ein 
byte übermitteln soll. der ablauf ist ss auf low setzen, daten schicken, 
ss wieder
auf high. klappt soweit, aber nicht in der Schleife.


nochwas für das Kügelchen:

SPI_TEST:

  cbi PORTB, 0x02
  out SPDR,data

SPI_Fertisch:

  in temp, SPSR
  sbrs temp, SPIF
  brne SPI_Fertisch
  sbi PORTB, 0x02

ret

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Erde an Glaskugel:

- CPU ?
- SPI-init ?
- SPI-Speed erwartet, gemessen, wie gemssen ?
- komplettes Testprogramm als Anhang

Mist, jetzt isse ganz trüb, nichts mehr zu erkennen.


Peter

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Klar, kann auch nicht funktionieren. Eine Funktion ruft man ja auch mit 
einem (r)call-Befehl auf...

Autor: johnny.m (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...Mich wundert allerdings, dass die erste Variante angeblich 
funktioniert...

Autor: Joerg Seemann (joerg_seemann)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ja, also hier das komplette programm.

wie gesagt, die funktion klappt, solange sie nich in der schleife 
steckt.

Autor: Joerg Seemann (joerg_seemann)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
irgendwelche vorschläge?

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also im Datenblatt machen die das so (ohne SS):

out SPDR,r16

Wait_Transmit:

sbis SPSR,SPIF
rjmp Wait_Transmit
ret

Vieleicht macht das zugreifen auf SPSR einen Unterschied ?
Keine Ahnung, bin kein Assemblerheld. Schreibs doch in C ;) duckweg

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich versuchs noch mal ;)

> nur, wenn ich die anweisung in eine schleife setze scheint sich der
> takt um den faktor 20 zu erhöhen.

  ldi temp,0x5D // SPI Takt F_CPU/16
  out SPCR,temp
  ldi temp,(0<<SPI2X) // kein Double Speed
  out SPSR,temp

Also bei 16MHz CPU Takt hast du 1MHz SPI Takt.
Der kann sich aber nicht um den Faktor 20 vergrößern.
Maximaler SPI Takt bei 16MHz wäre 8MHz.
Solange du in SPCR SPR1 und SPR0 nicht änderst,
ändert sich auch nicht dein SPI Takt. Der bleibt starr
gekoppelt an den Systemtakt.

Wie hast du das 20 fach gemessen ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.