Poorten hoog maken met programma

Status
Niet open voor verdere reacties.

geroda

Gebruiker
Lid geworden
30 aug 2004
Berichten
102
beste

ik ben namelijk bezig met een relais kast te maken die word aangestuurt door mijn pc via de parrallelle poort maar nu is de vraag.
hoe kan ik met een programma een signaal sturen door de poort op die pin bv 5.
met welke programma's kan ik dit doen en wat is de code daarvoor gelieve het simpel te houden van programma's
wie kan mij helpen

ps: het programma parport heb ik al geprobeerd maar ik zouw graag meer naar de domotica richting gaan bv:de pc instelle om om dat uur die pin hoog te maken

alvast bedankt
 
Als je het simpel wilt houden dan kun je deze vraag beter niet in de assembler sectie plaatsen :)

Je kunt de poort vanuit Visual Basic aansturen en er een aardig programma omheen maken, mits je kunt programmeren.

Als de computer echt een besturingscomputer moet worden met alleen de parallel poort, dan kun je het zelfs heel eenvoudig in QBasic (QuickBasic)

Om betreffende bits van de parallel poort in te schakelen gebruik je de instructie :

out 888, x

waarbij x de waarde is van de bits die je aan en uit wilt schakelen (0 = alle acht bits uit, 255 is alle 8 aan, 1, de eerste, 2 de tweede, 4 de derde, 8 de vierde etc...)


Uitgebreide info (wel engels) vind je hier voor eenvoudige Qbasic

http://www.aaroncake.net/electronics/qblpt.htm

en hier voor de wat ingewikkelder VBasic:

http://www.aaroncake.net/electronics/vblpt.htm


Btw even een vraagje, Hoe stuur je de relais aan ? heb je er een print voor gemaakt of rechtstreeks via een buffer ?
:)
 
heel simpel :D ik volg namelijk electronica en met een beetje denkwerk heb je snel iets in elkaar gestoken

aan de uitgang van je poort hang je een weerstand redelijk hoog dat je een niet te hoge stroom krijgt bv 4k7. D
ie aangesloten is op een transistor ,die transistor zet de relais in werking en zo kun je lekker schakele :D.

Als je dit ook eens wil uitteste vergeet de diode niet of je transistor is naar de haaie


alvast bedankt

ik kan dit niet direct uittesten dus gelieve geduld te hebben ik hou je op de hoogte

ik heb nog een vraag ik ben niet goed in programmeren tenzij van die simpele dinge maar kan ik zorgen dat ik bv de waarden optel
ik bedoel daarmee bv:
pin 1= lamp 1 ,pin 2 = lamp 2 enzo...

nu wil ik het simpel houden van commando's
dus als ik intik 2
dan brand lamp 2
als ik daarna 1 induw moet lamp 2 blijven branden en lamp 1 aanslaan
als ik daarna 2 induw moet lamp 2 uitgaan en lamp 1 blijven branden kan dit???

alvast bedankt
 
Dat kan

Je hebt 8 bits dus

0 0 0 0 0 0 0 0

Om een enkele lamp in te schakelen :

Lamp 1 = 00000001 = Out 888, 1
Lamp 2 = 00000010 = Out 888, 2
Lamp 3 = 00000100 = Out 888, 4
Lamp 4 = 00000001 = Out 888, 8
Lamp 5 = 00000010 = Out 888, 16
Lamp 6 = 00000100 = Out 888, 32
Lamp 7 = 00000001 = Out 888, 64
Lamp 8 = 00000010 = Out 888, 128


Bovenstaand voormeeld laat inderdaad andere lampen weer uitgaan.
Om dit op te lossen moet je eerst de huidige waarde van de poort inlezen met INP (888). Vervolgens kun je met de AND functie of de OR functie lampen bijvoegen of uitzetten.
Als je een beetje thuis bent in binair is het redelijk eenvoudig.

Stel je lampen 2 en 5 branden en je wilt lamp 6 ook aanzetten. Om lamp 6 in te schakelen moet je normaal de waarde 32 naar de poort sturen. Om nu te voorkomen dat de overige lampen uitgaan, gebruik je de OR functie.
Een OR maakt een bit 1 als een van de 2 bits in de vergelijking 1 zijn.
Nu het voorbeeld :
Code:
:lees de huidige waarde van de poort in:

Poortwaarde = INP(888)

:Nu voeg je dmv OR het bitje toe voor lamp 6:

Poortwaarde = Poortwaarde OR 32

:en schrijf deze weer terug:

OUT(888,Poortwaarde)

Om een lamp uit te schakelen gebruik je de AND functie

Een AND laat alleen dat bit op 1 als beide bits in de vergelijking 1 zijn.

Wat je dus maakt is een filter waarbij alle waarden 1 zijn behalkve die van de lamp die je wilt uitzetten

In bovenstaand voorbeeld branden nu 3 lampen. Dit komt overeen met de waarde

0 0 1 1 0 0 1 0

Als je nu bv lamp 2 wilt uitschakelen dan maak je een masker waarbij bit 2 op 0 staat. Dat geeft dan :

0 0 1 1 0 0 1 0
1 1 1 1 1 1 0 1 AND
-------------------
0 0 1 1 0 0 0 0 Resultaat

Je ziet dat lamp 2 nu uit is.

Hieronder even de code :

Code:
:lees de huidige waarde van de poort in:

Poortwaarde = INP(888)

:Nu dmv AND lamp 2 uitschakelen:

Poortwaarde = AND 253

:en schrijf deze weer terug:

OUT(888,Poortwaarde)

Ik hoop dat je hier iets mee kunt. (ik heb in bovenstaand voorbeeld trouwens Qbasic genomen. Klein en handig en werkt zelfs op 486 ;) )


Ik zal binnenkort zelf ook eens met dat spul gaan experimenteren. Alleen lijkt mij een optocoupler iets veiliger voor de comp omdat je dan helemaal ontkoppeld blijft van de relaiskant. En die dingen zijn vaak net zo goedkoop als een transistor. Ik ben nl huiverig dat als de transistor doorbrand en sluiting gaat maken, je je printerpoort opblaast :)
 
hm

dat werkt niet echt bij mij
kheb dus qbasic gedownload en kwil gewoon eens testen en ik type in out(888),(1)
en dan run klopt dit? als ik dan ga kijken op mijn poort word de relais niet geschakeld wat moet ik exact ingeven in qbasic om die poort te activeren en is dit een puls of een constand signaal dat hij doorzend naar de poort???

alvast bedankt

Tim
 
Welk OS

Het hangt helemaal van je OS af. De out instructies zijn okee voor windhoos 9x, maar doen het waarschijnlijk niet op NT. Voor NT heb je een driver nodig en een programmaatje wat de driver bestuurd. Voor unix werkt het weer anders. Ik heb zelf een keer een een linux programmaatje geschreven en een printplaatje gesoldeert om inderdaad mijn lamp mee aan en uit te zetten. Het werkt wel, maar ik raadt je vooral aan dit alleen te testen op een oude computer. Ik heb namenlijk al een keer bliksem uit de voeding laten komen (Had toen wel gekke dingen gedaan).

- Grinny -

UNIX is simple; it just takes a genius to understand its simplicity!!!
 
Zelfde project

Ik zie nu dat je bezig bent met ongeveer hetzelfde als ik mee bezig ben. Misschien kun je mij helpen met het project waar ik mee bezig ben.

Bekijk deze post even:
Post

Alvast bedankt,

Barbet
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan