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:
Kann mir jemand einen Tip geben, wie ich das ganze linearer hinbekommen könnte ?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
Danke und Gruß
Kay
Lesezeichen