Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
sPankY
Anmeldungsdatum: 16.04.2005 Beiträge: 3
|
Verfasst am: 16.04.2005, 19:58 Titel: stoppuhr + serielle schnittstelle |
|
|
moin
im elektro unterricht haben wir eine schaltung gebaut mit der man die temperatur messen kann ... diese müssen wir am pc anschliessen und nen programm schreiben das die temperatur berechnet !
mein problem ist ich brauch ne stoppuhr ! ich hab das bis jetzt mit einer
" for n = 1 to 1000000" gemacht was nach meiner messung ungefähr eine sekunde ist aber das passt hinten und vorne nich.
hier erstmal mein programm
Code: |
ba = &H3F8
OUT (ba + 4), 0
sleep 2
n = 1 //
Out (ba + 4), 2
DO While((Wert AND 128) = 128)
n = n+1 //
Loop
n = n /1000000 //
rn = n /0.000047
ln = LOG(3300 / rn
t = 1 / ((ln/3700) + (1 / 298))
t = t- 273
write t
|
die zeilen wo hinter ein // ist, ist quasi meine stoppuhr !! ich brauch aber eine genaue stoppuhr !
wer kann mir helfen ?!
DANKE ! |
|
Nach oben |
|
 |
Devilkevin aka Kerstin

Anmeldungsdatum: 11.11.2004 Beiträge: 2532 Wohnort: nähe Mannheim
|
Verfasst am: 16.04.2005, 21:29 Titel: |
|
|
Aus der Monster FAQ:
Zitat: |
Frage deutsch
~~~~~~~~~~~~~~
Wie programmiere ich eine Stoppuhr oder einen Countdown-Timer?
Wie kann ich dabei den Sekundensprung um Mitternacht umgehen?
Question English
~~~~~~~~~~~~~~
How can I implement a stop watch or e countdown timer?
Answer 2
~~~~~~~~
' TIMER can be used - it ticks off 1/18.2 of a
'second:
delay = 2
finish = TIMER + delay
DO
LOOP UNTIL TIMER => delay
' This works, but has a fatal midnight flaw: the
'timer is reset to 0 at midnight and it is therefore
'possible that "finish" will never be reached. It's
'easy to test for midnight (there are 86,400 seconds in
'a day).
' However, it is easy not to depend on TIMER to do
'the counting - count it yourself. Something like:
delay = whatever
t! = INT(TIMER)
DO
IF t! <> INT(TIMER) THEN
t! = INT(TIMER)
count = count + 1
PRINT count
END IF
LOOP UNTIL count = delay
' This routine doesn't care what the reading of
'TIMER is, only that it has changed. A roll-over at
'midnight is just as valid a change as an increase of
'one second. If you want 1/10's of a second, you'll
'need to alter accordingly. Since TIMER ticks at 18.2
'times a second, the smallest interval will be
'0.0549450549 sec.
|
_________________ www.piratenpartei.de |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 17.04.2005, 10:44 Titel: |
|
|
Oder Du benutzt
Code: |
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
|
Damit wartet der Rechner auf den Bildschirmstrahlrücklauf, d.h. bei einer
Bildwiederholfrequenz von 70Hz ergibt sich dafür eine WArtezeit von ~1/70s.
Das heißt, wenn Du eine Sekunde warten willst, musst Du sowas schreiben:
Code: |
FOR warte% = 1 to 70
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
NEXT warte%
|
jb |
|
Nach oben |
|
 |
sPankY
Anmeldungsdatum: 16.04.2005 Beiträge: 3
|
Verfasst am: 17.04.2005, 10:54 Titel: |
|
|
hey danke ... nur hab ich ein problem ... ich hab irgendwie immer noch kein peil wie ich eure 2 mögichkeiten in mein programm intengrieren kann ?! |
|
Nach oben |
|
 |
jb

Anmeldungsdatum: 14.01.2005 Beiträge: 2010
|
Verfasst am: 17.04.2005, 11:00 Titel: |
|
|
Hmmmm, mal überlegen....
Setz einfach da, wo Du ein "//" geschrieben hast, meinen Beispielcode ein.
Wäre nur interessant zu erfahren, wie lange Du stoppen willst, dann müsstest du den Code nämlich noch
leicht modifizieren.
Mit ner SUB ginge das aber leichter:
Code: |
SUB Warte(HowMany AS INTEGER)
FOR i = 1 TO HowMany
WAIT &H3DA, 8
WAIT &H3DA, 8, 8
NEXT i
END SUB
|
Mit
wartest Du dann ~ 1s.
jb |
|
Nach oben |
|
 |
sPankY
Anmeldungsdatum: 16.04.2005 Beiträge: 3
|
Verfasst am: 17.04.2005, 11:20 Titel: |
|
|
ich glaub ihr kapiert mich nicht ... ich muss wenn das eine signal von der schnittstelle auf high(1) ist ... brauche ich die zeit ... wie lange das gebracuht hat (zeit)von dem zeitpunkt wo ich auf +10V gesetzt hab und das signal auf (1) ist, das müsste irgendwas mit ms sein ...
ich bräuchte eine stoppuhr ist eine von eurern möglichkeiten ne stoppuhr ?! |
|
Nach oben |
|
 |
Paul aka ICC, HV-Freak
Anmeldungsdatum: 11.09.2004 Beiträge: 588 Wohnort: Uelzen
|
Verfasst am: 17.04.2005, 11:25 Titel: |
|
|
Code: |
Startzeit# = TIMER
DO
IF ... THEN EXIT DO
LOOP
Endzeit# = TIMER
Intervall# = Endzeit# - Startzeit#
PRINT Intervall#
|
Und statt den drei Pünktchen im IF-Befehl setzt du dort deine Bedingung ein (z.B. den Status eines Ports etc.)
Sobald diese Bedingung erfüllt ist wird die Schleife verlassen und dir wird die Zeit angezeigt wie lange man in der Schleife war. _________________
 |
|
Nach oben |
|
 |
Skilltronic

Anmeldungsdatum: 10.09.2004 Beiträge: 1148 Wohnort: Köln
|
Verfasst am: 20.04.2005, 12:21 Titel: |
|
|
Hallo
Ich hoffe, ich habe das richtig verstanden. Das folgende Progrämmchen schaltet den DTR-Pin an COM1 ein und misst anschliessend die Zeit, die vergeht bis der CTS-Eingang auf high gesetzt wird. Die Genauigkeit beträgt unter DOS ca. 0,2 ms, aber auch unter Windows läuft es recht zuverlässig.
Code: | CLS
OUT 67, 36 'Nur Highbyte des Timers lesen
OUT 64, 0 'Voller Zaehlbereich von 255-0 fuer das Highbyte
tgesamt = 0 'tgesamt zaehlt die Takte
OUT 1020, 1 'DTR einschalten
talt = INP(64) 'Startzeit
DO 'Warteschleife
tneu = INP(64) 'neuer Timerstand
eingang = INP(1022) AND 16 'CTS einlesen
dt = talt - tneu 'Timerstandifferenz
IF dt < 0 THEN dt = dt + 256 'Ausgleich bei roll-over
tgesamt = tgesamt + dt 'Differenz zu tgesamt addieren
talt = tneu
LOOP UNTIL eingang = 16 'Warten bis CTS auf high
OUT 1020, 0 'DTR ausschalten
tgesamt = tgesamt / 4.661 'in Millisekunden umrechnen
PRINT USING "#####.#"; tgesamt; 'mit einer Nachkommastelle ausgeben
PRINT " ms"
|
Gruss
Skilltronic _________________ Elektronik und QB? www.skilltronics.de ! |
|
Nach oben |
|
 |
|