
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo Dietmar, einige Tage musste ich rum probieren, bis ich es richtig zum laufen gebracht habe mit der Port 4 Freq Abfrage. Dazu habe ich nochmals das Verhalten an Port 3 getestet und verglichen mit Port 4. Port 4 verhält sich etwas anders als Port 3. Während Port 3 auf die Flanke reagiert und die Low Zeit nicht berücksichtigt, reagiert Port 4 in der Low Zeit anders u. zählt weiter. Nur mit einer Verriegelung u. angepasster Torzeit konnte ich einwandfreie Zählergebnisse bekommen. Dazu noch das Programm mit Port 4 Verriegelung und Port 3 Interrupt. Alle 3 Test Programme hier nun im Anhang. Nochmals vielen Dank für Deine Hilfe Joe Hallo Norbert, danke auch für Deine Anregung ####### Zaehl Programm Port 4 mit Freq u. Port 3 mit Interrupt ######### nach Konzept http://ccintern.dharlos.de/forum/lesen.php?eintrag=12097 ' P4P3FREQ.BAS P4P3 Interrupt ' Status: vom Sa. 18.02.2017 ' mit verriegelung u. torzeit = 255 funktioniert es nun ' Testprogramm zur Messung der Anzahl von Low-Impulse mit Wiederholtate 0.5 bis 500sec u. Im-Laenge 0.01 bis 10 an Port 4/Pin4 und ' der Anzahl von Low-Impulsen mit Wiederholrate 0.04 bis 40sec u. Impulslaenge 0.001sec an Port 3/Pin5 ' Hardware Port4: signal wird invertiert an Port [4] angelegt; Port 4 Interrupt gesteuert ' Hardware Port3: 0/5V Impulse werden angelegt an Port3 mittels Zusatzschaltung damit nicht HOST Mode auftritt ' so dass Port 3 im Einschaltmoment sauber an Betriebsspannung=5V liegt ' Die Programmuebertragung muss mit OCBASR.EXE in OPTION/TOOLS/BASIC Compiler erfolgen ' hier ohne compile benutzt ' --- Betriebssystem konfigurieren ------------------------------------------ INCLUDE "OM.DEF" 'Include-Datei mit Definitionen ' --------------------------------------------------------------------------- ' --- Definition der Byte Variablen fuer das Hauptprogramm und die verwendeten Softwaremodule ' ---------------------------------------------- DEFINE Im_P4 byte 'Impulse zaehlen an PortP4/Pin4 DEFINE Im_P3 byte 'Impulse zaehlen an Port P3/Pin5 DEFINE Flag BYTE DEFINE Flag1 BIT[1] OF Flag ' ---- Definition der Bitvariablen ' ----Definition Ports----------------------------------------------------------------------- DEFINE port4 port[4] 'Eingangsignal mit neg. Flanke ausgwertet DEFINE port3 port[3] ' " " '******** Interrupt Einstellung von Pin4/Port4 ' der folgende Code-Teil basiert auf ' aus ccintern.dharlos.de/forum/lesen.php?eintrag=11676 ' --- Das Hauptprogramm ----------------------------------------------------- #main CONFIG2=&b01000000 'IRQEN = Bit 6 im CONFIG2-Register des Kontrollers setzen INTERRUPT basicirq 'BASIC-Interruptroutine vereinbaren 'FREQ=1 'Torzeit 20 msec ==> 3x Ausgabe 'FREQ=100 'Torzeit 200 msec ==>liefert noch 2 Ausgaben FREQ=255 'Torzeit 200 msec ==>mir verriegelung nun einwandfrei KBIER=&b01001100 'FREQ1 zusätzlich an PORT[4] 'KBIER=&b01001000 'FREQ1 zusätzlich an PORT[4]; damit geht es nicht PrintSpc=ON 'Flag1=OFF WHILE TRUE 'TRUE, funktioniert nur mit TRUE IF Freq1<>0 AND Flag1=OFF THEN Flag1=ON ' IF Freq1<>0 THEN ' ohne verriegelung kommen laufend werte ADD Im_P4,1 PRINT "Im_P4:";Im_P4,"Freq1:";Freq1 ENDIF IF Freq1=0 AND Flag1=ON THEN Flag1=OFF ENDIF ' IF Freq1<>0 THEN PRINT "Freq1:";Freq1 druckt 3 x aus ' Add Im_P4,1 ' PRINT "Freq1:";Freq1,"Im_P4:";Im_P4 'alle 60 sec kommt eine neg. Flanke u. nach 6 sec geht Port wieder auf high ' ENDIF WEND END END PROCEDURE basicirq 'COMPILE 'Interruptroutine an Port 4 ADD Im_P3,1 PRINT "Im_P3=";Im_p3 RETURN INTERRUPT END PROCEDURE ####### Zaehl Programm Port 3 mit Interrupt ################ ' P3__FREQ.BAS P4P3 Interrupt ' Status: vom Mo. 27.02.2017 ' Testprogramm zur Messung der Anzahl von Low-Impulse mit Wiederholtate ' 60sec u. LOw. Im-Laenge 6 an Port 3/Pin5 ' Hardware Port3: 0/5V Impulse werden angelegt an Port3 mittels Zusatzschaltung damit nicht HOST Mode auftritt ' so dass Port 3 im Einschaltmoment sauber an Betriebsspannung=5V liegt ' Die Programmuebertragung muss mit OCBASR.EXE in OPTION/TOOLS/BASIC Compiler erfolgen ' hier ohne compile benutzt ' --- Betriebssystem konfigurieren ------------------------------------------ INCLUDE "OM.DEF" 'Include-Datei mit Definitionen ' --------------------------------------------------------------------------- ' --- Definition der Byte Variablen fuer das Hauptprogramm und die verwendeten Softwaremodule ' ---------------------------------------------- DEFINE Im_P4 byte 'Impulse zaehlen an PortP4/Pin4 DEFINE Im_P3 byte 'Impulse zaehlen an Port P3/Pin5 ' ---- Definition der Bitvariablen ' ----Definition Ports----------------------------------------------------------------------- DEFINE port4 port[4] 'Eingangsignal mit neg. Flanke ausgwertet DEFINE port3 port[3] ' " " '******** Interrupt Einstellung von Pin4/Port4 ' der folgende Code-Teil basiert auf ' aus ccintern.dharlos.de/forum/lesen.php?eintrag=11676 ' --- Das Hauptprogramm ----------------------------------------------------- #main FREQ=1 'Torzeit = 255*0.02 msec = 5.1 Sekunde PrintSpc=ON WHILE TRUE 'TRUE, funktioniert nur mit TRUE IF Freq<>0 THEN PRINT "Freq1:";Freq 'alle 60 sec kommt eine neg. Flanke u. nach 6 sec geht Port wieder auf high ' es kommt ein ausdruck und der wert liegt zwischen 1 bis 255 ' je nach dem, wie Torzeit u. Impuls zusammentreffen WEND END ####### Zaehl Programm Port 4 mit Verriegelung u. Port 3 mit Interrupt### ' P4P3RIEG.BAS P4P3 Interrupt ' Status: vom Sa. 18.02.2017 ' Testprogramm zur Messung der Anzahl von Low-Impulse mit Wiederholtate 0.5 bis 500sec u. Im-Laenge 0.01 bis 10sec an Port 4/Pin4 und ' der Anzahl von Low-Impulsen mit Wiederholrate 0.04 bis 40sec u. Impulslaenge 0.001sec an Port 3/Pin5 ' Hardware Port4: signal wird invertiert an Port [4] angelegt; Port 4 Interrupt gesteuert ' Hardware Port3: 0/5V Impulse werden angelegt an Port3 mittels Zusatzschaltung damit nicht HOST Mode auftritt ' so dass Port 3 im Einschaltmoment sauber an Betriebsspannung=5V liegt ' Die Programmuebertragung muss mit OCBASR.EXE in OPTION/TOOLS/BASIC Compiler erfolgen ' hier ohne compile benutzt ' --- Betriebssystem konfigurieren ------------------------------------------ INCLUDE "OM.DEF" 'Include-Datei mit Definitionen ' --------------------------------------------------------------------------- ' --- Definition der Byte Variablen fuer das Hauptprogramm und die verwendeten Softwaremodule ' ---------------------------------------------- DEFINE Im_P4 byte 'Impulse zaehlen an PortP4/Pin4 DEFINE Im_P3 byte 'Impulse zaehlen an Port P3/Pin5 DEFINE Flag byte DEFINE Flag1 Bit[1] OF Flag ' ---- Definition der Bitvariablen ' ----Definition Ports----------------------------------------------------------------------- DEFINE port4 port[4] 'Eingangsignal mit neg. Flanke ausgwertet DEFINE port3 port[3] ' " " '******** Interrupt Einstellung von Pin4/Port4 ' der folgende Code-Teil basiert auf ' aus ccintern.dharlos.de/forum/lesen.php?eintrag=11676 ' --- Das Hauptprogramm ----------------------------------------------------- #main CONFIG2=&b01000000 'IRQEN = Bit 6 im CONFIG2-Register des Kontrollers setzen INTERRUPT basicirq 'BASIC-Interruptroutine vereinbaren PrintSpc=ON WHILE TRUE 'TRUE, funktioniert nur mit TRUE IF port4=OFF AND Flag1=OFF THEN Flag1=ON ADD Im_P4,1 PRINT "Im_P4:";Im_P4 ENDIF IF port4=ON AND Flag1=ON THEN Flag1=OFF ENDIF WEND END PROCEDURE basicirq 'COMPILE 'Interruptroutine an Port 4 ADD Im_P3,1 PRINT "Im_P3=";Im_p3 RETURN INTERRUPT END PROCEDURE |
| Antwort schreiben |