Parallelle poort interface met Visual basic Waarom dit naslagwerk: Ik was zelf een beginner op dit vlak en heb dagen lopen zoeken naar correcte en up to date info inzake de aansturing van pc naar elektronica en terug. Zelf had ik hiermee 2 intenties, het aansturen van mijn eigen homemade CNC freesmachine en het programmeren van een Pc gestuurde Led cube. In deze “mannual” zal ik het voorbeeld van de Led cube gebruiken maar de principes zijn op alles toepasbaar.
Parallelle poort: ook wel printerpoort genoemd; De parallelle poort was origineel bedoeld voor printers, dit met 8 bits tegelijkertijd. Tevens zijn er nog 4 controle bits waardoor we totaal van 12bits kunnen sturen en heeft 8 status bits die we kunnen inlezen.
De Printerpoort is een vrij fragiele poort en dus is voorzichtigheid aangewezen.
Indien je denkt met de poort aan de slag te gaan raad ik aan eerst even alles door te nemen, mijn volgorde hier is de volgorde om het te begrijpen , niet hoe het uit te voeren. Om het te echt te leren kan je best alles een beetje tezamen doen, proberen een programma te starten of het voorbeeld gebruiken, eens testen met wat lampjes of het begin van je project. Eerst zullen we ingaan op de hardware, de mogelijkheden naar sturingen voor led’s, motoren en schakelaars. Vervolgens de Software kant, hoe je in Visual basic je software opbouwt en gebruikt.
Deel 1, hardware: Uitsturen: Voor het uitsturen of aansturen van signalen zijn volgende hoofdverdelingen te maken: Signalisatie, vermogen en extra’s - Signalisatie lampjes ( Led’s)
Hier het voorbeeld om een soort van overzichtskaartje te maken, hier zijn de 8 data poorten voorzien van een led en een weerstand. De weerstand dient om de stroom die de poort moet leveren te beperken. Aangeraden is een weerstand van een 470Ω te gebruiken, dit geeft geen volledige oplichting van de led maar meer stroom is nimmer veilig voor de poort.
- vermogensturing ( aansturen van grotere vermogens (+20mA) of externe voedingen)
Bij de meeste aansturingen wens je echter eerder een vermogen te schakelen, of een externe voeding toe te passen op uw belasting. Zodoende volgende schakeling; Gebruikt is een NPN transistor voorzien van een 4700Ω basis weerstand. De transistor schakelt de stroom van de externe voeding, deze zijn spanning is vrijwel vrij te kiezen ( opgepast voor de BC 547 is dit een
30V en vooral een stroom limiet van 100mA). Om grotere vermogens te schakelen kan je best een darlington schakeling gebruiken om een grotere transistor aan te sturen
-Als extra schakelwijze en extra afscherming kan je ook optocouplers plaatsen.
Deel 2, software Om van start te gaan raad ik aan eerst volgend programmatje te gebruiken: Parmon (http://www.geekhideout.com/parmon.shtml) Dit geeft een simpel overzicht van de poort en de stand van de in en uitgangen. Dit is tevens ook handig om tijdens het testen tevens zicht te hebben op wat de software denkt uit te sturen op de poort.
Visual basic: Er zijn meerdere links online en ze gebruiken allen andere basis dll’s om op te werken. Echter zijn vele verwijderd of werken nimmer onder xp service pack 3. Wel werkend en degene die ik aanraad vind je hier: http://www.codeproject.com/KB/vb/Inpout32_read.aspx OF hier link naar mijn voorbeeld programma’tje in visual basic 2010 met de .dll die je in de directory C:\WINDOWS\system32 dient te plaatsen. Al heb ik zelf hieronder ook een beknopte inleiding geplaatst tezamen met een voorbeeld code en software.
Comment [J1]: Link invoegen van d locatie op het forum
Om te starten moet je bovenaan je programma volgende code definiëren om te kunne werken: Geheel bovenaan dus nog boven “public class form” welke er automatisch al staat bij het Option Strict Off Option Explicit On Module InpOut32_Declarations Public Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Short) As Short Public Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Short, ByVal Value As Short) End Module
beginnen te werken
Value1 = Inp(&H378S) Out(&H378S, &HFFS) Value1 = Inp(&H378S)
'Now Value1 has the values in 'data port'En onder de event handler 'Print 'FF' naar poorten D7-D0 = het getal 255 in Decimaal lees en plaats de waarde van poorten D7-D0 in de variabele Value 1
van uw knop, tekstvak of waar de actie na moet gebeuren plaatst je volgende code: Hierin staat de &H378S voor poort die wordt aangestuurd of uitgelezen:, De rode letters dienen te worden aangepast om andere poorten uit te sturen. [Data Poort] Adres: &H378S [Status Poort] Adres: &H379S [Controle Poort] Adres: &H37AS
Het getal na de comma dus: &HFFS staat voor de waarde die naar de poort moet worden verzonden, gaande van 0 tot ff ( hexadecimale getallen ) Bij het inlezen plaats je de waarde in een variabele die je eerst definieerd als string: Dim Value1 As String 'String named Value1 Value1 = Inp(&H378S) 'Now Value1 has the value in 'data port' MessageBox.Show(Value1) 'A popup will indicate the current value written Voorbeeldje van hoe je het programma een kadertje kunt laten tonen met daarin de uitgelezen waarde.
Hexadecimaal tellen: hierbij een tabbel om te zoeken of gebruik de calculator op uw pc deze heeft ook een converter die handig is. decimaal
hex dec
binair
0 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
00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20
00000000 00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000 00001001 00001010 00001011 00001100 00001101 00001110 00001111 00010000 00010001 00010010 00010011 00010100 00010101 00010110 00010111 00011000 00011001 00011010 00011011 00011100 00011101 00011110 00011111 00100000
Om alles uit te sturen als gewenst zal je wat rekenwerk moeten inprogrammeren, om een voorbeeld te geven liet ik mijn software 8bits inlezen, waarna ik de eerste bit x 1 doe, optel met bit 2 x 2, bit 3 x 4, bit 4 x 8 enzo verder, alles opgeteld geeft dit het hex getal dat dient uitgestuurd te worden.
Hier ook een links naar een voorbeeldje dat je kan testen en zelf op kan verderbouwen.
Bronnen: http://www.epanorama.net/circuits/parallel_output.html http://logix4u.net/Legacy_Ports/Parallel_Port/A_tutorial_on_Parallel_port_Interfacing.html http://www.codeproject.com/KB/vb/Inpout32_read.aspx
Comment [J2]: Zelfde link naar de d en het voorbeeldprogramma