Toggle Geschwindigkeit über Poti verstellen
Hallo zusammen,
ich sitz momentan echt aufm Schlauch. Ich möchte über ein Potti die Toggle Geschwindigkeit eines Ausganges zwischen 0,2s und 5s verstellen. Das ganze linear.
Momentan lese ich den ADC 0 ein und teile den Wert durch 20. So komme ich auf einen Bereich von ca 0-50. Jetzt habe ich einen Timer mit einer Frequenz von 10Hz. Beim überlauf des Timers lasse ich eine Variable hochzählen. Wenn nun die Variable den Wert des Poti´s erreicht hat, toggle ich den Ausgang. Das ganze funktioniert, aber nicht wirklich schön. Die Abstufungen sind mir zu grob. Ich hätte halt gerne das ich im Bereich von 0,2s bis 5s schön linear am besten mit den vollen 1023 Schritten regeln kann.
Hier mein Code:
Code:
'_______________________________________________________________________________
'*******************************************************************************
'*** Chip Definition ***
'*******************************************************************************
'-------------------------------------------------------------------------------
$regfile = "m88def.dat"
$crystal = 8000000
$hwstack = 60
$swstack = 40
$framesize = 60
$baud = 9600
'_______________________________________________________________________________
'*******************************************************************************
'*** Ports ***
'*******************************************************************************
'-------------------------------------------------------------------------------
Config Pinb.0 = Input 'Taster
Config Pinb.1 = Input 'Taster
Config Pind.2 = Input 'RC-Signal
Config Pind.3 = Input 'RC-Signal
Config Portd.7 = Output 'Led
'_______________________________________________________________________________
'*******************************************************************************
'*** Timer ***
'*******************************************************************************
'-------------------------------------------------------------------------------
Config Timer1 = Timer , Prescale = 64
On Timer1 Timer_irq
Const Timervorgabe = 53036
'_______________________________________________________________________________
'*******************************************************************************
'*** ADC ***
'*******************************************************************************
'-------------------------------------------------------------------------------
Config Adc = Single , Prescaler = Auto
'_______________________________________________________________________________
'*******************************************************************************
'*** Alias ***
'*******************************************************************************
'-------------------------------------------------------------------------------
Led Alias Portd.7
Taster2 Alias Pinb.1
Taster1 Alias Pinb.0
'_______________________________________________________________________________
'*******************************************************************************
'*** Dims ***
'*******************************************************************************
Dim Tick_ticker As Word
Dim Adc_value As Word
Dim Adc_ticker As Word
'_______________________________________________________________________________
'*******************************************************************************
'*** Konstanten ***
'*******************************************************************************
'_______________________________________________________________________________
'*******************************************************************************
'*** Main / Hauptprogramm ***
'*******************************************************************************
'-------------------------------------------------------------------------------
'--- Boot ---
Portb.1 = 1 'Pullup aktivieren
Portb.0 = 1 'Pullup aktivieren
Enable Interrupts
Enable Timer1
'--- Main ---
Main:
Adc_value = Getadc(0)
Adc_ticker = Adc_value / 20
Print Adc_ticker
Goto Main
'--- Interrupt ---
Timer_irq:
Timer1 = Timervorgabe
Incr Tick_ticker
If Tick_ticker > Adc_ticker Then ' Wenn Wert von Variable größer als ADC Wert ist , dann löschen
Tick_ticker = 0
End If
If Tick_ticker = Adc_ticker Then
Toggle Led
Tick_ticker = 0
End If
Return
Kann mir jemand einen Tip geben, wie ich das ganze linearer hinbekommen könnte ?
Danke und Gruß
Kay