
|
INFO - FAQ - CC2-Forum - CCPro-Forum |
|
||
|
Hallo OMICRO Experten, folgendes Problem habe ich festgestellt, als ich an die OMICRO Pin5/Port 3 einen Signalgenerator angelegt habe, um die Genauigkeit der Frequenzmessung bzw. Impulszaehlung zu testen. Speichere ich den gemessenen Zaehlerwert von Freq in einer Variablen ab und sende diesen V-Wert mittels Print über RS232 zur Auswertung am PC, dann ist dieser Wert exakt identisch mit der Frequenz des angelegten Signals, lege ich z.B. ein 1kHz Rechtecksignal an Port3 an, so liefert das Programm s.u. exakt den Zaehlerwert = 80; dies ergibt bei einer Torzeit von 4x20msec einen Frequenzwert von 80/0,08 = 1kHz Im gleichen Printbefehl s.u. habe ich nochmals die Ausgabe der Fre veranlasst, wie auch im OMICRO Manual beschrieben, desgleichen in einer weiteren Zeile dahinter. In beiden Fällen schwankt der Ausgabewert zwischen 70 bis 80, jedesmal ein anderer Wert. Es scheint als würde bei einem im Print Befehl enthaltenen Fre Ausgabe die Torzeit so verkürzt, sodaß ein kleinerer Ausgabewert daraus resultiert. Mache ich im Programm etwas nicht erlaubtes, das zu diesem Fehler führt? Hat jemand von Euch dies auch beobachtet? Was ist Eure Erklärung für diesen Ausgabefehler? In meiner Anwendung hatte ich geplant, den Wert erst Zwischen zu speichern und dann erst auszugeben, deshalb ist für mich diese Erscheinung kein Problem. Trotzdem würde ich gerne verstehen, was die Ursache für diesen Fehler ist. Freundliche Grüße und Dank im voraus Joe ###### Listing ###### ' IMPZAEH3.BAS ' Status: vom Di. 31.08.2010; Programm laeuft einwandfrei; Zaehlung sehr genau bei Ausgabe aus einer Variablen; bei direkter Ausgabe mittels Print ca. 10% zu kleiner Wert ' Testprogramm um Impulse an Pin5/Port3 zu zaehlen ' An Port 3 werden externe Impulse vom Signalgeber ueber Transistor-Kollektorausgang angelegt, ' so dass im Einschaltmoment Port 3 kurzzeitig auf high=5V liegt ' --- Betriebssystem konfigurieren ------------------------------------------ INCLUDE "OM.DEF" 'Include-Datei mit Definitionen ' --------------------------------------------------------------------------- ' --- Definition der Byte Variablen fuer das Hauptprogramm und die verwendeten Softwaremodule ' ---------------------------------------------- DEFINE Imp_zahl byte[01] ' Anzahl der Impulse an Pin5/Port3 als Mass fuer die Geschwindigkeit DEFINE Sek_Wert byte[02] ' Zwischenspeicher fuer aktuelle Zeit DEFINE Re_Wert byte[03] DEFINE Dauer byte[04] ' ---- Definition der Bitvariablen DEFINE Flag1 bit[249] 'von Byte 32; benoetigt zur Verzweigung bei Sekunde Abfragung ' ----Definition Ports----------------------------------------------------------------------- DEFINE BEEPER port[6] 'Signalausgang '***************** Hauptprogramm zu Zaehlen der Freq Impulse an Port 3/Pin5 #Imp_zaehlen Sek_Wert=second If Flag1=on Then If Sek_Wert Mod 3=0 Then GOTO Weiter ELSE Flag1=off ENDIF GOTO Weiter ELSE IF Sek_Wert MOD 3<>0 Then GOTO Weiter ELSE Flag1=ON Re_Wert=34 ' ca. 750 Hz Dauer= 6 ENDIF ENDIF FREQ=4 Imp_zahl=FREQ PRINT "Sekunde="; Sek_Wert;" Imp_zahl= ";Imp_zahl, "Freq= ";FREQ Print "Freq= ";FREQ ' waehrend Imp_zahl richtig u. genau 80 ausgegeben wird, tritt bei der ' Wert-Ausgabe Freq=70 bis 80. Bei Print Freq wird also Fehlerhaft gezaehlt, ' als ob die Torzeit bis zu 10% zu kurz waere BEEP Re_wert,Dauer,BEEPER #Weiter Goto Imp_zaehlen End |
| Antwort schreiben |