Hi Patrick,
schön wenns jetzt funktioniert.

Zitat von
Patrick91
... oder hat noch jemand eine andere idee? ...
Ich habe (m)einen Tongenerator mit meiner Standard-wait-Funktion geschrieben . . . die ich vor Ewigkeiten irgendwo abgekupfert hatte. (Zweck in diesem Fall: der Controller wartet auf ein high oder low an einem Pin und startet bei erkanntem Level einen kurzen Ton - das Ganze dient dazu, SEHR kurze Spikes zu erkennen - ohne dauernd aufs Oszi schauen zu müssen). Diese Funktion habe ich als Millisekunden- und manchmal (beim 20-MHz-Quarz) als Mikrosekunden-routine. Allgemein bekannter Nachteil: der Controller tut sonst "nix" - was nicht ganz stimmt: z.B. Interrupts muss er trotzdem arbeiten - dabei stimmt dann natürlich die Routinendauer nicht mehr.
Code:
/* =================================================================================
*** Aufgabenstellung : Tongenerator am baby orangutan B-168-20MHz
Der Pin PD7 am "linken, unteren" Eingang der pololu-Platine wird auf
Pegel 1 (ca. + 5V) überwacht. WENN dieser Pegal ansteht, dann wird am
Port PB2 (links, fünfter von oben) ein Signal von etwa 1000 Hz ausgegeben.
...
Ton: aktuell (11. Jan. 10) ca. 2,5 kHz bei "990" in waitms */
// =================================================================================
// ===== Subroutinen =============================================================
// =================================================================================
// =================================================================================
// =================================================================================
/*### Programm pausieren lassen !! Der Pausenwert ist nur experimentell !*/
void waitms(uint16_t ms)
{
for(; ms>0; ms--)
{
uint16_t __c = 4000; // Dieser Wert bestimmt die Laufdauer ! ! !
__asm__ volatile (
"1: sbiw %0,1" "\n\t"
"brne 1b"
: "=w" (__c)
: "0" (__c)
);
}
}
// =================================================================================
// ===== ENDE Subroutinen =====================================================
// =================================================================================
Lesezeichen