Zeit vom kürzesten Puls der beim INTx noch erkannt wird ?

dino03

Aktives Mitglied
27. Okt. 2008
6.760
20
38
Sprachen
  1. BascomAVR
  2. Assembler
Hallo,

ich hab mal ne Frage ;)
Hat schon jemand ausprobiert wie kurz ein Impuls sein darf das er bei 20MHz Systemtakt vom INTx-Eingang eines Mega168 noch sauber als Interrupt erkannt wird? Ich hab nämlich langsam Bedenken ob der Takt bei den Pulsen von 50-100ns noch ausreicht ...
Analyzer für I2C/TWI und 1-Wire/microLAN - #41

Beim PCINTx ist ja eine Schaltung mit etlichen Gattern und FlipFlops zwischengeschaltet die das Eingangssignal mit dem Systemtakt synchronisiert. Wie sieht das aber beim normalen INTx aus ? Ich hab im Datenblatt keine Infos über Verhältnisse zum Systemtakt oder kürzeste Pulszeiten gefunden.

Sollte man für diese kurzen Pulse besser auf Flankentriggerung oder auf Pegeltriggerung gehen ? Also auf die erste negative Flanke des Impulses triggern oder besser den negativen Pegel des Pulses als Triggerereignis verwenden ?

Bin gespannt ob sich überhaupt schonmal jemand mit so kurzen Ereignissen am Atmel rumgeschlagen hat :rolleyes:

Gruß
Dino
 
Hallo Dino,
Sollte man für diese kurzen Pulse besser auf Flankentriggerung oder auf Pegeltriggerung gehen ?

ich bin mir nicht 100%ig sicher, aber ich glaube bei Flankentriggerung muss der Pegel nach der Flanke mindestens einen Taktzyklus (1 Maschinenzyklus) konstant bleiben, sonst wird die Flanke nicht immer erkannt. Bei einer Pegeltriggerung muss der Pegel solange konstant bleiben, bis die aktuelle Instruktion abgearbeitet ist, das können also mehrere Maschinenzyklen sein.

Besser ist in deinem Falls dann Flankentriggerung. Minimale Pulsbreite wäre dann 50ns.

Gruß,
Dirk
 
Hi Dirk,

ich bin mir nicht 100%ig sicher, aber ich glaube bei Flankentriggerung muss der Pegel nach der Flanke mindestens einen Taktzyklus (1 Maschinenzyklus) konstant bleiben, sonst wird die Flanke nicht immer erkannt.
...
Besser ist in deinem Falls dann Flankentriggerung. Minimale Pulsbreite wäre dann 50ns.
wenn ich dann rechne das die Impulse asynchron zum Prozessortakt kommen muß die Breite also eher bei 100ns liegen.

Besten Dank schonmal für die Infos. Ich glaube ich muß mal mein neues DSO anheizen und die 2GS/s ausreizen um die Pulsdauer etwas genauer zu ermitteln :rolleyes: 34-50% Fehler in der Zeitmessung mit 24MS/s ist da etwas viel.

Eventuell muß ich den Atmel noch mit nem externen Oszillator mit 25MHz betreiben (Overclocking läßt grüßen). Oder ich baue vor den INTx ein RS-FlipFlop das ich mit dem Puls setze (Set-Eingang) und mit den ersten beiden Assemblerbefehlen in der ISR wieder zurücksetze (Pin auf Low, Pin wieder auf High für den Reset-Eingang). Damit habe ich dann schon die nächste Hardwarebeschleunigung drin :p Sozusagen eine Glitch-Erkennung oder Spike-Erkennung (oder wie man es auch nennen will).

Gruß
Dino
 
Hallo Dino,
wenn ich dann rechne das die Impulse asynchron zum Prozessortakt kommen muß die Breite also eher bei 100ns liegen.

die Periodendauer ist 50ns, dein Signal muss länger als 50ns einen logischen Zustand einnehmen, damit der Interrupt ausgelöst wird, es müssen dann aber keine 100ns sein.


Gruß,
Dirk
 
Hi Dirk,

die Periodendauer ist 50ns, dein Signal muss länger als 50ns einen logischen Zustand einnehmen, damit der Interrupt ausgelöst wird, es müssen dann aber keine 100ns sein.
wenn man ein wiederkehrendes Erfassungsfenster von 50ns (ein Taktzyklus vom Atmel) hat dann können selbst bei 90ns Pulsdauer auf jedem Taktzyklus (Erfassungsfenster) des Atmels im schlimmsten Fall lediglich 45ns liegen. Damit würde man Gefahr laufen den Puls nicht zu erkennen. Es werden also leider doch 100ns benötigt :(

Gruß
Dino
 
Hallo Dino,

ich habe nochmal ins Datenblatt gesehen, es geht um ein Sampling Fenster von 50ns. Du hast also recht.

Noch ein schönes Wochenende,
Dirk

Hier mal der Auszug aus dem Datenblatt:
If edge or toggle interrupt is selected, pulses that last longer than one clock period will
generate an interrupt. Shorter pulses are not guaranteed to generate an interrupt. If low level
interrupt is selected, the low level must be held until the completion of the currently executing
instruction to generate an interrupt.
 
Hi Dirk,

ich habe nochmal ins Datenblatt gesehen, es geht um ein Sampling Fenster von 50ns. Du hast also recht.
wenn die Schaltung so aufgebaut ist wie beim PCINT, dann läuft das Signal zuerst in ein D-Latch und wird während der ersten High-Phase des Systemtaktes gesampelt. Während der flogenden Low-Phase wird es dann anscheinend vom D-Latch in das folgende flankengetriggerte FlipFlop geladen. Man müßte den Pegel dann während der High-Phase vom Takt dauerhaft anliegen haben ... oder wenigstens kurz vor der fallenden Flanke des Systemtaktes. Das wären bei 20MHz dann 25ns Zeitfenster in dem vom Atmel gesampelt wird. Wenn die eine Änderung am Eingangspin reichen würde, dann sollte man mit minimalen 50ns Pulsdauer hinkommen.

Ich glaube ich muß das mal alles ausprobieren (irgendwann mal ... ) :rolleyes:

Ich hab den Kram mal mit dem neuen DSO angesehen und es sind Impulse von 84-120ns Länge. Also entweder zur Sicherheit auf minimum 100ns bringen oder was anderes tiefgreifenderes ausdenken. Die Zeitverlängerung ist wohl am einfachsten. Einfach nen kleinen Keramik-C parallel zum bereits existierenden. 22pF sind drin. Also sollten etwa 4,7pF zusätzlich ausreichen um auf etwas über 100ns zu kommen. Die Zeiten sollten dann bei etwa 102-145ns liegen. Die Bilder von den Impulsen sind im TWI-Analyzer-Thread (AVR-Projekte).

Gruß
Dino
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)