ikarus_177
23.07.2008, 12:40
Hi,
ich habe mir eine kleine Lüftersteuerung mit einem Mega8 gebastelt. Der Lüfter wird über einen FET, dessen Gate an Pin 28 des Megas hängt. Ein - und Ausschalten ist überhaupt kein Problem. Der Lüfter soll aber auch in seiner Drehzahl geregelt werden können. Da dies an diesem Port nur per Software möglich ist, und die Hardware PWM - Pins bereits belegt sind, wollte ich das mit Basom so machen:
'-------------------------------------------------------------------------------------'
'nessesary definitons: '
'-------------------------------------------------------------------------------------'
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Portc.5 = Output
Config Timer1 = Timer , Prescale = 1
On Timer1 Pwm
Enable Timer1
Start Timer1
Enable Interrupts
'-------------------------------------------------------------------------------------'
'dimensioned variables: '
'-------------------------------------------------------------------------------------'
Dim Rate As Long
Dim Ratemin As Integer
Dim Ratemax As Integer
'Ratemin = 330 'minimum PWM - rate
'Ratemax = 1500 'maximum PWM - rate
Do
Rate = 0
Loop
'-------------------------------------------------------------------------------------'
'sub routine for generating PWM signal '
'-------------------------------------------------------------------------------------'
Pwm:
Toggle Portc.5
Waitus 1
Timer0 = Rate
Return
Die Idee dahinter ist folgende: wenn der Rate-Wert (also die gewünschte Drehzahl des Lüfters, die Länge des High-Impulses) kleiner ist, wird dem Timer ein kleiner Startwert mitgegeben, folglich braucht er länger, bis er überläuft und somit ist die Länge des Pulses eine größere.
Allerdings merke ich überhaupt keinen Unterschied in der Drehzahl meines Lüfters, bzw. in der Helligkeit einer LED, die ich zur Kontrolle ebenfalls am gleichen Port angeschlossen habe.
Wird der Prescaler auf 8 gesetzt, blinkt die LED merklich im Abstand von einigen ms, aber auch hier ist kein Unterschied in der Frequenz merkbar, wenn der Wert für Rate verändert wird.
Habt ihr eine Lösung für dieses Verhalten?
Viele Grüße
ikarus_177
ich habe mir eine kleine Lüftersteuerung mit einem Mega8 gebastelt. Der Lüfter wird über einen FET, dessen Gate an Pin 28 des Megas hängt. Ein - und Ausschalten ist überhaupt kein Problem. Der Lüfter soll aber auch in seiner Drehzahl geregelt werden können. Da dies an diesem Port nur per Software möglich ist, und die Hardware PWM - Pins bereits belegt sind, wollte ich das mit Basom so machen:
'-------------------------------------------------------------------------------------'
'nessesary definitons: '
'-------------------------------------------------------------------------------------'
$regfile = "m8def.dat"
$framesize = 32
$swstack = 32
$hwstack = 32
$crystal = 16000000
$baud = 9600
Config Portc.5 = Output
Config Timer1 = Timer , Prescale = 1
On Timer1 Pwm
Enable Timer1
Start Timer1
Enable Interrupts
'-------------------------------------------------------------------------------------'
'dimensioned variables: '
'-------------------------------------------------------------------------------------'
Dim Rate As Long
Dim Ratemin As Integer
Dim Ratemax As Integer
'Ratemin = 330 'minimum PWM - rate
'Ratemax = 1500 'maximum PWM - rate
Do
Rate = 0
Loop
'-------------------------------------------------------------------------------------'
'sub routine for generating PWM signal '
'-------------------------------------------------------------------------------------'
Pwm:
Toggle Portc.5
Waitus 1
Timer0 = Rate
Return
Die Idee dahinter ist folgende: wenn der Rate-Wert (also die gewünschte Drehzahl des Lüfters, die Länge des High-Impulses) kleiner ist, wird dem Timer ein kleiner Startwert mitgegeben, folglich braucht er länger, bis er überläuft und somit ist die Länge des Pulses eine größere.
Allerdings merke ich überhaupt keinen Unterschied in der Drehzahl meines Lüfters, bzw. in der Helligkeit einer LED, die ich zur Kontrolle ebenfalls am gleichen Port angeschlossen habe.
Wird der Prescaler auf 8 gesetzt, blinkt die LED merklich im Abstand von einigen ms, aber auch hier ist kein Unterschied in der Frequenz merkbar, wenn der Wert für Rate verändert wird.
Habt ihr eine Lösung für dieses Verhalten?
Viele Grüße
ikarus_177