Forum: Mikrocontroller und Digitale Elektronik Programmablauf und Interrupt


von Alex (Gast)


Lesenswert?

Hallo,
Ich möchte jede 100ms ein Erreignis vom µC ausgeführt bekommen.
Das werde ich über den Timer Interrupt machen.

Der µC kommuniziert mit einem IC mittels SPI.
Ausserdem möchte ich wie geschieben jede 100ms (muss nicht sehr genau 
sein) z.b. ein Pin toggeln.

Wenn der Interrupt zum toggeln wärend der SPI Verbindung ausgelöst wird, 
wird ja die SPI-Verb. unterbrochen (oder?). Das kann ich gar nicht 
gebrauchen.

Richtig wäre:
Timer läuft über -> Wenn Datenübertragung stattfindet, dann warten -> 
Datenübertragung zu ende -> Pin toggeln.

Komme nicht drauf, wie ich das machen soll.
Kann, bitte Einer helfen?

Danke
Gruss
Alex

von ... (Gast)


Lesenswert?

Als erstes solltest Du mal mitteilen, welchen µC Du verwendest!. Je nach 
Typ ist das Verhalten unterschiedlich. Läuft die SPI Kommunikation auch 
über Interrupts? Eventuell während der Datenübertragung einfach 
Interrupts ausschalten? Was willst Du noch alles im Timerinterrupt 
erledigen?

von Falk B. (falk)


Lesenswert?

Siehe Interrupt.

>Wenn der Interrupt zum toggeln wärend der SPI Verbindung ausgelöst wird,
>wird ja die SPI-Verb. unterbrochen (oder?).

Wieso? Ausserdem kann man das sinnvoll so zusammstellen, dass sich 
garantiert nix gegenseitig behindert, siehe Multitasking.

MfG
Falk

von Alex (Gast)


Lesenswert?

Ich verwende den atmega32 und "programmiere" in Bascom.

Wärend der Interrupts wird eine andere Bootschaft über SPI geschickt.

Ein Beispiel:
Ich schicke auf den Bus ständig die Uhrzeit (ca. 300ms).
Unabhängig davon will ich auf den Bus (ca. jede 100ms) eine andere 
Nachricht schicken, deren Inhalt immer gleich ist.

Hoffe das ist verständlich genung.

Gruss Alex

von Blödmann (Gast)


Lesenswert?

Was bringt Dich nun, im Lichte des im Datenblatt beschriebenen, auf 
diese Frage? D.h. wenn Du Dir die Beschreibung im Datenblatt durchliest, 
was genau scheint Dir Deine Frage notwendig zu machen?
Ansonsten könnte man hier nämlich nur das Datenblatt wiedergeben und 
dazu habe ich keine Lust.

von Karl H. (kbuchegg)


Lesenswert?

> Ein Beispiel:
> Ich schicke auf den Bus ständig die Uhrzeit (ca. 300ms).
> Unabhängig davon will ich auf den Bus (ca. jede 100ms) eine andere
> Nachricht schicken, deren Inhalt immer gleich ist.
>
> Hoffe das ist verständlich genung.

Natürlich ist es das.
Und, wie löst du das im täglichen Leben?

Du hast ein Funkgerät.
Alle 3 Sekunden sagt Franz laut die Uhrzeit während du jede Sekunde 
"Links", "Rechts", "Oben", und "Unten" ja nachdem was erforderlich ist, 
dem Kranführer mitteilst.
Dein Kranführer versteht nichts, weil ihr beide durcheinander quatscht.

Wie löst du dieses 'Problem'?


(Hinweis: Wie hat es die Nasa früher gemacht und macht es heute noch? Da 
sind 30 Techniker in einem Raum, jeder vor seiner Konsole. Alle wollen 
was vom Astronauten. Die Nasa hat für so etwas einen CAPCOM. Das ist ein 
Mann im Kontrollzentrum. Jeder der etwas von einem Astronauten will, 
muss sich beim CAPCOM melden, der das dann zum Astronauten durchgibt. 
Wie kann so ein Vorgehen die beschriebene Problematik lösen, dass der 
Astronaut am anderen Ende nix versteht?)

von holger (Gast)


Lesenswert?

>Wärend der Interrupts wird eine andere Bootschaft über SPI geschickt.

Vergiss es. Ins SPI schreibst du entweder nur im Interrupt
oder nur in der Hauptschleife.

>Ich schicke auf den Bus ständig die Uhrzeit (ca. 300ms).
>Unabhängig davon will ich auf den Bus (ca. jede 100ms) eine andere
>Nachricht schicken, deren Inhalt immer gleich ist.

Dann setzt du in deinem Interrupt ein Flag wenn er
aufgetreten ist und sendest deine 100ms Message in der Hauptschleife.
Dann zählst du im Interrupt noch bis drei und setzt
ein Flag das du bis drei gezählt hast. Dann sendest
du deine 300ms Message in der Hauptschleife.

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.