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