Zitat Zitat von askazo
Kann es sein, dass ...
- Spannung bricht durch zu hohen Stromfluss zusammen
- Controller geht durch mangelnde Spannung aus ...
Solche Problemchen hatten mich eine Weile genervt. Heute nicht mehr. Ich mache zu Beginn meiner Programme immer, gleich nach Initialisierung der Ports und noch bevor irgendwelche Interrupts gesetzt oder Variablen definiert werden, eine Blinkschleife, siehe den folgenden Code, ziemlich weit unten, ab "for(i=0; i<10; i++)" :

Code:
// =================================================================================
// =====  Subroutinen  =============================================================
// =================================================================================
/*### Programm pausieren lassen  !! Der Pausenwert ist nur experimentell !*/ 

void waitms(uint16_t ms) 
{ 
   for(; ms>0; ms--) 
   { 
//      uint16_t __c = 4000; 
      uint16_t __c = 4913;      // für m168/20MHz ohne IRS
      __asm__ volatile ( 
         "1: sbiw %0,1" "\n\t" 
         "brne 1b" 
         : "=w" (__c) 
         : "0" (__c) 
      ); 
   } 
} 
// =================================================================================
// =====  ENDE    Subroutinen  =====================================================
// =================================================================================


// =================================================================================
// ===  HAUPTProgramm ==============================================================
// Initialisierungen, LED1 kurzblinken als Signal für Programmstart

  int main(void)
{        
  uint16_t i;
               
// Pins/Ports als Ein- (0) oder Ausgänge (1) konfigurieren, Pull Ups (1) aktivieren
//   A = Ausgang, E = Eingang ohne , EU = Eingang MIT PullUp
  DDRB  = 0b10011111;   // siehe aktuell oben oder Fortschritt/R2D2
  PORTB = 0b01100000;   //    und Port/Pull Ups (1)  aktivieren
//  DDRB  = 0b00011111;   // siehe aktuell oben oder Fortschritt/R2D2
//  PORTB = 0b11100000;   //    und Port/Pull Ups (1)  aktivieren
                         
  DDRC  = 0b01110000;   // PC3 ist ADC3, PC0 .. 6 , kein PC7-Pin bei m168
  PORTC = 0b00000111;   // Beachte für ADC: PC3 ist ADC-Eingang ##>> OHNE Pullup !!
                        // 
  DDRD  = 0b11110000;   // -> siehe unter DDRB,  sowie PD2,3 extInt
  PORTD = 0b00001111;   //    Pull Ups aktivieren
                        //   Encoder_1 = ExtINT0 = PortD2, Encoder_2 = PortD3

. . . . . . . . . . . .
               
  for(i=0; i<10; i++)   // LED auf PD1 blinken lassen 
                        //   ###>>> bevor Interrupts erlaubt sind, um ungewollte
			//   Resets u.ä. besser erkennen zu können
  {                       
    PORTD |=  (1<<PD1);         // LED auf PD1 schalten EIN, HELL
    waitms(20);                  //    ... damit man kurze resets besser erkennt
    PORTD &= ~(1<<PD1);         // LED auf PD1 schalten AUS, Dunkel
    waitms(80);           
  }                               
                                  
  PORTD |=  (1<<PD1);           // LED auf PD1 schalten EIN, HELL
  waitms ( 2000);
                         
// ================================================================================
//  Testabschnitt(e). 
// ================================================================================
Dieses typische Blinken kostet kaum Programmplatz und zeigt mir an, dass ein Reset da war . . . . .