-
 
          
	
		
		
	
	
	
	
	
		
			
- 
	
	
		
		
			
				
				
				
					Messung von impulsen
				
					
						
							das Problem besteht darin das in diesem Programm die Messung funktioniert aber super langsam, wie ne Schildkröte. Es schafft ein Signal pro Sekunde. Habe schon Programme gesehen, wo 200 pro Sekunde geschafft werden. Weiß aber nicht warum meins das nicht kann. 
 Habs hier mal angehängt. Es gibt schon ein paar mehr  definierte Werte, die werden aber es später gebraucht, falls das Programm mal schneller zählt als jetzt. Hoffe mir kann jemand helfen!?!?
 
 
 
 
 ' Wenn an Digitalport 7 eine HIGH anliegt beginnt der Zählvorgang.
 ' Es wird zuvor die Zeit unmittelbar vor  dem Zählen gespeichert.
 ' Wenn an Digitalport 7 eine LOW anliegt wird die Zeit erneut gespeichert
 ' und der Zählvorgang beendet.
 ' Es wird die verstrichene Zeit ermittelt.
 ' Es wird folgendes gezählt
 ' a) HIGH Pegel an Digitalport 5
 '
 ' Ausgabe erfolgt auf die LCD
 '
 '
 
 '############################################
 '
 ' Definitionen für LCD Ausgabe
 '
 '############################################
 
 ' *** Daten-Definition ***
 define lcd_buf byte
 define lcd_param byte
 
 ' *** Definition LCD-Ports ***
 define lcd_port byteport[2]
 define lcd_rs port[14]
 define lcd_rw port[13]
 define lcd_e port[15]
 
 '*** ASCII-Codes ***
 define A_ &H41
 define B_ &H42
 define C_ &H43
 define D_ &H44
 define E_ &H45
 define F_ &H46
 define G_ &H47
 define H_ &H48
 define I_ &H49
 define J_ &H4A
 define K_ &H4B
 define L_ &H4C
 define M_ &H4D
 define N_ &H4E
 define O_ &H4F
 define P_ &H50
 define Q_ &H51
 define R_ &H52
 define S_ &H53
 define T_ &H54
 define U_ &H55
 define V_ &H56
 define W_ &H57
 define X_ &H58
 define Y_ &H59
 define Z_ &H5A
 
 define AUSRUFEZ &H21
 define LEERZ &H20
 define MINUS &H2D
 define NULL &H30
 define GLEICH &H3D
 define DOPPELPUNKT &H3A
 define KLAMMERZ &H29
 define PUNKT &H2E
 
 
 '*** Programmoperationen  ***
 
 gosub LCD_INIT:gosub LCD_CLS
 pause 10
 '############################################
 '
 ' Programmquelltext
 '
 '############################################
 '#################################################  #####
 '
 ' Definitionen von Eingängen, Ausgängen und Variablen
 '
 '#################################################  #####
 
 
 define Z_ODER_NICHT_Z port[7]      ' Digitalport 1 zählen oder nicht zählen
 define PD1 port[5]                 ' Digitalport für PD1
 'PD1 = OFF
 define PD2 port[2]                 ' Digitalport für PD2
 
 '!!! Ein- und Ausgängedefinitionen!!!
 
 define dig1 bit[5]      ' Für Digitalport 1
 dig1 = OFF
 define dig2 bit[6]      ' Für Digitalport 2
 dig2 = OFF
 define dig3 bit[7]      ' Für Digitalport 3
 dig3 = OFF
 
 '!!!Zeitdefinitionen!!!
 
 define anfm byte[17]      ' Minuten zu Beginn des Zählens
 anfm = 0
 define anfs byte[18]      ' Sekunden zu Beginn des Zählens
 anfs = 0
 define endm byte[13]      ' Minuten am Ende des Zählens
 endm = 0
 define ends byte[14]      ' Sekunden am Ende des Zählens
 ends = 0
 define anfspum byte[5]    ' Sekunden zu Anfang eines jeden Intervalls der Pumpe
 anfspum = 0
 define endspum byte[6]    ' Sekunden zum Vergleich fürs Pumpenintervall
 endspum = 0
 define anfskamla byte[8]  ' Sekunden zu Anfang eines jeden Intervalls der Kamera- und Laserschutzzeit
 anfskamla = 0
 define endskamla byte[9]  ' Sekunden zum Vergleich für die Kamera- und Laserschutzzeit
 
 
 define zeitgenommen byte[4]      ' Kontrollbit, ob bereits in mal ausgegeben wurde ????????????????????
 zeitgenommen = 0                 ' ?????????????????????
 
 '!!!Seukunden und Minuten berechnet!!!
 
 define gess byte[15]      'Gesamtsekunden
 gess = 0
 define gesm byte[16]      'Gesamtminuten
 gesm = 0
 define gesspum byte[7]    'Gesamtsekunden im Pumpintervall
 gesspum = 0
 define gesskamla byte[10] 'Gesamtsekunden im Kamera- und Laserschutzzeitintervall
 
 '!!!Variblendefinition!!!
 
 define zPD1 word[10]        ' Zählvariable für PD1
 zPD1 = 0
 define zPD2 word[11]        ' Zählvariable für PD2
 zPD2 = 0
 define zPD3 word[12]        ' Zählvariable für PD1 & PD2
 zPD3 = 0
 
 '!!!Definitionan fürs Display!!!
 
 define value word[10]      ' Wort für die Ausgabe ans LCD
 define output word[11]     ' Wort für die Ausgabe ans LCD
 
 
 
 
 '#########################Standby-Modus################################
 
 #Standbyschleife    'Loop Marke um Programmteil 1 zu wiederholen
 
 gosub LCD_CLS
 
 lcd_param = 1 : gosub LCD_GOTOLINE
 
 lcd_param = B_ : gosub LCD_WRITECHAR
 lcd_param = E_ : gosub LCD_WRITECHAR
 lcd_param = R_ : gosub LCD_WRITECHAR
 lcd_param = E_ : gosub LCD_WRITECHAR
 lcd_param = I_ : gosub LCD_WRITECHAR
 lcd_param = T_ : gosub LCD_WRITECHAR
 lcd_param = AUSRUFEZ : gosub LCD_WRITECHAR
 
 if Z_ODER_NICHT_Z then goto Programmdurchlauf ' wenn an port[7] ein HIGH anliegt beginne zu zählen
 
 goto Standbyschleife
 
 '#################################################  #############
 
 
 
 '##########################Hauptprogramm-Modus####################################
 
 #Programmdurchlauf 'Hauptprogramm in dem gezählt wir und Pumpe, Laser und Kamera gesteuert wird
 
 gosub LCD_CLS
 
 anfm = minute        'Zeit setzen Zähler
 anfs = second        'Zeit setzen Zähler
 anfspum = second     'Zeit setzen Pumpe
 anfskamla = second   'Zeit setzen Kamera un Läser
 
 lcd_param = 1 : gosub LCD_GOTOLINE
 
 lcd_param = L_ : gosub LCD_WRITECHAR
 lcd_param = O_ : gosub LCD_WRITECHAR
 lcd_param = S_ : gosub LCD_WRITECHAR
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 lcd_param = G_ : gosub LCD_WRITECHAR
 lcd_param = E_ : gosub LCD_WRITECHAR
 lcd_param = H_ : gosub LCD_WRITECHAR
 lcd_param = T_ : gosub LCD_WRITECHAR
 lcd_param = S_ : gosub LCD_WRITECHAR
 lcd_param = AUSRUFEZ : gosub LCD_WRITECHAR
 
 #Durchlauf
 
 if not Z_ODER_NICHT_Z then goto Ausgabe ' wenn an port[X] ein LOW anliegt beginne zu zählen
 
 if PD1 then zPD1 = zPD1 + 1  'Zähler PD1 zählt
 if PD2 then zPD2 = zPD2 + 1  'Zähler PD2 zählt
 'if PD3 then zPD3 = zPD3 + 1 'Zähler PD3 zählt wenn PD1 und PD2 gleichzeitig zählen
 
 goto Durchlauf
 
 '#################################################  #############
 
 
 
 '########################Display-Modus######################################
 
 #Display
 
 gosub LCD_CLS
 
 lcd_param = 1 : gosub LCD_GOTOLINE
 
 lcd_param = P_ : gosub LCD_WRITECHAR
 lcd_param = D_ : gosub LCD_WRITECHAR
 lcd_param = NULL + 1 : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 
 value = zPD1
 gosub WRITEZAEHLER
 
 lcd_param = P_ : gosub LCD_WRITECHAR
 lcd_param = D_ : gosub LCD_WRITECHAR
 lcd_param = NULL + 2 : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 
 value = zPD2
 gosub WRITEZAEHLER
 
 lcd_param = 2 : gosub LCD_GOTOLINE        ' Wechsel in die zweite Zeile
 
 lcd_param = P_ : gosub LCD_WRITECHAR
 lcd_param = D_ : gosub LCD_WRITECHAR
 lcd_param = NULL + 3 : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 
 value = zPD3
 gosub WRITEZAEHLER
 goto Durchlauf
 
 '#################################################  #############
 
 
 
 '########################Ausgabe-Modus######################################
 
 #Ausgabe
 
 endm = minute     'Minuten am Ende der Zählung
 ends = second     'Sekunden am Ende der Zählung
 
 gesm = endm - anfm 'Berechnung der verstrichenen Minuten
 gess = ends - anfs 'Berechnung der verstrichenen Sekunden
 
 if gess < 0 then ends = ends + 60 : gesm = gesm - 1 ' Fange Ueberlauf der Sekunden auf
 if gesm < 0 then endm = endm + 60                   ' Fange Ueberlauf der Minuten auf
 
 #Ergebnis
 
 lcd_param = 1 : gosub LCD_GOTOLINE
 
 lcd_param = Z_ : gosub LCD_WRITECHAR
 lcd_param = E_ : gosub LCD_WRITECHAR
 lcd_param = I_ : gosub LCD_WRITECHAR
 lcd_param = T_ : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 
 value = gesm
 gosub WRITEZEIT
 
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 
 value = gess
 gosub WRITEZEIT
 
 lcd_param = 2 : gosub LCD_GOTOLINE        ' Wechsel in die zweite Zeile
 
 lcd_param = P_ : gosub LCD_WRITECHAR
 lcd_param = D_ : gosub LCD_WRITECHAR
 lcd_param = NULL + 1 : gosub LCD_WRITECHAR
 lcd_param = DOPPELPUNKT : gosub LCD_WRITECHAR
 lcd_param = LEERZ : gosub LCD_WRITECHAR
 
 value = zPD1
 gosub WRITEZAEHLER
 
 goto Ergebnis
 
 '#################################################  #############
 
 'ENDE'
 
 '##########################für Ausgabe der Zahlen####################################
 
 
 #WRITEZEIT
 
 output = abs(value)
 
 ' Hunderter-Dezimalstelle oder Leerzeichen
 if abs(value) >= 100 then lcd_param = NULL + output/100 else lcd_param = LEERZ
 gosub LCD_WRITECHAR
 output = output mod 100
 
 ' Zehner-Dezimalstelle oder Leerzeichen
 if abs(value) >= 10 then lcd_param = NULL + output/10 else lcd_param = LEERZ
 gosub LCD_WRITECHAR
 
 ' einer Dezimalstelle oder Leerzeichen
 lcd_param = NULL + output mod 10
 gosub LCD_WRITECHAR
 return
 
 
 #WRITEZAEHLER
 
 output = abs(value)
 
 ' negatives Vorzeichen oder Leerzeichen
 if value < 0 then lcd_param = MINUS else lcd_param = LEERZ
 gosub LCD_WRITECHAR
 
 ' Zehntausender-Dezimalstelle oder Leerzeichen (Ausblenden fuehrender Nullen)
 if abs(value) >= 10000 then lcd_param = NULL + output/10000 else lcd_param = LEERZ
 gosub LCD_WRITECHAR
 output = output mod 10000
 
 ' Tausender-Dezimalstelle oder Leerzeichen
 if abs(value) >= 1000 then lcd_param = NULL + output/1000 else lcd_param = LEERZ
 gosub LCD_WRITECHAR
 output = output mod 1000
 
 ' Hunderter-Dezimalstelle oder Leerzeichen
 if abs(value) >= 100 then lcd_param = NULL + output/100 else lcd_param = LEERZ
 gosub LCD_WRITECHAR
 output = output mod 100
 
 ' Zehner-Dezimalstelle oder Leerzeichen
 if abs(value) >= 10 then lcd_param = NULL + output/10 else lcd_param = LEERZ
 gosub LCD_WRITECHAR
 
 ' einer Dezimalstelle oder Leerzeichen
 lcd_param = NULL + output mod 10
 gosub LCD_WRITECHAR
 return
 
 '############################################
 
 
 
 '############################################
 '
 ' Initialisieren des LCD
 '
 '############################################
 
 '*** LCD_Interface ***
 '( muss in jedes Programm mit LCD-Ausgabe eingefuegt werden)
 
 #LCD_INIT
 
 ' alle ports 0
 lcd_port = OFF
 
 ' 8-Bit-Modus aktivieren
 lcd_param=&H38 : gosub LCD_WRITECMD
 
 ' mit 8-Bit-Command in 4-Bit-Modus umschalten
 lcd_port=&B00000010
 tog lcd_e
 tog lcd_e
 
 ' ab jetzt 4-Bit-Modus
 lcd_param = &H28 : gosub LCD_WRITECMD
 lcd_param = &H0C : gosub LCD_WRITECMD
 
 ' Display loeschen
 #LCD_CLS
 lcd_param = &H02 : gosub LCD_WRITECMD
 lcd_param = &H01 : gosub LCD_WRITECMD
 return
 
 ' Zeilenwechsel
 #LCD_GOTOLINE
 if lcd_param = 1 then lcd_param = &H80
 if lcd_param = 2 then lcd_param = &HC0
 goto LCD_WRITECMD
 
 ' LCD-Kommando
 #LCD_WRITECMD
 lcd_buf = OFF
 goto LCD_WRITE
 
 ' Zeichenausgabe
 #LCD_WRITECHAR
 lcd_buf = &B00100000
 
 ' Kommando oder Zeichen an Display senden
 #LCD_WRITE
 lcd_port = lcd_buf or (lcd_param shr 4) ' Hi-Nibble
 tog lcd_e
 tog lcd_e
 lcd_port = lcd_buf or (lcd_param and &H0F)  ' Lo-Nibble
 tog lcd_e
 tog lcd_e
 return
 
 
 
 
 
 
 
 
 
	
	
	
	
	
	
	
	
	
	
	
	
		
		
		
		
			
				 Berechtigungen
				Berechtigungen
			
			
				
	
		- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-  
Foren-Regeln
 
			 
		 
	 
 
  
 
  
 
Lesezeichen