Ich würde mal versuchen, mittels Goto aus der ISR (BÖSE - ich weiß) zu einem Label vor der Hauptschleife zu springen. Denn wenn du die ISR mit Return verlässt, ist ja klar, dass er mitten in die Warteschleife zurückspringt und sie weiter ausführt.
Ich würde mal versuchen, mittels Goto aus der ISR (BÖSE - ich weiß) zu einem Label vor der Hauptschleife zu springen. Denn wenn du die ISR mit Return verlässt, ist ja klar, dass er mitten in die Warteschleife zurückspringt und sie weiter ausführt.
Grüße
Thomas
Geändert von Searcher (26.09.2012 um 19:08 Uhr)
Hoffentlich liegt das Ziel auch am Weg
..................................................................Der Wegzu einigen meiner Konstruktionen
Im Prinzip würde hier doch ein einfacher Timer Abhilfe schaffen. Und der ATtimy13 hat doch einen.
Also einfach den Timer so konfiguriern, dass er in der Kleinsten gewünschten Zeit (z.B. 10ms) einen Overflow generiert, und in diesem Dann eine Variable hochzählen. Wenn die variable 1 dann togglen, dann wenn die Variable 2 ist, und dann wenn 4 wieder. Wenn die Variable z.B. 200 erreicht hat (würden im Beispiel 2s entsprechen), dann wird sie wieder auf Null gesetzt, und alles beginnt von vorne. Wenn nun der Interrupt reinkommt, dann wird der Timer ausgeschaltet, die Led ebenfalls sofort ausgeschaltet, und die Variable auf Null gesetzt. Kommt der Interrupt wieder herein, dann wieder Timer aktivieren und los gehts.
Nur bin ich mir nicht sicher, ob sich das vom Speicher ausgeht, der ATtiny13 hat ja nur 64Bytes RAM oder so, aber so groß ist das Programm dann ja auch wieder nicht?
Noch eine Frage: ist der Taster, mit dem der Interrut erzeugt wird (ich nehme einmal an, es ist ein Taster) eigentlich entprellt? Sonst könnten sich da ein paar lustige Effekte ergeben, und man fragt sich, warum der Taster nicht reagiert hat, obwohl der Interupt zwei mal reingekommen ist, einmal aus und gleich wieder an
Mfg Thegon
Normal reichen die 64 Byte für sowas aus. Wie groß ist denn der Stack in den Configs?
Mit einem kleineren Stack lässt sich folgendes compilieren (ungetestet) :
Code:$regfile = "attiny13.dat" $crystal = 1200000 $hwstack = 16 $swstack = 16 $framesize = 8 Ddrb = &B00011000 Portb.1 = 1 Taster Alias Pinb.1 B3 Alias Portb.3 Weiss Alias Portb.4 Dim Anders As Bit Dim Wpause As Word On Int0 Onint0 Config Int0 = Falling Enable Int0 Enable Interrupts Do If B3 = 1 Then Wpause = 300 Gosub Pause End If If Anders = 1 Then Enable Int0 Waitms 20 Reset Anders Toggle B3 End If Loop End Pause: Do Waitms 1 Decr Wpause If Anders = 1 Then Return Loop Until Wpause = 0 Return Onint0: Disable Int0 Set Anders Return
Wenn das Herz involviert ist, steht die Logik außen vor! \/
Hallo,
also ich bin ja begeistert von der Gemeinde, so viele gute Tipps hätte ich gar nicht erwartet.
Also den esten Tipp von Thegon habe ich aus probiert und das kommt meinen Vorstellungen schon sehr Nahe.
Mal sehen, wenn ich Zeit habe werd ich weiter probieren, also vielen Dank an Euch, scheint ja doch ein Thema zu sein das ich da angesprochen hatte.
Gruß
Caro
Lesezeichen