Der Nachfolger des WDR-Computerclub mit Wolfgang Back und Wolfgang Rudolph - ...und immer ein Bit übrigbehalten!


Das Forum zur C-Control-1
Welche C-Control-Varianten existieren?
Übersicht - Suchen - Neueste 50 Beiträge - Neuer Beitrag - Login - Registrieren
INFO - FAQ - CC2-Forum - CCPro-Forum 

 Port3 u. 4 mittels keyb Interrupt benutzen für Impulszaehlung Kategorie: Open-Micro/Open-Mini/Open-Midi/Open-Macro/Open-Maxi (von Joe - 27.02.2017 23:28)
 Als Antwort auf Re: Polling? von Norbert - 25.02.2017 2:13
Joe nutzt:  Open-Micro, Open-Macro
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

Bisherige Antworten:

Prellen? (von Dietmar - 1.03.2017 17:36)
    Re: Prellen? (von Joe - 2.03.2017 22:51)
        KBSCR-Abfrage in BASIC (von Dietmar - 18.04.2017 3:34)
        Re: Prellen? (von Dietmar - 6.03.2017 22:20)