Mensen,

Ik heb weer een vraag.

Ik heb zelf een DMX kaart voor in mijn PC gemaakt voor een ISA slot. Wonder boven wonder werkt deze perfect.

Echter op dit moment heb ik een programma geschreven onder QB71 onder dos. Dit omdat ik dan de timing perfect kan beheersen. Want ik moet iedere 25 a 30 ms kijken of de kaart klaar is met het versturen van de DMX string en als deze klaar is nieuwe data versturen naar de kaart.

Onder Windows is dit, zover ik weet en gemerkt heb, een probleem.
Je kan een ON TIMER functie gebruiken en dan b.v. iedere 30ms naar een sub-routine springen om nieuwe info op de kaart te zetten. Echter, omdat windows op de achtergrond nog van alles er bij doet kan het dus wel eens iets later worden.

Nu is mijn vraag: is het mogelijk om een IRQ af te vangen in VB. Ik denk dat ik de kaart vrij simpel kan modificeren om gebruik te maken van een IRQ, echter ik ben er nog niet achter hoe deze in de software af te vangen.
Het voordeel van IRQ gebruiken is, denk ik, dat ik de software niet meer om de zoveel tijd hoeft te laten kijken of de kaart klaar is, maar dat de kaart een signaal aan de software geeft als hij klaar is voor ontvangst van nieuwe data.

Ieder advies is welkom,

groetjes Antonie Vonk

Op 7 februari 2003 13:12:27 schreef Antonie Vonk:
Onder Windows is dit, zover ik weet en gemerkt heb, een probleem.
Je kan een ON TIMER functie gebruiken en dan b.v. iedere 30ms naar een sub-routine springen om nieuwe info op de kaart te zetten. Echter, omdat windows op de achtergrond nog van alles er bij doet kan het dus wel eens iets later worden.

Idd, vanwege multitasking is de timing niet zo secuur.

Nu is mijn vraag: is het mogelijk om een IRQ af te vangen in VB.

Het is mogelijk. Het werkt dan als een interrupt. Ik weet alleen niet hoe je dat in VB moet realiseren, ken alleen C++. Zoek eens op internet naar interface projecten. Daar zal ongetwijfeld een broncode zijn te vinden waarbij er gebruik van word gemaakt.

ik denk dat de snelheid van de pc zeer veel bepaling heeft in de timing onder VB.

Ik heb ook timers gebruikt voor mijn project via de lpt, maar op een pentium 1 100 MHz was het signaal, gewoon een pulserende spanning, volgens de scoop niet netjes.

daarin tegen een snelle Pentium 4 had hier totaal geen problemen mee, om de 2 ms kwam er op de scoop netjes een pulsje voorbij.

mijn advies: gebruik toch een redelijk snelle pc als je onder windows werkt. Een ander alternatief is linux gebruiken, alleen zit je dan wat moeilijker met de GUI die windows je geeft.

Op 7 februari 2003 18:19:21 schreef Jeroen Boere:
ik denk dat de snelheid van de pc zeer veel bepaling heeft in de timing onder VB.

Ik heb ook timers gebruikt voor mijn project via de lpt, maar op een pentium 1 100 MHz was het signaal, gewoon een pulserende spanning, volgens de scoop niet netjes.

daarin tegen een snelle Pentium 4 had hier totaal geen problemen mee, om de 2 ms kwam er op de scoop netjes een pulsje voorbij.

mijn advies: gebruik toch een redelijk snelle pc als je onder windows werkt. Een ander alternatief is linux gebruiken, alleen zit je dan wat moeilijker met de GUI die windows je geeft.

Ben ik het niet geheel mee eens. Of de pc nou snel of langzaam is, het blijft een multitasking systeem met prioriteiten. Als jij op een Pentium IV een programma hebt draaien dat een hoge prioriteit heeft en ook grote time-sharing blokken daardoor krijgt toebedeelt van het OS dan kan je mooi in de knel komen te zitten met je timing.

Eigenlijk moet je een ROS systeem hebben (Real Time Operating System). QNX is er eentje, alleen een groot nadeel. Je moet helemaal gaan uitpluizen hoe het werkt, oftwel -> geen fijn alternatief.

Gewoon op IRQ basis je programma aan laten sturen dan werkt het perfect.

Op 7 februari 2003 16:46:46 schreef Bastiaan:

...

Het is mogelijk. Het werkt dan als een interrupt. Ik weet alleen niet hoe je dat in VB moet realiseren, ken alleen C++.
...

Zou je eens kunnen meedelen hoe een irq opvangt in C++. Voor mijn thesis maak ik onder andere gebruik van LPT. Maar ik verlies teveel tijd met het pollen van de LPT.
Een irq zou hier handig zijn.

Op 7 februari 2003 16:46:46 schreef Bastiaan:

Het is mogelijk. Het werkt dan als een interrupt. Ik weet alleen niet hoe je dat in VB moet realiseren, ken alleen C++. Zoek eens op internet naar interface projecten. Daar zal ongetwijfeld een broncode zijn te vinden waarbij er gebruik van word gemaakt.

Bastiaan,

Weet jij of het mogelijk is om in C++ een dll te schrijven welke ik dan in VB kan aanroepen en dat deze dll dan de interrupt afvangt en een bepaalde array verstuurt naar de kaart en dat die array via VB te wijzigen is.

Ik heb dit weekend mij zelf het apenzuur gezocht naar een Interrupt handler voor VB of QB echter alles wordt in C++ of Visual C gedaan en daar snap ik geen .... van.
Ik heb zelf nog een leuk boekje over PC poorten en met hele leuke schematjes met diverse kaarten voor in de PC en daar zit 1 insteek kaart bij waar je IRQ's kan testen. Echter de software die daar bij staat is in Pascal en gebruikt Inline asambler. Dus hier was ik ook al snel de weg kwijt.

Misschien weet jij nog iets.

Antonie

[Bericht gewijzigd door Antonie Vonk op ]

Op 7 februari 2003 19:26:36 schreef pol:
[...]
Zou je eens kunnen meedelen hoe een irq opvangt in C++. Voor mijn thesis maak ik onder andere gebruik van LPT. Maar ik verlies teveel tijd met het pollen van de LPT.
Een irq zou hier handig zijn.

Ik weet niet hoe je met een irq werkt met c++. Ik poll ook.

Op 10 februari 2003 09:18:48 schreef Antonie Vonk:
[...]
Bastiaan,

Weet jij of het mogelijk is om in C++ een dll te schrijven welke ik dan in VB kan aanroepen en dat deze dll dan de interrupt afvangt en een bepaalde array verstuurt naar de kaart en dat die array via VB te wijzigen is.

Ik heb dit weekend mij zelf het apenzuur gezocht naar een Interrupt handler voor VB of QB echter alles wordt in C++ of Visual C gedaan en daar snap ik geen .... van.
Ik heb zelf nog een leuk boekje over PC poorten en met hele leuke schematjes met diverse kaarten voor in de PC en daar zit 1 insteek kaart bij waar je IRQ's kan testen. Echter de software die daar bij staat is in Pascal en gebruikt Inline asambler. Dus hier was ik ook al snel de weg kwijt.

Misschien weet jij nog iets.

Antonie

Nope, ik heb voor je gezocht maar kan niks vinden. Ook niet voor C++ om interrupt af te vangen die via de I/O poorten worden gegenereerd.

Op 7 februari 2003 19:26:36 schreef pol:
Zou je eens kunnen meedelen hoe een irq opvangt in C++. Voor mijn thesis maak ik onder andere gebruik van LPT. Maar ik verlies teveel tijd met het pollen van de LPT.
Een irq zou hier handig zijn.

Pol,

Helaas voor mij zelf heb ik nog steeds geen antwoord op mijn vraag of het onder VB of QB mogelijk is om interrupts aftevangen. Echter........

Ik kwam dit tegen.
http://www.beyondlogic.org/interrupts/interupt.htm

Volgens mij is dit wat jij zoekt.

Mijn vraag is aan jouw als jij constateer dat dit is wat jij zoek en succesvol heb geimplementeerd in jou software. Kan jij dan voor mij kijken of het mogelijk is een ISR (interrupt Service routine) in C te schrijven en daarna te kijken of die dan te implementeren is in software welke onder VB is geschreven.

In ieder geval zou ik graag van jouw horen of het bij jou onder C gaat werken.

m.vr.gr. Antonie Vonk

OK, kzal de eerstkomende dagen die informatie eens bestuderen.
Je hoort nog van mij.
THX voor de link.

Antoine,

Ik kan momenteel interrupts opvangen in C++ bv van interne clock tick.(Met borland C++ compiler).

Dit lukt aardig om een en ander te timen.

Voor mijn applicatie gebruikt ik VC6.0 wat in Visual Studio van Microsoft geïntegreerd is. Het probleem is dat deze programma's 32 bit zijn en dat IRQ's opvangen op deze manier niet meer mogelijk is.
Waarschijnlijk zal dit bij VB, wat ook in Visual Studio zit ook niet meer op deze manier mogelijk zijn.

Ik zoek nog wat verder om het probleem op te lossen.

Pol,

Daar kwam ik ook achter.

Ik heb het nu draaien onder Turbo Pascal en ben nog bezig onder QBasic echter dat gaat een stuk lastiger maar ik ben al een heel eind.

Op dit moment heb ik het zo gedaan dat de IRQ handling gebeurt door een resident programmatje wat ik in TP heb geschreven en de gegevens die hij nodig heeft zet ik d.m.v. POKE in QB in een array welke is aangemaakt vanuit TP.

Werkt echt toppie

Ik kan nu zelfs iedere willekeurige IRQ vanaf het ISA slot afvangen. Dit scheelt een hoop met tijd om te checken of mijn kaart klaar is.

Groetjes Antonie

Iets totaal anders, hoe de timing wel precies te maken (mischien?):

In delphi kan je threads creëren die je dan een "priority"-nummer kan geven, geef je het het hoogste prioritynummer dan zal het waarschijnlijk wel op tijd zijn, dacht ik zo? (vb hiervan is in Winamp, kan je dat ook instellen). Dit is waarschijnlijk ook mogelijk in C++ en mischien zelfs in VB. Natuurlijk kan ik niets garanderen, maar dat zou dichter moeten zitten bij "perfecte timing".