Forum: Mikrocontroller und Digitale Elektronik Läuft der SPI Master-Mode im Hintergrund?


von Gerhard (Gast)


Lesenswert?

Hallo,

ich beschäftige mich derzeit mit der Ansteuerung des Siemens s65
Displays mit einem mega32 unter Bascom.
Nun habe ich die zeitkritischen Sachen
(Shiftout) schon alle in Assembler
innerhalb Bascom programmiert.
Nun meine Frage : Bringt es noch was die Ausgabe
der Daten auf hard SPI umzustellen ??
Meiner Meinung nach nur dann ,wenn die SPI Ausgabe im Hintergrund
(so wie ein Timer) laufen würde.
Oder ist es bei SPI auch so dass der Prozzi nichts anderes
machen kann bis er die Daten rausgepumpt hat.
Hoffe mir kann da wer helfen, danke.

Gruss Gerhard

von D. W. (dave) Benutzerseite


Lesenswert?

Ein Zeitgewinn ist es sicher.

Aktuell musst du ja jedes Bit anschaun und dann entsprechend die Pins 
setzen. Du bist also andauernd beschäftigt und schaffst sicher nicht 
F_CPU / 2.

Wenn du das Hardware SPI verwendest, dann sieht es so aus:
SPDR = data;
while(warten...)
SPDR = data;
while(warten...)

Kommt natürlich jetzt auf die Frequenz an, mit der du die Daten aus derm 
SP-Interface rauspustest: Wenn du die maximale Geschwindigkeit hast, 
dann ist das Byte so schnell draußen, dass es sich nicht lohnt, was 
zwischendrin zu machen.

Ich würde auf jedenfall Hardware machen, schneller ist es sicher.

von Gerhard (Gast)


Lesenswert?

Hallo David,

danke für deine rasche Antwort.
Muss ich doch nochmal probieren ob ich's mit Hardware SPI zum laufen 
bringe. Bis jetzt leider ohne Erfolg.

Gruss Gerhard

von D. W. (dave) Benutzerseite


Lesenswert?

Du musst warten, bis das Byte rausgeshiftet ist. Mit Bascom kenn ich 
mich leider nicht aus, aber SPI war eigentlich noch nie ein Problem.

Zum S65 gibts was in der Codesammlung, falls du das noch nicht weißt.

von Gast (Gast)


Lesenswert?

und ganz wichtig: auf den SS-Pin achten (entwder als Ausgang setzten 
oder an VCC siehe Datenblatt), wenn das nicht stimmt, dann schaltet der 
MC vom Master in den Slave Mode, und dann wird´s nichts mit der 
Übertragung.

von Gerhard (Gast)


Lesenswert?

Hallo,

na wenn das nicht im Hintergrund läuft dann wirds mit Hardware SPI
nicht um gar so viel schneller.
Sind doch immerhin 6 Bytes (48 Bit's) die pro Pixel rausgeshiftet werden
müssen.
Werd ich aber heute gleich noch mal testen.
Nächste Überlegung wäre einen extra AVR zu verwenden der die bytes an 
einem Port parallel erhält und brav rauspumpt.

Gruss Gerhard

von Johannes M. (johnny-m)


Lesenswert?

Hardware-SPI geht auch Interrupt-gesteuert (vermute, das ist es, was Du 
mit "im Hintergrund laufen" meinst). Allerdings kommen bei hohen 
SPI-Takten die Interrupts sehr schnell hintereinander, so dass der µC eh 
zu nix anderem mehr kommt. Dann kannste auch warten.

In einer Hochsprache programmiert würde das bei den Frequenzen sowieso 
eng, weil allein der Aufruf einer ISR plus den Sachen, die der Compiler 
noch da reinschiebt (Register sichern) u.U. schon deutlich länger dauert 
als das Rausschieben eines Bytes. Wenns Dir wirklich auf Geschwindigkeit 
ankommt, biste da vermutlich ohne Interrupt schneller.

von Gerhard (Gast)


Lesenswert?

Hallo,

hab's jetzt auf HW SPI umprogrammiert
Läuft schon etwas schneller mit F_CPU / 2.
Also nochmals Danke für Eure Hilfe.

Gruss Gerhard

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.