Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Wichtig: Bevor Du wegen einem Problem mit der CC2 postest, stelle sicher, daß Du
die neueste OS-Version, die neuseste Compiler-DLL und die neuesten Modulversionen benutzt!
Beachte, daß sich auf der CD zur CC2-Unit/Station auch jetzt noch die ältesten Dateien befinden!
Es gelten folgende Anleitung und Regeln: Regeln CC2Net.de-Forum
Zurück zum Artikel  (Blaue Felder sind Pflichtfelder)


Name:   UserID: 
 E-Mail:
Kategorie
Betreff
Homepage:
Link-Titel:
Link-URL:
Cookie für Name, UserID, E-Mail, Homepage-URL setzen
(Erspart die Neueingabe bei Beiträgen und Antworten)
(Zum Löschen des Cookies hier klicken)
Ich nutze:
C-Control II Unit
C164CI-Controllerboard
C-Control II Station
CCRP5 mit CC2-Unit (Conrad Roboter)
CC2-Application-Board
CC2-StarterBoard
CC2-ReglerBoard
eigenes Board
original OS     OSOPT_V2     OSOPT V3.0 OSOPT V3.1

Kommentar:
Einfügen von HTML im Kommentar:

Link einfügen: <a href="LINKURL" target="_blank">LINKTITEL</a>
Bild einfügen: <img src="BILDURL">
Text formatieren: <b>fetter Text</b>  <i>kursiver Text</i> <u>unterstrichener Text</u>
Kombinationen sind auch möglich z.B.: <b><i>fetter & kursiver Text</i></b>
C2 Quellcode formatieren: <code>Quellcode</code>
ASM Quellcode formatieren: <asm>Quellcode</asm>
(Innerhalb eines Quellcodeabschnitts ist kein html möglich.)
Wichtig: Bitte mache Zeilenumbrüche, bevor Du am rechten Rand des Eingabefeldes ankommst !  

> Hallo Christian, > > Ich sehe zwar nicht, wo Du genau die Zeitwerte herbekommst, jedoch > solltest Du bei Zeitmessungen, bei denen die Genauigkeit besser als 1sek. sein > muß immer den Systemtimer benutzen. > Daß Dir das Auskommentieren der LCD-Ausgabe gut eine sek. bringt, > glaube ich Dir gern. > Denn Du schreibst wahrscheinlich nonstop auf das Display ohne große Pause > zwischen den Ausgaben. (Wie groß ist <code>sleep messpause;</code> ?) > Normal reicht es immer Displayausgaben nur 4 bis 5 mal pro Sekunde zu machen. > Dementsprechend könnte man dies Abfangen. > (z.B. alle x Schleifendurchgänge eine Ausgabe oder den timer benutzen.) > > Aber hier eine vereinfachte Funktion zur Zeitmessung: > <code> > function zeitmess(long timeout/*in ms*/) returns long > {long timer,lcdtimer; > lcdtimer=system.timer(); > timer=system.timer(); > // Start Zeitmesung > loop > { > // Programmcode während der Messung > //... > > if lcdtimer-system.timer()<=0 > { > lcdtimer=system.timer()+200; > // LCD-Ausgaben während der Messung alle 200ms > // ... > } > > if system.timer()-timer>=timeout or <Stopbedingung(en)> > { > timer=timer-system.timer(); > break; // Timeout, Schleife verlassen > } > } > return timer; // Hier z.B. Zeitdauer in ms zurückgeben > }</code> > > MfG André H. > > > > Hallo zusammen, > > > > ich habe Probleme eine einigermassen genaue Zeitmessung hinzukriegen. > > auf 100msec genau würde reichen. > > Hier die Messfunktion: > > > > > > function strom_messen(string richtung) returns int > > { > > halt write_timedate; > > long summe; > > messungen = 1; > > summe = 0; > > messzeit = messpause; // Vorlauf von Vorprogramm > > strom_maxwert = 0; > > string_out(3,2,richtung); > > strom = ports.adc(div.messport) - div.strom_offset; > > if strom > (strom_grenzwert+ 150) return 999;// Abbruch, Kurzschluss ?? > > rblcd.clear(); > > strom_out(2, 10, strom_grenzwert); > > string_out(3, 2, richtung); > > loop > > { > > strom = ports.adc(div.messport) - div.strom_offset; // Strommessung > > if strom > strom_maxwert > > strom_maxwert = strom; > > // rblcd.delline(2); > > //strom_out(2, 0, strom); // Stromwert anzeigen > > //strom_out(2, 10, strom_grenzwert); > > //rblcd.goto(4,0); > > //rblcd.bargraph(strom/2, 100); > > messungen = messungen + 1; > > summe = summe + strom; > > if math.abs(messzeit - time_wait) < 220 // ZwischenTest, schaltet Switch ? > > { > > if endschalter_status()==1 // > > { > > div.fehlercode = 1; // Falsche Richtung ?? > > break;// > > } > > } > > if messzeit - time_wait >320 // Messzeit > Wartezeit - 200 msec > > and endschalter_status()==1 break;//Break wenn Endschalter ein > > sleep messpause; > > messzeit = messzeit + messpause; > > } > > messzeit = messzeit + 2*messpause; > > resume write_timedate; > > return summe/messungen; //Mittelwert zurückgeben > > } > > > > Ich habe schon verschiedenes ausprobiert, die auskommentierten Zeilen LCD-Anzeigen > > brachten eine gute Sekunde. Priorität des threads hochsetzen hat auch nicht viel gebracht. > > Eine externer thread mit Zeitmessung brachte auch nicht viel. > > Ich liege immer noch etwa 1 Sekunde unter dem tatsächlichen Wert. > > Hat jemand eine Idee wie ich das genauer hinkriegen kann ?? > > Danke für jeden Tip. > > > > MfG > > ChristianK
Dateianhang: (.gif, .png., .jpg, .zip, .rar)
max. 256kB
max. 256kB