Problem mit Ext. Interrupt bei Atmega8

Gast #2280116
Hallo,

ich habe ein kleines Problem mit meinen Atmega8 Bausteinen. Ich möchte 
derzeit 2 µCs hintereinander schalten. Sprich der 1. µC erzeugt ein 
Taktsignal und gibt dieses an den 2. µC weiter.

Derzeit möchte ich eigentlich das Taktsignal direkt an den INT0 Eingang 
des 2. µCs legen. Nur leider reagiert der µC bei der Einstellung Rising 
Edge selbst bei der kleinsten Änderung (im mV Bereich). Muss man das 
Taktsignal noch durch irgendwelche Filter und andere Schaltung jagen um 
es zu säubern?

Hier nochmal der Ausschnitt der ISR:
1
// Atmega8 16PU
2

3
ISR (INT0_vect) {
4
  if (checkBit(~PIND,2) && !impuls)
5
    impuls = 1;
6
}
7

8
void init_Interrupt(void) {
9
  rstBit(DDRD, 2);        // PORTD 2 (INT0) als eingang
10
  setBit(MCUCSR, ISC00);  // interrupt sense auf positive flanke
11
  setBit(MCUCSR, ISC01);
12
}

Eigentlich möchte ich in der ISR nur feststellen, dass ein steigendes 
Taktsignal des 1. µC ankommt und dann das Byte impuls setzen. Dies wird 
dann im Hauptprogramm verarbeitet.

Ich habe selbst schon mit einem Taktgenerator ausprobiert, es scheint 
auch zu funktionieren aber nur bei sehr niedrigen Frequenzen (ca. 10Hz) 
für die reale Anwendung sollen es aber 10kHz werden. Auch wenn ich den 
Taktgenerator ausschalte, erzeugt er ein dauerhaftes High-Signal von ca. 
600mV. Diese Spannung reicht dann auch schon aus, damit der µC immer in 
die ISR springt.

Ich bin mittlerweile mit meinem Latein am Ende und hoffe das ihr 
vielleicht ein paar gute Ratschläge habt.

Gruß Zyondor
#2280202
Zyondor schrieb:
> Auch wenn ich den
> Taktgenerator ausschalte, erzeugt er ein dauerhaftes High-Signal von ca.
> 600mV. Diese Spannung reicht dann auch schon aus, damit der µC immer in
> die ISR springt.

Das ist Quatsch.
Die Schwelle liegt ziemlich genau bei VCC/2, also etwa 2,5V.

Ich vermute mal, Du läßt den Eingang offen und dann fängt der sich alles 
mögliche ein.


Zyondor schrieb:
> für die reale Anwendung sollen es aber 10kHz werden.

Das ist schon ne ordentliche Interruptlast (800 Zyklen bei 8MHz).
Da müssen sich alle anderen Interrupts am Riemen reißen, daß sie nicht 
länger brauchen.

Was willst Du überhaupt damit bezwecken?


Peter

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 15 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.