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 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 von
mikrocontroller...AVR-GCC-Tutorial
... Hinweis: z.Zt. existiert im avr-gcc kein "echtes" double, intern wird immer mit "einfacher Genauigkeit" ...
Lesezeichen