mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Interruptrate ATMega32 (16Mhz)


Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
Ich brauche für ein Messgerät eine schnelle Erfassung von TTL-Pegeln.
Leider finde ich nirgends die Information wie lange ein ATMega für das 
Erfassen und verarbeiten (Sprung in die Int-Routine) eines Interrupts 
brauch.
Das heißt wie oft ein Pegelwechsel pro Sekunde am Int-Pin passieren kann 
ohne das der µC Signale nicht erfasst(verpasst).
In der Int-Routine steht nur ein einfacher (1 Tacktzeit) Befehl.
Danke für jede Hilfe und viele Grüße!!
Merlin

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Leider finde ich nirgends die Information wie lange ein ATMega für das
>Erfassen und verarbeiten (Sprung in die Int-Routine) eines Interrupts
>brauch.

Suchwort: ' Interrupt Response Time'. Bei mir S.15.

MfG Spess

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann such' mal im Datenblatt nach "response", da müsstest Du fündig 
werden. Dazu kommt dann der Sprung über den Vektor und der Rücksprung 
per Reti mit zusammen weiteren 7 Takten. Und dann noch die in der ISR 
anfallende Arbeit.

...

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Ich brauche für ein Messgerät eine schnelle Erfassung von TTL-Pegeln.
>Leider finde ich nirgends die Information wie lange ein ATMega für das
>Erfassen und verarbeiten (Sprung in die Int-Routine) eines Interrupts
>brauch.

Wie schnell muss das denn sein?
Möglicherweise könnte man dir ganz schnell sagen
das es nicht funktionieren wird.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>In der Int-Routine steht nur ein einfacher (1 Tacktzeit) Befehl.

Kann nicht sein. Ein 'reti' hat schon vier Takte.

MfG Spess

Autor: doc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da da nur ein Befehl stehen soll, willst du bestimmt was zählen.
Nur, dafür brauchst du erstmal garkeinen Interrupt ;-)

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnellen Antworten und die Hilfe!
In der Routine wird nur eine Variable erhöt (um 1).
Das würde aber bedeuten das wenn ich eine Schleife benutze die
weniger als 11 Taktzyklen brauch ,(2 If-Abfragen gegebenfalls 
Variable+1) würde ich besser da stehen...
Das ganze soll Daten aus einem Komparator erfassen...und das möglichst 
schnell!
Ich weiß aufjedenfall das Bascom >50 Taktzyklen braucht weil es noch 
diverse Register sichert.
Wie könnte ich das am schnellsten realisieren?
Ist die Schleife eine Möglichkeit oder braucht Bascom/C auch so lange 
wegen den If-Abfragen?
Ich hatte bis jetzt nie das Problem das Befehle besonders schnell 
ausgeführt werden müssen.
Vielen Dank für die Hilfe!

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Das ganze soll Daten aus einem Komparator erfassen...und das möglichst
>schnell!

Wie schnell?

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Ich hatte bis jetzt nie das Problem das Befehle besonders schnell
>ausgeführt werden müssen.

Dann ist halt Assembler angesagt.

MfG Spess

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Dann ist halt Assembler angesagt.

Buhaha!

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Buhaha!

Danke für die Zustimmung.

MfG Spess

Autor: doc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Übrigens kann einer der Zähler kann auch direkt mit einem PIN verbunden 
werden.
Dann ist dafür kein Interrupt notwendig.

Siehe Datenblatt: External Clock Source

Autor: doc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...und ist verdammt schnell ;-)

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bascom und schnell sind zwei Worte, die nicht zusammenpassen.

...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Merlin (Gast)

>Das ganze soll Daten aus einem Komparator erfassen...und das möglichst
>schnell!

Netiquette!!!

Red nicht um den heissen Brei run, sag mal KONKRET was du machen willst! 
Und nenn ein paar ZAHLEN!

MFG
Falk

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bascom und schnell sind zwei Worte, die nicht zusammenpassen.

Wieso?
Mit Bascom ist der Arbeitsspeicher schnell voll...
Passt doch...

Autor: screwdriver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Bascom und schnell sind zwei Worte, die nicht zusammenpassen.

Falls in der ISR lediglich eine Bytevariable inkrementiert werden soll 
generiert BASCOM aus der Codezeile
   Count = Count + 1
folgenden Code:

13:          Count = Count + 1                    Count ist Bytevariable
+0000004F:   E6A0        LDI     R26,0x60         Load immediate
+00000050:   E0B0        LDI     R27,0x00         Load immediate
13:          Count = Count + 1
+00000051:   918C        LD      R24,X            Load indirect
+00000052:   5F8F        SUBI    R24,0xFF         Subtract immediate
13:          Count = Count + 1
+00000053:   938C        ST      X,R24            Store indirect

Macht das GCC mit einer Volatile-Variablen wirklich kürzer?

Okay, um die BASCOM-typische Push/Pop-Orgie zu vermeiden, sollte man 
sich um die Register, die in der ISR benutzt werden, dann doch selbst 
kümmern.

screwdriver

Autor: Hannes Lux (hannes)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Okay, um die BASCOM-typische Push/Pop-Orgie zu vermeiden, sollte man
> sich um die Register, die in der ISR benutzt werden, dann doch selbst
> kümmern.

Da liegt der Hase im Pfeffer. Die meisten Bascom-User benutzen ja Bascom 
deshalb, damit sie auch ohne das dazu erforderliche Wissen Erfolge 
erziehlen können. Denn wenn man dieses Wissen hat, dann braucht es kein 
Bascom mehr, dann geht es auch in ASM.

...

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Hannes Lux (hannes)

>> Okay, um die BASCOM-typische Push/Pop-Orgie zu vermeiden, sollte man
>> sich um die Register, die in der ISR benutzt werden, dann doch selbst
>> kümmern.

Ein HALBWEGS gescheiter Compiler kann das auch.

>Da liegt der Hase im Pfeffer. Die meisten Bascom-User benutzen ja Bascom
>deshalb, damit sie auch ohne das dazu erforderliche Wissen Erfolge
>erziehlen können.

Was am Anfang mehr als sinnvoll ist.

> Denn wenn man dieses Wissen hat, dann braucht es kein
>Bascom mehr, dann geht es auch in ASM.

Ach Hannes, du schon wieder mit deinem ASM-Fetisch.

"Wer nur ein Hammer hat, sieht überall nur Nägel."

MFG
Falk

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hmm @ Falk Brunner : Ich will ein Spektrometer bauen was über einen 
DA-Wandler einen Fenster-Diskriminator steuert und nach einer bestimmten 
Zeit ein neues Fenster einstellt.
In dieser Zeit (sie ist unkritisch und kann auch 100ms lang sein!) 
sollen unregelmäßige Impulse aus der Detektoreinheit 
(PMT+Plastikszintillator) die durch die Diskriminatorschaltung auf 
TTl-Level begracht worden sind gezählt werden.
Die Impulse können sehr schnell hintereinander auftreten , deswegen soll 
die Erfassung so schnell wie eben mit einem ATMega32 auf 16Mhz (20Mhz) 
möglich geschehen!

Die Idee mit der External Clock Source ist eigentlich ganz gut aber geht 
das den mit unregelmäßigen Impulsen(ich glaub nicht..)?

Ich habe mich eher mit Schaltungstechnik beschäftigt als mit dem 
Programmieren deswegen würde ich gerne in Bascom programmieren als in 
Assembler.
Auch weil ich so etwas wie ein Graphisches Menü auf einem G-LCD 
darstellen will !

Deswegen frag ich ja ob es einen Weg gibt schnelle Impulszählung zu 
realisieren...(Assembler einbinden v=v+1 dürfte nicht das Problem 
sein...aber Vergleiche hätte ich zum Beispiel keine Ahnung und müsste 
mich erst einlesen!)
Bascom oder C macht (solange man den Registerkram bei Bascom vermeidet) 
bei so einfachen Befehlen wie v=v+1 kaum einen Unterschied oder=?

Viele Grüße und Danke für die Hilfe!

Autor: Michael (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit nur einer Zeile in der ISR kann man bis ~200 - 250 kHz messen (bei 
16 Mhz)... hab ich selbst ausprobiert. Programmierung in C

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Merlin (Gast)

>Die Impulse können sehr schnell hintereinander auftreten , deswegen soll
>die Erfassung so schnell wie eben mit einem ATMega32 auf 16Mhz (20Mhz)
>möglich geschehen!

Dafür nutzt man einen Timer im AVR, welcher extern getaktet wird.

>Die Idee mit der External Clock Source ist eigentlich ganz gut aber geht
>das den mit unregelmäßigen Impulsen(ich glaub nicht..)?

Doch. Die Pulse müssen mind. 2 CPU-Takte breit sein, also bei 20 MHz 
mind. 100ns.

>Programmieren deswegen würde ich gerne in Bascom programmieren als in
>Assembler.

Kann man machen, wenn man weiss was man tut (wie immer im Leben).

>Auch weil ich so etwas wie ein Graphisches Menü auf einem G-LCD
>darstellen will !

Das ist das kleinste Problem und eher Schnick Schnack.

>Deswegen frag ich ja ob es einen Weg gibt schnelle Impulszählung zu
>realisieren...

Siehe oben!

MFG
Falk

P S Und nochmal. ZAHLEN!!!! Wie breit sind deine Pulse minimal? Es sei 
denn, du willst Threads wie diesen wiederholen

Beitrag "Phasenverschiebung mit dem Oszi messen"

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok sry das ich die Daten erst jetzt gebe:

Rise time : 0,7-3 ns Fall time: 1 -10 ns FWHM(Puls-Weite): 1,3-5ns

Also viel zu kurz für die Timer-Methode! Aber die Pulse lassen sich ja 
Zeitlich auf min 100ns verlängern das ist kein Problem!
Danke für die Hilfe! Das hört sich echt klasse an(kannte ich nicht, aber 
wie gesagt µC bin ich noch nicht sehr routiniert)!
Bedeutet das ich kann eine externe Taktquelle(Quarz) benutzen 
(µC-Takt)und ein beliebigen Pin als Taktquelle für einen Timer benutzen?

Danke für die Hilfe!

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sry das sind die Angaben der analogen Pulse die werden durch die 
Verarbeitung natürlich noch verkürzt auf etwa  5ns.

Autor: Christopher G. (cbg)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du willst mit einem µC, dessen Taktsignal eine Periodendauer von 50 ns 
hat, also Pulse messen, die 5 ns lang sind?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Merlin (Gast)

>Sry das sind die Angaben der analogen Pulse die werden durch die
>Verarbeitung natürlich noch verkürzt auf etwa  5ns.

Und was bringt dich auf die wahnwitzige Idee, 5ns (NANOSEKUNDEN) breite 
Pulse mit einem 20 MHz AVR in SOFTWARE messen zu wollen?

Leute gibts . .  .

Willst du nicht gleich ein Space Shuttle aus nem 2er Golf bauen?

Die Pulsbreite muss man per Monoflop auf eben die genannten mind. 
100ns verlängern. Aber dann darf die Wiederholrate nicht unter 200ns, 
sprich 5 MHz liegen.

MFG
Falk

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab ich doch geschrieben :
Zitat:
"Also viel zu kurz für die Timer-Methode! Aber die Pulse lassen sich ja
Zeitlich auf min 100ns verlängern das ist kein Problem!"

Naja aber wie ist das den jetzt mit dem Timer...welchen Pin kann ich als 
Taktquelle nehmen?

Autor: Merlin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK hat sich erledigt! Danke für die Hilfe ! Das was mir fehlte war die 
Counter Funktion von Timer!

...und ich werde natürlich kein! Monoflop benutzen sondern den ATMega 
auf -271 Grad kühlen und mit 400Mhz takten....;)

Autor: doc (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
troll.

Autor: Jiro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Man könnte auch erst auf einen Zähler ic gehen und diesen dann 
regelmäßig auslesen mit dem avr.

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.