Ik ben bezig een java programmatje te schrijven voor het gebruiken van de paralelle poort voor elektro doeleinden.
1 ding dat ik wilde doen, was een instelbaar pulsbreedte signaal op een pin van de poort te zetten. Ik heb dit programma eerst "normaal" gemaakt, maar toen vrat het programma al mn cpu tijd op. Ik hoorde van een vriend dat ik het dan met thgreads moest gaan proberen (ik studeer zelf electro en weet met een half jaartje java dus niet zo gek veel van de taal).
Ik heb nu het programma gemaakt met threads, maar ik kan de timing maar niet kloppend krijgen.
Het sleep commando dat ik gebruik kan volgens de api in mS en nS ingesteld worden.
Nu is het zo dat als ik de thread 1 mS geef, deze 2mS gebruikt. Bij 2 mS en hoger klopt alles wel gewoon.
De nano seconden werken al helemaal vreemd. Vanaf 500000 (1/2 mS) wordt als 1mS geteld en daaronder als niets.
Ik kan mn thread dus niet korter dan 2mS laten slapen terwijl ik dat wel nodig heb en het lijkt me ook dat het moet kunnen.
Ik hoop dat iemand me kan vertellen wat ik verkeerd doe.
Dit programma zou in princiepe een pulssignaal van 1mS laag en 1mS hoog moeten geven, het is dus 2mS laag en 2mS hoog
1 ding dat ik wilde doen, was een instelbaar pulsbreedte signaal op een pin van de poort te zetten. Ik heb dit programma eerst "normaal" gemaakt, maar toen vrat het programma al mn cpu tijd op. Ik hoorde van een vriend dat ik het dan met thgreads moest gaan proberen (ik studeer zelf electro en weet met een half jaartje java dus niet zo gek veel van de taal).
Ik heb nu het programma gemaakt met threads, maar ik kan de timing maar niet kloppend krijgen.
Het sleep commando dat ik gebruik kan volgens de api in mS en nS ingesteld worden.
Nu is het zo dat als ik de thread 1 mS geef, deze 2mS gebruikt. Bij 2 mS en hoger klopt alles wel gewoon.
De nano seconden werken al helemaal vreemd. Vanaf 500000 (1/2 mS) wordt als 1mS geteld en daaronder als niets.
Ik kan mn thread dus niet korter dan 2mS laten slapen terwijl ik dat wel nodig heb en het lijkt me ook dat het moet kunnen.
Ik hoop dat iemand me kan vertellen wat ik verkeerd doe.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
| import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.io.*;
import hva.PortIO;
class MainDelay
{
public static void main (String [] arg)
{
Writer w1 = new Writer(1,0,1);
w1.activity.start();
Delay.delay(10000,0);
w1.activity.interrupt();
PortIO.outPort(0x378,0);
}
}
class Writer implements Runnable
{
public Thread activity = new Thread(this);
private String text;
int a;
int b;
int c;
int d;
int interval2;
private long interval;
public Writer(long time, int time2, int a)
{
interval = time;
interval2 = time2;
this.a = a;
}
public void run()
{
while(Delay.delay(interval,interval2))
{
if(a <= 1)
{
PortIO.outPort(0x378,1);
a++;
}
else
{
PortIO.outPort(0x378,0);
a--;
}
}
}
}
class Delay extends Thread
{
public static boolean delay(long millis, int nanos)
{
if(interrupted())
return false;
try
{
sleep(millis, nanos);
}
catch(InterruptedException e)
{
return false;
}
catch(IllegalArgumentException iae)
{
}
return true;
}
} |
Dit programma zou in princiepe een pulssignaal van 1mS laag en 1mS hoog moeten geven, het is dus 2mS laag en 2mS hoog