- LiFePO4 Speicher Test         
Ergebnis 1 bis 5 von 5

Thema: Ereigniszähler

  1. #1

    Ereigniszähler

    Anzeige

    Praxistest und DIY Projekte
    Hallo Leute

    Zur Beschreibung

    Wir haben eine rutierende Scheibe mit Metalproben. Diese Proben werden von einem Induktiven-Schalter erkannt. Die Proben kommen je nach Drehzahl im Abstand
    von ca 0,1 sec.

    Wir wollen jetzt die Impulse mit der C-Control M-Unit2 erkennen.
    Wir sind dafür an den Frequenzeingang (DFC1) gegangen und wollen den Eingang als Ereigniszähler nutzen.

    Mit Folgendem Programmcode:
    define LIGHT port[16]
    define poti ad[1]

    #system_init
    LIGHT=off
    define z word[13]
    define x word[14]

    '---- Umstellung Frequenz Ereignis -
    PRINT"#ON_CONFIG#";
    print"#INIT#";
    PRINT"#COMMAND#";
    PRINT"#PUT 00000110b#"
    PRINT"#OFF_CONFIG#";

    z=0
    #LOOP

    x=freq1
    IF x=1 THEN GOTO Zaehler1 ELSE GOTO Zaehler2

    #Zaehler1
    z=z+1
    GOTO Anzeige

    #Zaehler2
    z=z
    GOTO Anzeige
    '------------ ANZEIGE ---------------------
    #Anzeige
    print"#ON_LCD#";"#INIT#";

    print"#L101#";
    print"Ereignis ";rint FREQ;

    print"#L201#";
    print"Zaehler ";rint z;

    goto LOOP

    Uns wird leider weiterhin die Frequenz angezeigt.

    Wir benötigen die Erkennung der einzelnen Proben um eine Geschwindigkeit berechnen zu können.

    Wir sind für jeden Tip dankbar

  2. #2
    Benutzer Stammmitglied
    Registriert seit
    28.08.2006
    Beiträge
    48
    Hello Wrage,
    Try this

    Code:
    'Event Counter' 
    define lcd_backlight_off port[16] 
    define e_count freq1 
    
    print"#ON_LCD#";"#INIT#";"#CLR#";"#OFF#"; 
    lcd_backlight_off = 0 
    
    print"#ON_CONFIG#"; 
    put &b00000010 
    print"#OFF#"; 
    
    e_count = 0 
    
    #loop 
    print"#ON_LCD#";"#L101#";"e_count=";e_count;"      ";"#OFF#"; 
    goto loop
    Greetings,
    Drifter2006

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    21.09.2004
    Beiträge
    264
    Dafür gibt es doch ein fertiges Beispielprogramm:

    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII
    'IIIIIII DEMO ZUM BASIC-COMPUTER UNIT M 1.2/2.0 (by DIE HARD) IIIII
    'IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII IIIIIIIIIIIIIIIIIII
    '--------------------------------------------------------------------
    ' Beispiel zum BASIC-COMPUTER mit dem Programmer/Application-Board
    '--------------------------------------------------------------------
    ' ANWENDUNG: EREIGNISZÄHLER FREQ1 und FREQ2
    '
    '--------------------------------------------------------------------
    ' Dieses Beispiel zeigt die Vorgehensweise um die beiden Frequenzzähler
    ' als Ereigniszähler zu konfigurieren und abzufragen. Die Konfiguration
    ' erfolgt über ein KONFIGURATIONS-REGISTER, das wie alle erweiterten
    ' Funktionen über die "REDIRECT PRINT" Funktion gelesen und geschrieben
    ' werden kann.
    '--------------------------------------------------------------------
    ' Das Konfigurations-Register bietet folgende Optionen.
    '
    ' Bit 0 Schaltet beide PWM-DACs in den SERVO-Mode
    ' Bit 1 Schaltet den Frequenzzähler 1 in den EREIGNISZÄHLER Mode
    ' Bit 2 Schaltet den Frequenzzähler 2 in den EREIGNISZÄHLER Mode
    ' Bit 3 Aktiviert die PULLUP-Widerstände an PORT 1 bis 8
    ' Bit 4 Aktiviert die PULLUP-Widerstände an PORT 9 bis 15
    ' Bit 5 Zeigt an wenn die interne Uhr mit DCF77 synchronisiert wurde
    ' Bit 6 Signalisiert einen Fehler bei der IIC-Kommunikation
    ' Bit 7 Zustand der Start-Taste
    '---------------------------------------------------------------------
    ' Einzelheiten darüber finden Sie in den Demos zu den EXTENDED FUNCTIONS
    ' - LCD MODULE über die zusätzlichen Funktionen für das LCd
    ' - CONFIG MODULE über die zusätzlichen Funktionen für die Konfiguraton
    '
    ' Beschreibung:
    ' FREQ1 und FREQ2 sind Systemvariablen die nicht separat angelegt werden
    ' müssen. Ist der Zähler als Ereigniszähler konfiguriert, beeinhalten diese
    ' Variablen den aktuellen Zählerstand von Ereignissen.
    ' Im CONFIG-REGISTER bestimmen Bit 1 und Bit 2 die Funktion von FREQ1 u. FREQ2
    ' Beide Eingänge können getrennt konfiguriert werden, d.h. während einer
    ' der Eingänge ein Ereigniszähler ist kann der andere auch ein Frequenzzähler
    ' sein.
    ' Die Zähler können gelöscht werden, wenn den Systemvariablen jeweils der Wert 0
    ' zugewiesen wird.
    ' Ausserdem können Sie den Zählern beliebige Anfangswerte zuweisen, z.B.
    ' einem Zählerstand vom Vortag
    ' Der Ereigniszähler kann einen max. Wert von 32767 annehmen und zählt dann
    ' nicht mehr weiter
    ' Wenn Sie einen Frequenzgenerator an diese Eingänge anschliessen werden
    ' die registrierten Impulse im LCD angezeigt.
    ' Behelfsweise können Sie den DA1 Ausgang mit dem Frequenzzählereingang
    ' verbinden. Er erzeugt etwa 1880 Impulse pro Sekunde.
    '
    ' In diesem Beispiel wird der Zähler 1 bei Null und der Zähler 2 bei 1000
    ' gestartet. Beide Zähler werden bei 32767 gelöscht.
    ' Der Wert für jeden Zähler wird auf dem LCD ausgegeben.
    ' Für die Anzeige selbst wird die "REDIRECT PRINT" Funktion verwendet,
    '-----------------------------------------------------------------------

    '--------------------------
    '------ I/O PORTS ---------
    '--------------------------

    '--------------------------
    '---- SYSTEM MEMORY -------
    '--------------------------
    define TEMPVAL byte[1]


    #INIT

    '--UMLEITUNG DER PRINT-FUNKTION AUF DAS CONFIG-MODULE -
    print"#ON_CONFIG#"; 'UMGELEITET
    get TEMPVAL 'den aktuellen Wert lesen
    put (TEMPVAL or &B0000110) 'Bits setzten und zurück schreiben
    print"#OFF#"; 'Umleitung abschalten

    '--UMLEITUNG DER PRINT-FUNKTION AUF DAS LCD-MODULE ----
    print"#ON_LCD#";
    print"#INIT#";
    '----- ZÄHLER 1 AUF EINEN STARTWERT EINSTELLEN --------
    FREQ1=1000
    '-------------------------------------------------
    '-- DISPLAY DATA LOOP -
    '-------------------------------------------------
    #LOOP
    print"#L101#"; 'CURSOR AUF ZEILE 1 POS 1
    print"EVENTS1: ";rint FREQ1 ; 'AUSGABE FREQUENZ
    print" "; 'REST DER ZEILE LÖSCHEN
    print"#L201#"; 'CURSOR AUF ZEILE 2 POS 2
    print"EVENTS2: ";rint FREQ2; 'AUSGABE FREQUENZ
    print" "; 'REST DER ZEILE LÖSCHEN
    '---- ZÄHLER BEI MAX. ZÄHLERSTAND LÖSCHEN -------
    if FREQ1=32767 then FREQ1=0
    if FREQ2=32767 then FREQ2=0
    goto LOOP

    Auf den ersten Blick würde ich sagen, dass der Fehler in "Freq" anstatt "freq1" oder "freq2" liegt.

    mfg

    Stefan

  4. #4
    Vielen Dank für die Hilfe

    Hat geklappt.

    Jetzt haben wir ein anderes Problem, vielleicht kann uns dabei auch jemand helfen.

    Wir haben zwei umfangreiche Programme geschrieben, die einzelnd auch so laufen, wie ir uns das vorstelle. Wenn wir die beiden Programme zusammen fügen, dann hängt das Programm. Wir haben, die Stelle auch gefunden. Hier ist dann nur noch eine Addition von 1+1 möglich, bei 1+10 ist Ende.
    Kann der Interne Speicher voll sein?
    Macht es Sinn die einzelnen Programmme in Function zu schreiben?
    Wo ist der Vorteil einer Function und was macht Sieß

    Vielen Dank im Vorraus

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    03.09.2005
    Ort
    Dachau
    Alter
    40
    Beiträge
    210
    ich vermutte das du bei der addition zwei mal die gleiche variable benutzt und irgendwo dann dein programm streikt weil die variable zu groß ist!

    vorteil einer funktion ist das sie einen wert ausgegen kann oder direkt mir einer anderen anweisung ausgeführt werden kann. z.B. eine variable im quadrat durch 100 teilen und 5 dazuzählen nehmen:

    Code:
    print test(50)       'gibt 30 am terminal aus
    end
    
    function test (b as byt)
    define c as word
    c = b * b      '=2500
    c = c / 100   '=25
    c = c + 5     '=30
    return c
    end function
    mehere funktionen ineinander verstapeln können allerdings ein problem ergeben, da immer byte 1&2 im Ram genutzt werden und mehrere ineinernader verschachtelte die variable überschereiben!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test