RAM
28.10.2011, 19:23
Hallo Leute,
hab mal wieder ein BASCOM-Problem. Und zwar geht es um eine Temperaturregelung mit einem Attiny85. Geregelt werden soll eine Heizfolie, welche über einen MOSFET an OCR0 hängt. Die Ist-Temperatur der Folie wird durch einen LM35 erfasst, welcher 10 mV/°C ausgibt. Die Solltemperatur habe ich in meinem Programm mal mit 35 °C angegeben, davon soll die Isttemperatur abgezogen werden und daraus der Wert für die PWM berechnet werden. Der PWM-Wert soll 255 betragen, also voll heizen, bis die Temperaturdifferenz kleiner als 5 °C wird. Dann woll der PWM-Wert reduziert werden (deshalb auch das Ausgang = Tempdiff * 51). Außerdem habe ich noch einen Unterspannungsalarm mit einer LED eingebaut, welcher beim unterschreiten einer bestimmten Spannung zu leuchten beginnt.
Nun zu meinem Problem: Der Unterspannungsalarm funktioniert, aber bei der Temperaturregelung funktionier irgendetwas nicht. Am PWM-Pin kommt irgendwie nix an. Bin nicht so der BASCOM-Experte, aber vielleicht kann mir ja von euch jemand weiterhelfen.
Hab mal mein Programm für euch angehängt
'Heizfolien-Temperaturregler
'Heizfolie mit FET an OCR1 (PB1)
'Temperatursensor LM35 an ADC2 (PB4)
'Spannungsmessung an ADC3 (PB3)
'Spannungsanzeige LED an PB2
$regfile = "attiny85.dat"
$crystal = 8000000
Dim U As Word 'Spannungsteiler Vcc--> 4,7 k --> ADC3 --> 2,2 k --> Gnd'
Dim Temp As Word 'LM35 an ADC2, gibt 10 mV/°C aus
Dim Tempdiff As Single
Dim Ausgang As Word
Dim Channel As Byte
Channel = 0
Config Portb.2 = Output 'Spannungsanzeige LED
Config Portb.1 = Output 'Ausgang für Heizfolie
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
Const Faktor = 5 / 1023
Do
Start Adc
U = Getadc(3)
Temp = Getadc(2)
Stop Adc
If U < 705 Then 'LED an, wenn Spannung unter 10,8 V
Portb.2 = 1
Else
Portb.2 = 0
End If
Temp = Temp * Faktor 'Umrechnung ADC-wert Temp in °C
Temp = Temp / 0.01
Tempdiff = 35 - Temp 'Berechnung Temperaturdifferenz (Solltemperatur 35 °C)
Ausgang = Tempdiff * 51 'Berechnung des PWM-Ausgangs für die Heizfolie
If Ausgang > 255 Then
Ausgang = 255
End If
If Ausgang < 0 Then
Ausgang = 0
End If
Compare0a = Ausgang
Loop
End
hab mal wieder ein BASCOM-Problem. Und zwar geht es um eine Temperaturregelung mit einem Attiny85. Geregelt werden soll eine Heizfolie, welche über einen MOSFET an OCR0 hängt. Die Ist-Temperatur der Folie wird durch einen LM35 erfasst, welcher 10 mV/°C ausgibt. Die Solltemperatur habe ich in meinem Programm mal mit 35 °C angegeben, davon soll die Isttemperatur abgezogen werden und daraus der Wert für die PWM berechnet werden. Der PWM-Wert soll 255 betragen, also voll heizen, bis die Temperaturdifferenz kleiner als 5 °C wird. Dann woll der PWM-Wert reduziert werden (deshalb auch das Ausgang = Tempdiff * 51). Außerdem habe ich noch einen Unterspannungsalarm mit einer LED eingebaut, welcher beim unterschreiten einer bestimmten Spannung zu leuchten beginnt.
Nun zu meinem Problem: Der Unterspannungsalarm funktioniert, aber bei der Temperaturregelung funktionier irgendetwas nicht. Am PWM-Pin kommt irgendwie nix an. Bin nicht so der BASCOM-Experte, aber vielleicht kann mir ja von euch jemand weiterhelfen.
Hab mal mein Programm für euch angehängt
'Heizfolien-Temperaturregler
'Heizfolie mit FET an OCR1 (PB1)
'Temperatursensor LM35 an ADC2 (PB4)
'Spannungsmessung an ADC3 (PB3)
'Spannungsanzeige LED an PB2
$regfile = "attiny85.dat"
$crystal = 8000000
Dim U As Word 'Spannungsteiler Vcc--> 4,7 k --> ADC3 --> 2,2 k --> Gnd'
Dim Temp As Word 'LM35 an ADC2, gibt 10 mV/°C aus
Dim Tempdiff As Single
Dim Ausgang As Word
Dim Channel As Byte
Channel = 0
Config Portb.2 = Output 'Spannungsanzeige LED
Config Portb.1 = Output 'Ausgang für Heizfolie
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Config Timer0 = Pwm , Prescale = 1 , Compare A Pwm = Clear Down
Const Faktor = 5 / 1023
Do
Start Adc
U = Getadc(3)
Temp = Getadc(2)
Stop Adc
If U < 705 Then 'LED an, wenn Spannung unter 10,8 V
Portb.2 = 1
Else
Portb.2 = 0
End If
Temp = Temp * Faktor 'Umrechnung ADC-wert Temp in °C
Temp = Temp / 0.01
Tempdiff = 35 - Temp 'Berechnung Temperaturdifferenz (Solltemperatur 35 °C)
Ausgang = Tempdiff * 51 'Berechnung des PWM-Ausgangs für die Heizfolie
If Ausgang > 255 Then
Ausgang = 255
End If
If Ausgang < 0 Then
Ausgang = 0
End If
Compare0a = Ausgang
Loop
End