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:

10mS an jedem Rechner
Gehe zu Seite Zurück  1, 2
 
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
nemored



Anmeldungsdatum: 22.02.2007
Beiträge: 4709
Wohnort: ~/

BeitragVerfasst am: 28.04.2009, 15:45    Titel: Antworten mit Zitat

Zitat:
Das mit dem SHR ist ja gut und schön, nur gibt es diesen Befehl in QBasic nicht.

Hoppla, mein Fehler; dann fehlt dazu ein Referenz-Hinweis.

Aber mit dieser Codezeile komme ich nicht klar:
Code:
highbyte% = FIX(teiler& \ 256)

teiler& \ 256 ist doch bereits eine Integerdivision, da sollte durch das FIX doch nichts weiter mehr passieren, oder?
_________________
Deine Chance beträgt 1:1000. Also musst du folgendes tun: Vergiss die 1000 und konzentriere dich auf die 1.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Skilltronic



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

BeitragVerfasst am: 28.04.2009, 22:13    Titel: Antworten mit Zitat

nemored hat Folgendes geschrieben:
teiler& \ 256 ist doch bereits eine Integerdivision, da sollte durch das FIX doch nichts weiter mehr passieren, oder?


Da hast du recht, habe ich doppelt gemoppelt zwinkern
_________________
Elektronik und QB? www.skilltronics.de !
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
triti



Anmeldungsdatum: 23.04.2009
Beiträge: 44

BeitragVerfasst am: 05.05.2009, 10:17    Titel: Antworten mit Zitat

Ganz vielen Dank für die ausführliche Erklärung!
Verstanden, ausprobiert, alles funktioniert.
Wunderbar....

lg
Triti
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
storno



Anmeldungsdatum: 13.05.2009
Beiträge: 16

BeitragVerfasst am: 15.05.2009, 14:35    Titel: Antworten mit Zitat

Skilltronic hat Folgendes geschrieben:
Hallo

Jojo hat Folgendes geschrieben:
falsche antwort. timer hat eine auflösung von höchstens 55ms.


Na ja, standardmäßig schon. Unter DOS kann man den Timer aber schneller laufen lassen. Eine Auflösung von 10 ms bekommt man mit

Code:
OUT 67, 52    'Timer-Steuerregister: Timer 0, Low- und Highbyte, Modus 2
OUT 64, 154   'Lowbyte
OUT 64, 46    'Highbyte


Zur Einstellung des Timer-Steuerregisters siehe hier.

Im Timer sitzt ein 16 Bit Teiler, der mit 1,193 MHz getaktet wird. Mit dem Low- und Highbyte kann man das Teilerverhältnis aber einstellen.

Auf die Werte für Low- und Highbyte kommt man so. Normalerweise läuft der Timer mit einer Auflösung von 2^16 Takten pro Stunde. Macht 65536 Takte / 3600 Sekunden = 18,204 Hz bzw. 54,9 ms Periodendauer.

Will man 100 Hz bzw. 10 ms Auflösung, muss man den Timer 100/18,204 = 5,493 mal schneller laufen lassen. Also teilt man 65536 durch 5,493. Ergibt ein Teilerverhältnis von 11930. Die zerlegt man in zwei Byte und kommt so auf einen Wert für das Highbyte von 46 und das Lowbyte ist 154.

46 * 256 + 154 = 11930.

Will man z.B. 5 kHz Taktrate bzw. 200 µs Periodendauer schreibt man folglich:

Code:
OUT 67, 52    'Timer-Steuerregister: Timer 0, Low- und Highbyte, Modus 2
OUT 64, 18    'Lowbyte
OUT 64, 1     'Highbyte


Eine Warteschleife sieht dann z.B. so aus:

Code:
warteschleife:
DO
 tneu = TIMER
LOOP WHILE tneu = talt
talt = tneu
RETURN


So kann man den Timer auf jede gewünschte Taktrate umstellen. Langsamer geht natürlich nicht, weil man nur durch maximal 2^16 teilen kann. Der große Vorteil gegenüber Zählschleifen ist aber, dass es egal ist, was außerhalb der Warteschleife passiert, die Zeitabstände bleiben immer gleich lang. Vorausgesetzt, es dauert nicht länger als eine Timerperiode. Und diese Methode sollte auf jedem Rechner laufen.

Gruß
Skilltronic



Wie kommt man auf das Ergebniss für 5 KHZ ?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
volta



Anmeldungsdatum: 04.05.2005
Beiträge: 1876
Wohnort: D59192

BeitragVerfasst am: 15.05.2009, 15:45    Titel: Antworten mit Zitat

Zitat:
Im Timer sitzt ein 16 Bit Teiler, der mit 1,193 MHz getaktet wird. Mit dem Low- und Highbyte kann man das Teilerverhältnis aber einstellen.


1193000Hz / 5000Hz = 238,6 ~239
Probe:
1193000Hz / 239 = 4991Hz

Code:
OUT 67, 52    'Timer-Steuerregister: Timer 0, Low- und Highbyte, Modus 2
OUT 64, 239   'Lowbyte
OUT 64, 0     'Highbyte

d.h. aber auch, dass zwischen zwei Abfragen des TIMERs nur 0,0002 Sekunden (200µs) vergehen dürfen!
_________________
Warnung an Choleriker:
Dieser Beitrag kann Spuren von Ironie & Sarkasmus enthalten.
Zu Risiken & Nebenwirkungen fragen Sie Ihren Therapeuten oder Psychiater.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Skilltronic



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

BeitragVerfasst am: 15.05.2009, 20:46    Titel: Antworten mit Zitat

Oh, Volta hat natürlich recht. Da hatte ich mich bei meinem 5kHz-Beispiel wohl etwas verrechnet...

Gruß
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
Gehe zu Seite Zurück  1, 2
Seite 2 von 2

 
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