Forum: Mikrocontroller und Digitale Elektronik Atmega durch Interrupt Ausbremsen


von Peter (Gast)


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

von Karl M. (Gast)


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.

von guess (Gast)


Lesenswert?

Peter schrieb:
> passieren, dass ich mich durch diesen Interrupt meine MCU ausbremse oder
> sind 4 kHz parallel gar kein Problem?

Kein Problem!

von Wolfgang (Gast)


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.

von Peter (Gast)


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.

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


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.

von The D. (thedaz)


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?

von S. Landolt (Gast)


Lesenswert?

> In der ISR mit den 4 kHz wird wie gesagt nur eine Variable um eins erhöht.

Timer/Counter mit 'External clock source on Tn pin'?

von Peter (Gast)


Lesenswert?

Es werden 16- Bit übertragen mit einem Atmega 2560

von Wolfgang (Gast)


Lesenswert?

Peter schrieb:
> In der ISR mit den 4 kHz wird wie gesagt nur eine Variable um eins
> erhöht.

Warum brauchst du dafür einen Interrupt? Einen Wert um eins erhöhen, 
kann ein Zähler genauso gut.

von The D. (thedaz)


Lesenswert?

Peter schrieb:
> Es werden 16- Bit übertragen mit einem Atmega 2560

In dem Fall wäre SPI mehr als 30% schneller bei gleicher Taktrate.

von Christian H. (netzwanze) Benutzerseite


Lesenswert?

Marcus H. schrieb:
> Die Antwort auf Deine nächste Frage liefert das Datenblatt der uns
> unbekannten MCU und Dein Datenblatt.

Siehe Betreff:
> Atmega durch Interrupt Ausbremsen

von Marcus H. (Firma: www.harerod.de) (lungfish) Benutzerseite


Lesenswert?

Christian H. schrieb:
> Marcus H. schrieb:
>> Die Antwort auf Deine nächste Frage liefert das Datenblatt der uns
>> unbekannten MCU und Dein Datenblatt.
>
> Siehe Betreff:
>> Atmega durch Interrupt Ausbremsen

Danke, ich korrigiere: sollte Datenblatt der unbekannten MCU und 
Schaltplan heißen.

von Peter (Gast)


Lesenswert?

An dem Interruptpin ist ein Sensor angeschlossen der Ttl Signale 
liefert. Diese Pulse werden ausgewertet

von Peter (Gast)


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?

von S. Landolt (Gast)


Lesenswert?

Ja.

von The D. (thedaz)


Lesenswert?

Kannst auch beim Erreichen eines von dir bestimmten Zählerstands einen 
Interrupt auslösen lassen.

von Peter (Gast)


Lesenswert?

Dann wäre das ja die perfekte Lösung :) dem Counter ist doch bestimmt 
auch egal ob SPI oder I2C gerade was machen oder?

von The D. (thedaz)


Lesenswert?

Ja

von Peter (Gast)


Lesenswert?

Cool Danke für eure Hilfe!

von Wolfgang (Gast)


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.

von The D. (thedaz)


Lesenswert?

Heiner schrieb im Beitrag #4558264:
> noob

Sehe ich nicht so. Er ist doch lernwillig.

von guess (Gast)


Lesenswert?

Heiner schrieb im Beitrag #4558315:
> The D. schrieb:
>> Er ist doch lernwillig.
>
> Hab ich irgendwo was anderes behaupted?
> Tip: lesen lernen :)

Tip: verständlich ausdrücken! In ganzen Sätzen schreiben. Bezug nehmen. 
Es versteht dich sonst keiner.

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.