Code:
'*******************************************************************************
'* PROGRAMM: RPM-ControllerV1.0BETA DATUM: 02.07.2007 *
'*******************************************************************************
'===============================================================================
' Hardware:
'
' RN-Minicontrol Controllerboard mit Mega8
'
' RPM-Controllermodul V1.0, Anschluss an JP5 von RN-Minicontrol
'
' RN-LCD-Adaptermodul, Anschluss an 10-pol Wannenbuchse CTRL, Anschluss der
' LCD Bedientaster: T1 an JP6/1, T2 an JP6/2, GND an JP6/4, T3 an JP1/1
'
' Potentiometer an JP3
'
'
'
'===============================================================================
'===============================================================================
' Compiler
'===============================================================================
$regfile = "m168def.dat" 'Mega8
$crystal = 16000000 '16Mhz Quarz
'$baud = 9600
'-------------------------------------------------------------------------------
'===============================================================================
' Ein- und Ausgänge:
'
' PD4: Ausgang, Ansteuerung von ZU-Relais
' PB4: Eingang, Rechtecksignal der Zündspannung
' PC1: ADC1 Eingang, Potentiometer von JP4 zur Drehzahleinstellung
' PD5: Eingang, LCD Taster 1
' PB2: Eingang, LCD Taster 2
' PD2: Eingang, LCD Taster 3
'
'
'===============================================================================
Config Pind.4 = Output 'ZU-Relais
Config Pinb.4 = Input 'Zündspannung
Config Pinc.1 = Input 'Poti
Config Pind.5 = Input
Portd.5 = 1 'Taster1
Config Pinb.2 = Input
Portb.2 = 1 'Taster2
Config Pind.2 = Input
Portd.2 = 1 'Taster3
'-------------------------------------------------------------------------------
'===============================================================================
' ADC-Kanäle
'===============================================================================
Config Adc = Single , Prescaler = Auto , Reference = Avcc
Start Adc
Config Debounce = 5
'-------------------------------------------------------------------------------
'===============================================================================
' Variablen
'===============================================================================
Dim Signal_in As Word 'eingangsimpulse in 1x10µs
Dim Rpm_ist As Long 'Istwert Drehzahl
Dim Adc1 As Word 'Eingangswert Poti 0-1023
Dim Rpm_soll As Word 'Sollwert Drehzahlbegrenzung
Dim Faktor As Byte 'Drehzahlfaktor
Dim Unterbrecherdauer As Byte 'Einschaltdauer Unterbrecher
Dim Unterbrecherfrequenz As Byte 'Zuschaltfrequenz Unterbrecher
Dim Timerunterbrecher As Byte 'Timing für Unterbrecher
Dim Rpm_dif As Word 'Differenz Soll und Ist
'-------------------------------------------------------------------------------
'===============================================================================
' Variablenvoreinstellung bei Programmstart
'===============================================================================
Faktor = 1
Unterbrecherdauer = 10
Unterbrecherfrequenz = 200
'-------------------------------------------------------------------------------
'===============================================================================
' Subs
'===============================================================================
Declare Sub Displayaktualisierung
Declare Sub Faktoreinstellung
Declare Sub Unterbrecherdauer
Declare Sub Unterbrecherfrequenz
Declare Sub Unterbrecher
'-------------------------------------------------------------------------------
'===============================================================================
' LCD Parametrieren
'-------------------------------------------------------------------------------
Config Lcd = 20 * 4a , Chipset = Ks077
Config Lcdpin = Pin , Db4 = Portb.5 , Db5 = Portb.0 , Db6 = Portd.7 , Db7 = Portd.6 , E = Portb.3 , Rs = Portc.2
Config Lcdbus = 4
Initlcd
Config Pind.3 = Output 'R/W = 0 -> Schreiben
Portd.3 = 0
Config Pinc.3 = Output 'Portc.3 = 0 -> Beleuchtung aus
Portc.3 = 0
Waitms 200
Initlcd
Locate 1 , 1
Cls
Locate 2 , 1
Cls
Locate 3 , 1
Cls
Locate 4 , 1
Cls
'*******************************************************************************
'* HAUPTPROGRAMM *
'*******************************************************************************
Do
'===============================================================================
' Datenerfassung Drehzahl
'-------------------------------------------------------------------------------
'Pulsein Signal_in , Pinb , 4 , 0
Rpm_ist = 1500000 / Signal_in
Rpm_ist = Rpm_ist * Faktor
'-------------------------------------------------------------------------------
'===============================================================================
' Aufruf Displayaktualisierung
'-------------------------------------------------------------------------------
Gosub Displayaktualisierung
'-------------------------------------------------------------------------------
'===============================================================================
' Counter für Zündunterbrechung
'-------------------------------------------------------------------------------
Incr Timerunterbrecher
If Timerunterbrecher = Unterbrecherfrequenz Then
Gosub Unterbrecher
End If
'-------------------------------------------------------------------------------
'===============================================================================
' Abfrage Tastereingabe
'-------------------------------------------------------------------------------
Debounce Pind.2 , 0 , Faktoreinstellung , Sub
Debounce Pind.5 , 0 , Unterbrecherdauer , Sub
Debounce Pinb.2 , 0 , Unterbrecherfrequenz , Sub
'-------------------------------------------------------------------------------
Loop
'-------------------------------------------------------------------------------
'*******************************************************************************
'* SUBS *
'*******************************************************************************
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Sub Displayaktualisierung
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
'===============================================================================
' Zeile 1: Anzeigen der Ist-Drehzahl
'-------------------------------------------------------------------------------
If Rpm_ist < 5000 Then
Locate 1 , 6
Lcd " "
Locate 1 , 1
Lcd "RPM= " ; Rpm_ist
Locate 1 , 10
Lcd "U/min"
End If
'-------------------------------------------------------------------------------
'===============================================================================
' Zeile 1: Bargraph-Animation
'-------------------------------------------------------------------------------
Rpm_dif = Rpm_soll - Rpm_ist
Locate 1 , 16
Lcd " "
If Rpm_dif < 2000 Then
Locate 1 , 16
Lcd "> "
End If
If Rpm_dif < 1600 Then
Locate 1 , 16
Lcd ">> "
End If
If Rpm_dif < 1200 Then
Locate 1 , 16
Lcd ">>> "
End If
If Rpm_dif < 800 Then
Locate 1 , 16
Lcd ">>>> "
End If
If Rpm_dif < 400 Then
Locate 1 , 16
Lcd ">>>>>"
End If
'-------------------------------------------------------------------------------
'===============================================================================
' Zeile 2: Anzeige Soll-Drehzahl
'-------------------------------------------------------------------------------
Locate 2 , 11
Lcd " "
Adc1 = Getadc(1)
Rpm_soll = Adc1 * 15
Locate 2 , 1
Lcd "RPM-Limit=" ; Rpm_soll
Locate 2 , 16
Lcd "U/min"
'-------------------------------------------------------------------------------
'===============================================================================
' Zeile 3: Anzeige Drehzahlfaktor
'-------------------------------------------------------------------------------
Locate 3 , 16
Lcd " "
Locate 3 , 1
Lcd "Drehzahlfaktor " ; Faktor
'-------------------------------------------------------------------------------
'===============================================================================
' Zeile 4: Anzeige Unterbrecherdauer und -Frequenz
'-------------------------------------------------------------------------------
Locate 4 , 7
Lcd " "
Locate 4 , 18
Lcd " "
Locate 4 , 1
Lcd "Dauer=" ; Unterbrecherdauer
Locate 4 , 10
Lcd "ms"
Locate 4 , 13
Lcd "Freq=" ; Unterbrecherfrequenz
'-------------------------------------------------------------------------------
End Sub
'===============================================================================
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Sub Faktoreinstellung
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
If Faktor = 1 Then
Faktor = 2
Return
End If
If Faktor = 2 Then
Faktor = 4
Return
End If
If Faktor = 4 Then
Faktor = 1
Return
End If
End Sub
'===============================================================================
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Sub Unterbrecherdauer
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Unterbrecherdauer = Unterbrecherdauer + 10
If Unterbrecherdauer > 150 Then
Unterbrecherdauer = 10
End If
End Sub
'===============================================================================
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Sub Unterbrecherfrequenz
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Unterbrecherfrequenz = Unterbrecherfrequenz + 10
If Unterbrecherfrequenz > 240 Then
Unterbrecherfrequenz = 50
End If
End Sub
'===============================================================================
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
Sub Unterbrecher
'OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
If Rpm_ist > Rpm_soll Then
Portd.4 = 1
'Waitus Unterbrecherdauer
Portd.4 = 0
End If
End Sub
'===============================================================================
'===
End
'===
Lesezeichen