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
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
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.
...
>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.
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!
Ü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
@ 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
>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
> 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.
...
@ 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
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!
@ 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"
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!
@ 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
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?
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....;)