Hallo oberallgeier,

Zitat Zitat von oberallgeier Beitrag anzeigen
Die verlangte Funktion wird NUR erreicht, wenn ISC01 und ISC00 zu Null gesetzt sind, das heißt lt Datenblatt ".. The low level of INT0 generates an interrupt request .."

Auszug aus dem Datenblatt zu mega328p (ATmega328-P_Atmel-42735B_Complete-11-2016, S 89):
Code:
ISC01 . ISC00 . . Description
 .0 . . . 0 . . . The low level of INT0 generates an interrupt request.
 .0 . . . 1 . . . Any logical change on INT0 generates an interrupt request.
 .1 . . . 0 . . . The falling edge of INT0 generates an interrupt request.
 .1 . . . 1 . . . The rising edge of INT0 generates an interrupt request.
In Deinem geposteten Testcode wird ISC00 aber auf 1 gesetzt und damit entgegen dem Kommentar in der gleichen Zeile richtig auf "Any logical change on INT0 generates an interrupt request." gesetzt.

Der ganze Testcode
Code:
  void XTI0_int( void )            // Initialisiere Interrupt 0, PD2, auf ANY edge
 {                              //
// - - - - - - - - - - - - - - - -
  EIMSK   |=  (1<<INT0);        // erlaube INT0
  EICRA   |=  (1<<ISC00);       // low level of INT0 generates an interrupt request
                                //  =>  im Test triggert   J E D E   Flanke
                                //  Oskar zeigt korrektes Abbild von PD2/INT0
Alle anderen Varianten zeigen (Oskar) entweder keine exakte Kopie der Pulsform, nur 20 ms - Pulse oder gar nichts.
Find ich in Ordnung. Der Testcode tut das was er soll.

Derselbe Code in den komplex(er)en Projektquellen führt zu keiner Ausgabe der auf INT0 eingelesenen Daten.

Fragen
Hat bitte jemand eine Idee was da falsch läuft?
Kann mir bitte jemand einen Rat geben wo ich noch nach Fehlern suchen kann?
Möglicherweise ist der Bug in den anderen Projektquellen. Der Testcodeprogrammteil im komplexen Code scheint mir in Ordnung.

Gruß
Searcher