eCigTalk.org - Powered by vBulletin



RSS лента

Dr_Zlo

Стабилизатор напряжения

Оценить эту запись
Цитата Сообщение от slimest Посмотреть сообщение

'takter-nur-finger.bas
'raidy 07.06.2010
'v1.2
'CKS 1ACB9F
'Copyright: jede gewerbliche und/oder Gewinnbringende Verwendung untersagt. Alle Rechte vorbehalten by raidy
'Status: testet, o.k.



$regfile = "attiny25.dat" 'wir haben einen ATTiny45 eingelötet, der Compiler muss das wissen
$crystal = 1000000 'läuft mit 1MHz und braucht nur 400uA
'$framesize = 32 'Stackanweisungen, die eigentlich nur bei größeren Programmen
'$swstack = 32 'wirklich nötig werden
'$hwstack = 32
'$prog &HFF , &H62 , &HDF , &HFF ' generated. Take care that the chip supports all fuse bytes.

' Jetzt gehts los

Config Portb = Output 'prinzipiell sind alle Ports erst mal ein Ausgang
Config Pinb.3 = Input 'ADC3
Config Pinb.4 = Input 'ADC2
Config Pinb.5 = Input 'ADC0
Config Pinb.2 = Input 'adc1

'Konfigurieren und starten des Analogwandlers, welcher den fsr und Fingersesor auswertet..
Config Adc = Single , Prescaler = Auto , Reference = Avcc


Declare Sub Dampfen 'Dampffunktion
Declare Sub Staerker 'staerker
Declare Sub Schwaecher 'schwaecher
Declare Sub Led 'led
Declare Sub Spannung 'spannungskontrolle
Declare Sub Akku_alarm 'akku zu leer!
Declare Sub Sensor_limit_ueberschritten 'Finger zu lange am Sensor oder nass geworden = Schutzabschaltung


Dim Anprozent As Word
Dim Ausprozent As Word
Dim F_an As Word
Dim F_aus As Word
Dim F_plus As Word
Dim F_minus As Word
Dim D_staerke As Word
Dim D_maxan As Word
Dim Ruhe As Word
Dim Led_dauer As Word
Dim Led_pulse As Word
Dim D_spannung As Word
Dim Spannungs_faktor As Word
Dim Maxdampfzeit As Word
Dim Akkumin As Word
Dim Akkuvoll As Word
Dim X As Word

Akkumin = 680 ' adc-werte des Spannungsteilers <> 3,3Volt
Akkuvoll = 840 '<>4,2V
Spannungs_faktor = 1.0
Ruhe = 200

Aus Alias 0 'einfacher zu verstehen.
An Alias 1
D_fet Alias Portb.0 'das ist der Taktausgang
D_led Alias Portb.1 'Ausgang des LED
Start Adc
'main Schleife

'Standardwerte setzen
D_staerke = 80 '80% Dampf

'Erst Mal Alles Ausschalten
D_led = 1
D_fet = 0
Do ' die ewige Schleife
Maxdampfzeit = 0 'rücksetzen der Maxdampfsperre
F_an = Getadc(2) 'der Fingersensor Dampfen
Waitms 20 'der Fingersensor stärker
F_plus = Getadc(0)
Waitms 20
F_minus = Getadc(3) 'der Fingersensor schwächer
Waitms 20
D_spannung = Getadc(1) 'Messen der Akkuspannung
Waitms 20
If D_spannung < Akkuvoll Then Gosub Spannung ' akku muss genauer geprüft werden, da nicht mehr 4,2V und PWM-Korrekturfaktor neu berechnen
If F_an > Ruhe Then Gosub Dampfen
If F_plus > Ruhe Then Gosub Staerker
If F_minus > Ruhe Then Gosub Schwaecher

Loop ' Ende der ewigen Aussenschleife

Sub Dampfen
Anprozent = D_staerke * Spannungs_faktor 'hat sich die Spannung verringert, dann wird genau um diesen Prozentsatz die Dampfphase verlängert.
If Anprozent > 100 Then Anprozent = 100 'aber halt auch nicht mehr wie 100% an
Ausprozent = 100 - Anprozent 'so jetzt wissen wir, was wir wollen
Do

F_an = Getadc(2)
If F_an < Ruhe Then Exit Do 'kein Druck mehr auf Sensor
D_fet = An
If Maxdampfzeit > 100 Then Gosub Sensor_limit_ueberschritten
Incr Maxdampfzeit
Waitms Anprozent
D_fet = Aus
Waitms Ausprozent

Loop
Return
End Sub

Sub Staerker

Do
' Die ewige Aussenschleife
F_plus = Getadc(0)
If F_plus < Ruhe Then Exit Do ' finger ist wieder weg
If D_staerke < 100 Then D_staerke = D_staerke + 5
Led_dauer = 50
Led_pulse = 5
Gosub Led
Loop
Return
End Sub

Sub Schwaecher

Do
' Die ewige Aussenschleife
F_minus = Getadc(3)
If F_minus < Ruhe Then Exit Do ' finger ist wieder weg
If D_staerke > 5 Then D_staerke = D_staerke - 5
Led_dauer = 100
Led_pulse = 5
Gosub Led
Loop
Return
End Sub


Sub Led
For X = 1 To Led_pulse
D_led = 0
Waitms Led_dauer
D_led = 1
Waitms Led_dauer
Next X
If D_staerke > 95 Then
D_led = 0
Waitms 1000
D_led = 1
End If

If D_staerke <= 5 Then
D_led = 0
Waitms 1000
D_led = 1
End If



Return
End Sub


Sub Spannung
' hier könnte auch folgende Formel stehen
' Spannungs_faktor = 840 / Akkumin ' Erhöhen des Spannungs_faktor (Taktzeitkorrektur) um nachgelassene Batterie in %
' Spannungs_faktor = Spannungs_faktor * Spannungs_faktor 'und ins Quadrat nehmen, denn, den 1/2 Spannung=1/4 Leistung
' Ich habs praktisch probiert und untere Wete für gut empfunden.

Select Case D_spannung
Case 800 To 840 : Spannungs_faktor = 1
Case 780 To 799 : Spannungs_faktor = 1.1
Case 760 To 779 : Spannungs_faktor = 1.2
Case 740 To 759 : Spannungs_faktor = 1.4
Case 720 To 739 : Spannungs_faktor = 1.5
Case 700 To 719 : Spannungs_faktor = 1.6
Case 681 To 699 : Spannungs_faktor = 1.8
Case 0 To Akkumin : Gosub Akku_alarm

End Select
Return
End Sub

Sub Akku_alarm

For X = 1 To 5 ' Alarm, dann neu prüfen. Könnte ja schon im Ladegerät stehen
Led_pulse = 10
Led_dauer = 20
Gosub Led
Waitms 200
Next X

End Sub


Sub Sensor_limit_ueberschritten
Do
D_fet = Aus
Led_pulse = 10
Led_dauer = 100
Gosub Led
F_an = Getadc(2)
If F_an < Ruhe Then Exit Sub
Loop
Return

End Sub
Миниатюры Изображения schaltbildv1.2.jpg 
Категории
Без категории

Комментарии


Условия предоставления информации | Отказ от ответственности

© eCigTalk.org 2021