Hallo, ich habe 8 Signalquellen, die einen Nadelimpuls von 18uS High mit einer Freq bis max 1KHz ausgeben. Diese würde ich gerne mit einem Mega644 erfassen und die Impulse je Sekunde aufaddieren. Erkennt der Mega644 an seinen interruptfähigen Eingängen die Nadelimpulse von 18uS sicher? Dass die entsprechende Interruptroutine kurz sein sollte ist klar. Viele Grüße Die Nadel
Hi Lt. Datenblatt: Minimum pulse width for asynchronous external interrupt 50 ns MfG Spess
Datenblatt Seite 61- Table 11-2 Minimum pulse width for asynchronous external interrupt: 50ns Evtl. mal genau mit dem Kapitel des Datenblattes beschäftigen, welches man braucht ;)
Etwas tricky ist, 8 Eingänge mit 8 verschiedenen Interruptvektoren zu finden. Die Pin-Change-Eingänge reagieren auf beide Flanken, d.h. da mußt Du ne Totzeit >18µs programmieren, damit nur eine Flanke zählt. Peter
Ich hatte vor, mir den Status der 8 Bits in einer 8 Bit Variable in der Int-Routine zu sichern und dann zu vergleichen ob die Pins von 0->1 gewechselt haben. Damit umgeht man auch das Problem, dass auftreten würde, wenn 2 oder mehr der Impulse überlappend auftreten und JEWEILS 2 mal den Int auslösen.
Hallo nur zur Info, habe das Problem mit folgender ISR zur vollsten zufriedenheit lösen können volatile uint8_t g_pinc; volatile uint8_t g_ticks[8]; void init(void) { uint8_t i; //Input DDRC = 0x00; PORTC = 0xFF; // External Interrupt PCICR |= (1<<PCIE2); PCMSK2 = 0xFF; // Misc for (i=0; i<8; i++) { g_ticks[i] = 0; } g_pinc = 0xFF; sei(); } // External Interrupt from PORT C ISR(SIG_PIN_CHANGE2) { uint8_t l_pinc, l_new_ticks, i; l_pinc = PINC; l_new_ticks = (l_pinc ^ g_pinc) & (~l_pinc); if (l_new_ticks) { for (i=0; i<8; i++) { g_ticks[i] += (l_new_ticks & 0x01); l_new_ticks >>= 1; } } g_pinc = l_pinc; }
Du willst nicht die ca. 18µs Werte addieren, sondern die Ereignisse mit max. 1kHz zählen. Dann ist die Geschichte unkritisch.
18 Mikrosievert? Also das wird schwer ohne zusätzliche Hardware zu detektieren.
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.