Atmega durch Interrupt Ausbremsen

Gast #4558118
Lesenswert?
• ▲
▼
Hallo,
folgende Frage. Ich plane einen ATmega mit 16MHz laufen zu lassen. Aller 
10 ms wird ein Interrupt durch einen Nulldurchgang ausgelöst und durch 
einen Timer ein Phasenanschnitt erzeugt. Danach soll noch ein Baustein 
via I2C ausgelesen werden (bzw. in der Zeit in der der Timer den 
Phasenanschnitt macht) und ein Wert auf ein OLED geschrieben werden. 
Denke das ist Zeitlich auch alles kein Problem. Sollte das Display in 
den 10ms noch nicht fertig beschrieben sein, dann ist es nicht schlimm 
wenn es länger dauert zum beschreiben, da ja Phasenanschnitt und I2C 
auslesen beim Interrupt Nulldurchgang durchgeführt werden. Es wird auch 
nicht sinnvoll sein aller 10 ms etwas neues auf ein Display zu 
schreiben!

Nun aber die eigentliche Frage. Neben der ganzen Sache soll mit einer 
maximalen Frequenz von 4 kHz ein Sensor eingelesen werden (Drehzahl). 
Das soll auch als Interrupt passieren und nur eine Variable hochzählen, 
welche beim Nulldurchgang ausgewertet wird und genullt wird. Kann es 
passieren, dass ich mich durch diesen Interrupt meine MCU ausbremse oder 
sind 4 kHz parallel gar kein Problem?

Grüße Peter
Gast #4558124
Lesenswert?
• ▲
▼
Hallo Peter,

in eine ISR macht man nur das notwendigste.
So den Timer setzen und ein Signal/ Event an das Hauptprogramm senden.
Dort kann man in aller Ruhe i2c bedienen und auch langsame Ausgaben 
machen.

Eine i2c Kommunikation kann man nicht unterbrechen, also schön alles der 
Reihe nach - per I2C Queue.
Gast #4558127
Lesenswert?
• ▲
▼
Peter schrieb:
> Kann es passieren, dass ich mich durch diesen Interrupt meine MCU
> ausbremse oder sind 4 kHz parallel gar kein Problem?

Wenn du die 4kHz auf einen Zähler gibst, merkt die MCU nichtmal, dass da 
4kHz vorhanden sind.

Falls du allerdings mit 4kHz einen Interrupt auslösen möchtest, darfst 
du nicht beliebig viel Zirkus in die ISR packen.
Gast #4558129
Lesenswert?
• ▲
▼
In der ISR mit den 4 kHz wird wie gesagt nur eine Variable um eins 
erhöht.
Den einen Baustein kann ich statt mit I2C auch mit SPI auslesen. Gibt 
mir das Vorteile? Der Baustein muss zwingend aller 10 ms (also beim 
Nulldurchgang) auslesen werden. Darum wollte ich das direkt in der ISR 
mit machen.
(Firma: www.harerod.de) Persönliche Seite #4558173
Lesenswert?
• ▲
▼
Der absolute Verbrauch an Rechenzeit ist wohl weniger ein Problem.
Allerdings erhöht, bei gleicher oder höherer Priorität, der zweite 
Interrupt den Jitter des ersten Interrupts.

Auf einer MCU mit festen Interruptprioritäten sortierst Du also am 
besten die externen Interruptquellen nach gewünschter Priorität.

Bei MCU mit einstellbarer Interruptpriorität kannst Du das auch per 
Firmware machen.

Die Antwort auf Deine nächste Frage liefert das Datenblatt der uns 
unbekannten MCU und Dein Datenblatt.
#4558179
Lesenswert?
• ▲
▼
Peter schrieb:
> In der ISR mit den 4 kHz wird wie gesagt nur eine Variable um eins
> erhöht.
> Den einen Baustein kann ich statt mit I2C auch mit SPI auslesen. Gibt
> mir das Vorteile? Der Baustein muss zwingend aller 10 ms (also beim
> Nulldurchgang) auslesen werden. Darum wollte ich das direkt in der ISR
> mit machen.

Theoretisch ja, praktisch aber wohl kaum. Wie groß ist das Datenpaket, 
daß du per I2C austauschst?
Gast #4558223
Lesenswert?
• ▲
▼
Hab gerade das mit dem Zähler/Counter gelesen. Das heist an einen 
externen Pin der zu einem Counter gehört den Sensor anschließen. 
Unabhängig vom Programm zählt dieser einfach hoch und ich kann das 
Register auslesen und Nullen wann ich will?
Gast #4558268
Lesenswert?
• ▲
▼
Peter schrieb:
> Unabhängig vom Programm zählt dieser einfach hoch und ich kann das
> Register auslesen und Nullen wann ich will?

Lass den Zähler doch ganz in Ruhe vor sich hin zählen und pfusche ihm 
nicht dazwischen. Sonst kann es passieren, dass Pulse verloren gehen. 
Merke dir einfach den vorherigen Zählerstand und rechne die Differenz 
aus.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren