Toon posts:

[VB] comport & io kaart met atmel

Pagina: 1
Acties:

Verwijderd

Topicstarter
Een aantal dagen ben ik hier mee aan het rotzooien, ooit es gemaakt op school.

Onder pascal had ik nog een test programma om het io-boxje te testen.

Nu wou ik in visual basic een programma maken die deze io-box kon aansturen.
Het probleem is dat ik in het begin geen reactie had. Na sooj opgezocht te hebben kwam ik dr achter dat je onder NT niet direct de comport kon aan spreke. zo doende andere pc gepakt en win98 drop gezet.

Het programma waar mee de io-box wel werkte is: (onder win2k & 98)
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
Program IOBOX;
uses Dos{,crt};
var A:Byte; D:Byte;

Begin
Port[$2F9]:=$00;
Port[$2FB]:=$83;
Port[$2F9]:=$00;
Port[$2F8]:=$0C;
Port[$2FB]:=$03;
Repeat
Write('adres: ');
readln(A);
write('data out: ');
readln(D);
Port[$2F8]:=A;
{Delay(1);}
Port[$2F8]:=D;
{Delay(1);}
D:=port[$2F8];
writeln('data in:',D);
writeln;
writeln;
Until(A=0);
end.


zoals je ziet moet je eerst een adres opgeven. dit is er voor omdat je de iobox kan uitbreiden met meerdere kaarten zodat je 255 kaarten kunt aansturen met 8 in / 8 out gevallen
de data out zorgt ervoor dat er 1 of meerdere relays worden geschakeld.

de code die ik zelf geprobeerd heb in VB:

code:
1
mscomm1.output = "1" & "123"

code:
1
2
mscomm1.output = "1" & vbcrlf 
mscomm1.output = "123" & vbcrlf

code:
1
mscomm1.output = "1" & vbcrlf & "123" & vbcrlf


het rare is, dit probeerde ik voor de mats:
mscomm1.output = chr$(1)

hij reageerde wel, relay 1 3 en 4 schakelde

ik kom dus niet erg verder :)

[ Voor 8% gewijzigd door Verwijderd op 28-01-2004 19:57 ]


  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Hij verwacht binaire data, dus 0x00 0xFF betekent poort 0 alles aan ( of uit, that depends :) )

Bovendien moet je ff lette op de timing, want d'r staat een sleep in je originele code. Het kan zijn dattie wat rust nodig heeft af en toe.

( Check ook ff je poortinstellingen, zo te zien is de baudrate 9600 aan je divisor te zien, met 8 databits, 1 stopbit en geen parity )

[ Voor 18% gewijzigd door farlane op 29-01-2004 00:54 ]

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Verwijderd

Topicstarter
heh grappig, maar dat werkt niet ;p

wat wel werkt is;

code:
1
mscomm1.output = chr(1) & chr(1) & chr(13) & chr(10)

zo gaat relay 1 aan.
ken dit niet op een andere manier ? :)

Verwijderd

Topicstarter
hm,

de io kaart beschikt ook over porten die je kunt inlezen. Wanneer je er spanning opzet gaat er een led constant branden tot je de spanning verbreekt.
Wanneer er spanning opstaat wordt er om de 2 seconden een 1 gestuurd. na 2 seconden weer een 0 beetje $@$#%#$ dus.

nu zitten er 8 op

port 1 = 1
port 2 = 2
port 3 = 4
etc

hoe kan ik deze nu goed inlezen?
wat ik geprobeerd heb is ;

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
bij form adden:
mscomm1.sthreshold = 1

en bij:
private sub mscomm1_oncomm()
dim sdata as string
sdata = mscomm1.input

if mscomm1.commevent = comevreceive then
sdata = mscomm1.input
msgbox sdata
end if

end sub


Wanneer ik comeevreceive vervang door comevsend en ik stuur een relay aan werkt dit wel

Wanneer ik dus een ingangs port use en die wil uitlezen gebeurd er niks.

Ook moet ik voor dat ik uitlees het adres eerst juist zetten in dit geval chr(1). maar wanneer ik dit adres mee geef in een timer wordt deze elke keer gezet zodat relay1 aangeschakeld wordt :( :P

Wanneer er meerdere ingangen worden gebruikt wordt de waarde die ik krijg
port1+port2+port3 = uitkomst dus 1 + 2 + 4 = 7


hoe kan ik dit zo oplossen dat ik geen timer gebruik, maar wanneer er *momenteel krijg ik een id* een spanning opkomt er automatisch een var wordt gelezen

f id proberen :+

[id]
ik was dus vergeten om bij mscomm1_oncomm()
daar te zeggen dat mscomm1.output = chr(1) te doen
dan werkt het wel.
maar nu gaat relay 1 altijd aan... :/
k vat trouwens ook niet dat je zo moet aangeven dat je address 1 moet gebruiken :/

is er niet ene mogelijkheid om mscomm1.output = clearsooj
te doen ?
mgoed
wanneer ik iobox zou gaan uitbreiden zou ik in de problemen komen wanneer ik een ander adres moet aanspreken :/

[ Voor 15% gewijzigd door Verwijderd op 29-01-2004 17:37 ]


Verwijderd

Topicstarter
*bump* 8)7

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22-05 16:53
Ik kan uit je code alleen halen hoe je een uitgang zet. Als antwoord daarop krijg je een uitgangsstatus.
Het is dus niet bekend of er ook een 'lees ingangen' commando betstaat, en hoe die eruit ziet.

De waarden ( zoals ik al eerder aaangaf ) zijn binaire maskers, als je niet weet hoe dat werkt zou ik ff wat documentatie daarover doorlezen.

Verder kin je misschien wat beter je best doen om een duidelijke post in elkaar te zetten, dit lijkt helemaal nergens op.

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.

Pagina: 1