Nadelimpulse 18uS sicher an INT Pin erkennen

Gast #2217094
Lesenswert?

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
Gast #2217161
Lesenswert?

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.
Gast #2223014
Lesenswert?

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;

}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren