BlaueLed
29.11.2011, 18:48
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:
'_________________________________________________ ______________________________
'************************************************* ******************************
'*** 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
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:
'_________________________________________________ ______________________________
'************************************************* ******************************
'*** 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