Hi, alle

Bin erst jetzt wieder zurück "am Boden/der Tatsachen". Mittlerweile ist der Fehler wohl gefunden und die Softwarefehlersuche hat einen Hardwaremangel als Schuldigen erkannt (ich habe keine Ahnung, wie oft mir das schon passiert ist *brrrrrrrrr*).
Zitat Zitat von McJenso
... bitte ohne Optimierung kompilieren und testen ...
Das würde evtl. eine Fehlermeldung erzeugen, weil in der delay.h steht:
Code:
#ifndef __OPTIMIZE__
# warning "Compiler optimizations disabled; functions from <util/delay.h> won't work as designed"
#endif
Ich habe aus verschiedenen Gründen (m)eine eigene delay irgendwo "gefunden":
Code:
// =================================================================================
// ### Programm pausieren lassen  !! Der Pausenwert ist nur experimentell !

void waitms(uint16_t ms) 
{ 
   for(; ms>0; ms--) 
   { 
      uint16_t __c = 4000; 
      __asm__ volatile ( 
         "1: sbiw %0,1" "\n\t" 
         "brne 1b" 
         : "=w" (__c) 
         : "0" (__c) 
      ); 
   } 
} 
// =================================================================================
Da habe ich eindeutig uint_16 - seeeehr praktisch. Die delay.h operiert dagegen mit "_delay_ms(double __ms)" - und ich glaube bei double und AVRGCC gibts gelegentlich Probleme . . . . hat ja schon robocat angemerkt.
Zitat Zitat von mikrocontroller...AVR-GCC-Tutorial
... Hinweis: z.Zt. existiert im avr-gcc kein "echtes" double, intern wird immer mit "einfacher Genauigkeit" ...