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.
Hi
>In der Int-Routine steht nur ein einfacher (1 Tacktzeit) Befehl.
Kann nicht sein. Ein 'reti' hat schon vier Takte.
MfG Spess
Da da nur ein Befehl stehen soll, willst du bestimmt was zählen. Nur, dafür brauchst du erstmal garkeinen Interrupt ;-)
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!
>Das ganze soll Daten aus einem Komparator erfassen...und das möglichst >schnell! Wie schnell?
Hi >Ich hatte bis jetzt nie das Problem das Befehle besonders schnell >ausgeführt werden müssen. Dann ist halt Assembler angesagt. MfG Spess
Ü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
Bascom und schnell sind zwei Worte, die nicht zusammenpassen. ...
@ 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.
Wieso?
Mit Bascom ist der Arbeitsspeicher schnell voll...
Passt doch...
>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!
Mit nur einer Zeile in der ISR kann man bis ~200 - 250 kHz messen (bei 16 Mhz)... hab ich selbst ausprobiert. Programmierung in C
@ 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!
Sry das sind die Angaben der analogen Pulse die werden durch die Verarbeitung natürlich noch verkürzt auf etwa 5ns.
Du willst mit einem µC, dessen Taktsignal eine Periodendauer von 50 ns hat, also Pulse messen, die 5 ns lang sind?
@ 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....;)
Man könnte auch erst auf einen Zähler ic gehen und diesen dann regelmäßig auslesen mit dem avr.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.