Hi,
ich generiere mit meinem Atmega8 eine Frequenz mittels eines Timers.
Der Code im Überlauf-Interrupt des Timers ist folgender:
| 1 | Isrtimer1:
 | 
| 2 |       ' Wenn counter = speed
 | 
| 3 |       If Motor1ctr >= Motor1speed Then
 | 
| 4 |          Toggle Motor1clk
 | 
| 5 |          Motor1ctr = 0
 | 
| 6 |       End If
 | 
| 7 | 
 | 
| 8 |       Motor1ctr = Motor1ctr + 1
 | 
| 9 | Return
 | 
Das Intervall für diesen Timer ist konstant.
Nun möchte ich eine (lineare) Rampe erzeugen, so dass der angesteuerte 
Motor langsam anfährt bzw. wieder langsam abbremst.
Das Problem ist nun folgendes:
Dekrementiere ich Motor1speed linear in einem konstanten Intervall um 
die Frequenz zu erhöhen, so steigt die ausgegebene Frequenz quadratisch 
an. Ist ja klar, weil:
Wenn Motor1speed=2 ist und damit eine Frequenz von 1000Hz erzeugt wird, 
wird eine Frequenz von 2000Hz erzeugt wenn Motor1speed=1 ist.
Und da ich die Variable in einem festen Zeitintervall erhöhe, steigt die 
Ausgabefrequenz quadratisch, und damit viel zu schnell an (soll linear 
ansteigen).
Leider bin ich momentan etwas überfragt, und weiß nicht, wie ich das 
Problem beheben könnte.
Mein Ansatz war, das Zeitintervall welches Motor1Speed inkrementiert 
dynamisch zu erhöhen:
| 1 | Isrtimer2:
 | 
| 2 |    ' Konstante Zeit
 | 
| 3 |    Load Timer1 , 300
 | 
| 4 | 
 | 
| 5 |       ' Motor1Target = Zielfrequenz
 | 
| 6 |       If Motor1speed > Motor1target Then
 | 
| 7 |          If Rampetarget = Rampectr Then
 | 
| 8 |             If Motor1speed > 1 Then
 | 
| 9 |                Motor1speed = Motor1speed - 1
 | 
| 10 |                ' Verdoppeln des Rampenintervalls
 | 
| 11 |                Rampetarget = Rampetarget * 2
 | 
| 12 |                Rampectr = 0
 | 
| 13 |             End If
 | 
| 14 |          End If
 | 
| 15 |          Rampectr = Rampectr + 1
 | 
| 16 |       End If
 | 
| 17 | Return
 | 
Das scheint im Prinzip zu funktionieren, ist aber viel zu langsam (und 
schneller kann ich den Timer nicht mehr takten).
Ich würde mich sehr über Eure Ideen freuen!
Viele Grüße,
Pascal