Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

stoppuhr + serielle schnittstelle

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
sPankY



Anmeldungsdatum: 16.04.2005
Beiträge: 3

BeitragVerfasst am: 16.04.2005, 19:58    Titel: stoppuhr + serielle schnittstelle Antworten mit Zitat

moin zwinkern
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 zwinkern was nach meiner messung ungefähr eine sekunde ist zwinkern 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
Benutzer-Profile anzeigen Private Nachricht senden
Devilkevin
aka Kerstin


Anmeldungsdatum: 11.11.2004
Beiträge: 2532
Wohnort: nähe Mannheim

BeitragVerfasst am: 16.04.2005, 21:29    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 17.04.2005, 10:44    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
sPankY



Anmeldungsdatum: 16.04.2005
Beiträge: 3

BeitragVerfasst am: 17.04.2005, 10:54    Titel: Antworten mit Zitat

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 zwinkern ?!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
jb



Anmeldungsdatum: 14.01.2005
Beiträge: 2010

BeitragVerfasst am: 17.04.2005, 11:00    Titel: Antworten mit Zitat

Hmmmm, mal überlegen....

Setz einfach da, wo Du ein "//" geschrieben hast, meinen Beispielcode ein. zwinkern
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
Code:

Warte 70

wartest Du dann ~ 1s.

jb
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
sPankY



Anmeldungsdatum: 16.04.2005
Beiträge: 3

BeitragVerfasst am: 17.04.2005, 11:20    Titel: Antworten mit Zitat

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 zwinkern ist eine von eurern möglichkeiten ne stoppuhr ?!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Paul
aka ICC, HV-Freak


Anmeldungsdatum: 11.09.2004
Beiträge: 588
Wohnort: Uelzen

BeitragVerfasst am: 17.04.2005, 11:25    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Skilltronic



Anmeldungsdatum: 10.09.2004
Beiträge: 1148
Wohnort: Köln

BeitragVerfasst am: 20.04.2005, 12:21    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu QBasic. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.

 Impressum :: Datenschutz