Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
Info Coronavirus/Vaccinare vs Fake News

schimbarte nume familie copil

Problema mașina de spalat ve...

Problema mașina de spalat ve...
 Ajutor incepator

Problema mașina de spalat ve...

Preturile https://www.colins.ro/ ...

LP - One Last Time
 1 Decembrie 2022 - topic pentru d...

Sfat achizitie sistem audio amfit...

De la ce vine "de la"?

Digi mobil mort in casa
 Prețul sau prețurile?

Anulare contract vanzare cumparar...

scoala postliceala sanitara si hi...

Copiere 2 sau mai multe valori cu...
 

Port paralel,intrari

- - - - -
  • Please log in to reply
22 replies to this topic

#1
catalin_gym

catalin_gym

    New Member

  • Grup: Members
  • Posts: 13
  • Înscris: 27.01.2008
Salutare.Am vazut ca s-a discutat despre portul paralele cum sa activezi sau dezactivezi tensiunea pe pinul x.Eu am o alta nelamurire.Vreau ca programul meu in momentul in care detecteaza tensiune pe pinul x sa imi afiseze un mesaj.Imi poate explica cineva cum pot rezolva "problema"?

Stima!

#2
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007
Se poate foarte simplu! citesti portul paralel la intervale regulate (prin intermediul unui timer sa zicem) iar cu valoarea obtinuta faci ce vrei ,in functie de cerintele programului.Presupun ca cunosti detaliile portului paralel ,uite un exemplu concret in VB6 (utilizeaza libraria inpout32.dll de la http://logix4u.net)
Attached File  Lpt.zip   22.38K   316 downloads

Daca ai nelamuriri spune poate te pot ajuta.

#3
catalin_gym

catalin_gym

    New Member

  • Grup: Members
  • Posts: 13
  • Înscris: 27.01.2008
Multumesc mult pentru program,am cateva intrebari:
-Care sunt pinii la care pot aplica tensiune,
-Ce controleaza H278,H378,3BCH

H378 stiu ca se ocupa cu pinii 2-9 dupa care se poate culege tensiune

Edited by catalin_gym, 28 January 2008 - 20:01.


#4
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007
Mda... am presupus gresit.Sa incercam sa facem putina lumina.
Termenul de port paralel este putin gresit inteles, un port este de fapt o adresa din spatiu I/O al procesorului
pe care il poate citi sau scrie ca orice locatie de memorie de alftel, numai ca pentru porturi I/O se folosesc instructiuni separate (in si out),unde adresa portului se specifica pe 16 Bit (deci 2^16=65536 porturi).
El este de fapt o interfata folosita pentru a conecta imprimantele  (LPT=Line Print Terminal) elaborata ca standard inca de la inceputul PC-ului.Un computer poate avea 1 pana la 3 astfel de interfete paralele,iar fiecare interfata (daca este prezenta fizic) are alocata o adresa unica care de altfel este si standardizata:
LPT1=378h (888)
LPT2=278h (632)
LPT3=3BCh (956)
Adresele sunt date in hexazecimal iar in paranteza in zecimal.
Actual placile de baza au o singura astfel de interfata si de obicei este setata (din Bios) ca LPT1.

Deci H278,H378,3BCH nu controleaza nimic, ele nu sunt altceva decat adresele standard alocate interfetelor paralele pentru PC.
Buun.. mai departe.La fiecare adresa de baza se gasesc 3 registre de 8 biti cu functii prestabilite astfel:
LPT
sa zicem ca folosim portul LPT1 (doar pe asta il avem nu?);

Baza+0=378h Registru de date ,poate fi configurat atat ca intrare cat si ca iesire si este responsabil cu pinii 2-9 astfel:
2=D0 (bit 0)
3=D1 (bit 1)
4=D2 (bit2)
5=D3 (bit 3)
6=D4 (bit 4)
7=D5 (bit 5)
8=D6 (bit 6)
9=D7 (bit 7)

Baza+1=379h Registru status ,acest registru este doar pentru citire (read-only) si este responsabil cu pinii  10,11,12,13,15 astfel:

10=ACK    (bit 6)
11=BUSY  (bit 7);inversat hardware
12=PE      (bit 5)
13=SEL    (bit 4)
15=ERROR (bit 3)
Dupa cum se vede numai 5 biti (3-7) bitii 0,1,2 sunt rezervati.Practic aici poti tu sa aplici "tensiune" adica modifici starea unuia din pinii 10,11,12,13,15 si citesti Base+1 adica 379h.Atentie insa  am scris tensiune in ghilimele  si nu degeaba;  pinii  intrfetei paralele sunt la nivel TTL adica 0-5V iar pinii de intrare au rezistente de pull-up spre +5V asa ca nu este nevoie sa aplici tensiune pentru ca sunt deja polarizati intern practic sunt in stare 1 logic,iar daca vrei sa schimbi starea il pui la masa si astfel trece in 0.cel mai comod se face cu un optocuplor care si izoleaza astfel portul (destul de sensibil).

Base+2=37Ah registrul de control ,acest registru este numai pentru scriere si este responsabil cu pinii 1,14,16,17 astfel:

1=STROBE          (Bit 0);inversat hardware
14=Linefeed        (Bit 1);inversat hardware
16=INITIALIZE     (Bit 2)
17=Select Printer (Bit 3);inversat hardware

Deci 4 biti care se pot folosi ca iesire (0-3) bitii 4-7 sunt rezervati cu o mentiune:bitul 5 din acest registru este responsabil cu directia de comunicare a registrului de date (base+0) ;daca acest bit este pe 0 atunci pinii registrului de date (base+0) sunt folositi ca iesiri, iar daca este pe 1 atunci acestia se vor folosi ca intrari pentru porturile bidirectionale.Practic din bios se configureaza SPP (standard,unidirectional) sau ECP,EPP sau ECP+EPP (pinii de date pot deveni bidirectionali).In momentul in care portul paralel este configurat ca bidirectional atunci la adresa Base+402h mai apre un registru special de configurare numit ECR (Extended Control Register) din care se poate configura tipul de port prin bitii 7-5 adica 8 valori posibile printre care si modul unidirectional sau bidirectional asa ca in mod normal ca sa activezi pinii registrului de date (base+0) ca intrari nu este suficient ca bitul 5 din registrul de control (base+2) sa fie pe 1! ; trebuie configurat si tipul de port prin acest registru.

Buun... cam asta e pe scurt cu portul paralel. Sper ca ai inteles... :huh:
Deci daca te uiti pe sursa programului ai sa vezi ca in acel modul general sunt 2 functii de citire (Rbit) si scriere (Wbit) la nivel de bit,daca vrei sa urmaresti starea unui pin de intrare (base+1) poti folosi pinii 10,11,12,13,15.Sa zicem ca dorim sa citim starea pinului 10;acesta este bitul 6 din registrul  base+1:
Base=&h378
If Rbit(Base+1,6)=1 Then
'//Aici faci ce vrei daca pinul este pe 1 logic
else
'//Aici faci ce vrei daca pinul este pe 0 logic
endif
Si astfel poti apela aceasta rutina in evenimentul unui timer setat sa zicem la 20ms si gata!

Cred ca ai inteles...

#5
catalin_gym

catalin_gym

    New Member

  • Grup: Members
  • Posts: 13
  • Înscris: 27.01.2008
Multumesc mult macaz.Ai explicat f bine.Deci...sa inteleg ca eu nu pot aplica o tensiune nici macar de 2V pe pinii 10,11,12,13,15 ?
Imi trebuie sa stiu daca pot aplica o tensiune deoarece vreau sa fac un program de diagnoza.In sensul ca in momentul in care se va aprinde martorul x de bord va intra tensiunea x (pe care o voi regla eu in functie de tensiunea admisa de port) in pin iar programul va afisa un mesaj de eroare. Sper ca am reusti sa ma fac cat decat inteles in privinta programului.

Inca o data mii de multumiri pentru explicatie

#6
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007
Pai daca pinii aia sunt deja polarizati la 5V? ei sunt deja pe 1 logic! Tu trebuie ca in momentul in care apare 12V , sa treci pinul la masa adica folosesti un inversor adica asa
Attached File  opto.GIF   3.07K   216 downloads

Poti folosi si un tranzistor in loc de optocuplor;colectorul la pinul 10 (sau care vrei tu de intrare) emitorul la pinii 18-25 (masa) iar in baza printr-un divizor rezistiv  aduci  tensiunea  de +12V  iar  masa la masa generala ,dar repet atunci numai ai izolare galvanica si poti praji portul in cazul unor supratensiuni.

Oricum succes cu programul de diagnoza.

#7
catalin_gym

catalin_gym

    New Member

  • Grup: Members
  • Posts: 13
  • Înscris: 27.01.2008
Multumesc mult,am inteles.Momentan proiectul este doar pe hartie,dar am inceput sa strang informatii.Softul va fi gata curand dar partea electronica nu am timp sa o fac acuma,am sa ma ocup de ea dupa bac.Oricum iti multmesc mult de ajutor si pentru rapadare.

Am sa te tin la curent cu proiectu

Numai bine

#8
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007
Ok bafta si tie!.

#9
boda_best

boda_best

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 01.01.2007
Oare o sa mai raspunda careva aici :-??. Oricum eu scriu :D . Daca o sa cumpar un adaptor LPT pe USB atunci mai pot controla LPT-ul pe USB prin acest program in visual basic....are alta adresa banuiesc ....ar trebui sa i-o aloce ma gandesc... spunetimi pls daca se poate .

#10
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007

View Postboda_best, on Mar 10 2009, 22:41, said:

Oare o sa mai raspunda careva aici :-??.

De obicei da, dar trebuie sa ai rabdare...

Referitor strict la intrebarea ta raspunsul este NU, nu poti controla cu acel program un port paralel emulat prin usb.

De ce nu se poate? citeste aici: http://forum.softped...howtopic=115308

#11
boda_best

boda_best

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 01.01.2007

View Postmacaz, on Mar 11 2009, 09:17, said:

De obicei da, dar trebuie sa ai rabdare...

Referitor strict la intrebarea ta raspunsul este NU, nu poti controla cu acel program un port paralel emulat prin usb.

De ce nu se poate? citeste aici: http://forum.softped...howtopic=115308

Pai am citit acolo si inante insa nu e nimic concret...unii zic ca se poate ... altii nu...altii ca e din drivere...hmm....
Eu zic ca depinde de driver nu?
Adica daca ii pun un driver de emulator de port lpt...atunci ar aparea ca un port lpt virtual in device manager nu?
Si daca ar aparea asa atunci parerea mea este ca ar avea o adresa....adica i se va aloca una, nu?

#12
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007
Nu merge asa cum vrei tu. Acelui adaptor nu i se aloca nici o adresa de port pentru simplul motiv ca device-ul respectiv nu exista fizic pe vreo magistrala interna legata la CPU (ISA/PCI).

Gandeste-te la o adresa de port ca la o locatie de memorie pe care procesorul o poate accesa direct (scriere sau citire), diferenta fiind ca la un un port i/o procesorul activeaza o linie de control prin care procesorul informeaza circuitele de magistrala ca vrea sa lucreze cu o locatie din spatiul i/o si nu cu una din spatiul de memorie.
Este sarcina circuitelor decodificatoare sa interpreteze comenzile date de procesor si sa dirijeze aceste apeluri spre memoria locala sau spre circuitele i/o.
Toate aceste circuite de decodificare de care am vorbit mai sus fac parte (in prezent) din chipsetul placii de baza.

In alta ordine de idei portul paralel ,portul serial, tastatura precum si alte dispozitive sunt dispozitive prezente in PC inca de la inceputul lui; insa atunci toate aceste dispozitive erau legate la procesor printr-o magistrala unica ISA.
Pentru a pastra totusi aceste dispozitive (denumite si legacy devices) in sistemele moderne cu magistrale rapide de tip PCI, aceste dispozitive sunt plasate pe o magistrala locala care mimeaza vechea magistrala ISA , iar accesul la aceste dispozitive dinspre procesor se face printr-un bridge (punte) special intre magistrala rapida PCI si aceasta magistrala lenta ISA denumita PCI to ISA Bridge.
Toate aceste lucruri se intampla transparent pentru procesor; o simpla instructiune de scriere sau citire a unui port i/o este redirectionat automat de circuitele descrise mai sus.

Pe de alta parte USB este o magistrala externa pe care se pot plasa diverse dispozitive impartite in categorii dupa felul lor. Acestor dispozitive nu li se pot aloca resurse (adrese de port, de memorie sau intreruperi ) pentru simplul motiv ca dpdv al procesorului acestea nu sunt vizibile pentru el sub nici o forma. Comunicatia cu un dispozitiv USB se face prin intermediul unui controler USB care face parte din chipsetul placii de baza (bine lucrurile sunt mai complicate aici, documenteaza-te singur daca este nevoie).

Am facut aceasta scurta introducere pentru ca am observat ca confunzi unele lucruri (driver,  emulator lpt si alte bazdaganii).

In Visual Basic nu exista intructiuni dedicate pentru lucrul cu porturile i/o, in schimb au fost facute diverse biblioteci care exporta functii utile pentru manipularea porturilor i/o.
Sub sistemele de operare windows9x era posibil sa accesezi porturile de i/o direct din user mode; sub Windows NT (2000,XP etc.) acest lucru nu se mai poate direct ci prin intermediul unui mic programel cu drepturi depline asupra resurselor (memorie,porturi i/o si altele) ce ruleaza la acelasi nivel de privilegiu cu nuclelul (kernel) sistemului de operare.
Aceste mici piese software sunt denumite drivere si ruleaza in asa zisul kernel mode (la acelasi nivel de privilegiu cu nucleul sistemului de operare).
Scrierea acestor programele nu este o treaba simpla, orice eroare aparuta se poate solda cu rezultate imprevizibile, in cel mai fericit caz cu un ecran albastru.

Oricum am accesa aceste porturi, direct din user mode sau din kernel mode prin intermediul unui driver, tot la executarea unor instructiuni de tip IN sau OUT la nivel de procesor se ajunge. In cazul nostru daca interfata paralela este prezenta fizic in sistem, circuitele isi fac treaba si registrele interfetei paralele sunt citite sau scrise in conformitate cu cererile din program.

Spre informarea ta acel inpout.dll pe care il folosesti impreuna cu programul face identificarea sistemului de operare folosit si acceseaza dupa caz portul i/o direct (win9x) sau indirect prin intermediul unui driver (winNT); acest driver este instalat automat de catre aceasta biblioteca (driverul exista ca resursa binara in acel dll si este copiat si instalat ca hwinterface.sys).

Ai putea sa ma intrebi la ce bun un astfel de cablu convertor USB<->LPT daca nu se poate folosi in acest caz (si alte multe cazuri) ?

Ei bine aceasta interfata paralela a fost proiectata pentru a se lega la ele imprimante si nu sa conecteze lumea la ele diverse dracii (relee, programatoare uc si altele) dar datorita faptului ca se poate folosi foarte usor si este si accesibila, se foloseste foarte mult in aceste scopuri.
Acest cablu este construit pentru a putea lega o astfel de imprimanta  la calculatoare care nu sunt dotate cu aceasta interfata paralela. Dupa stiinta mea la conectarea unui astfel de cablu la calculator acesta nu este enumerat in categoria ports ci undeva pe la usb ca "USB printing suport".
Marea majoritate a acestor cabluri adaptoare sunt construite in jurul unui circuit PL-2305 dar pot exista si variatii pe aceasta tema (de ex. chipul FT245 de la FTDI).
Accesul la nivel de bit al unei astfel de interfete paralele pe USB necesita:
-cunoasterea circuitului adaptor
-suport din partea producatorului (drivere de acces, SDK, documentatie aferenta)

Accesul la un astfel de port este mult mai greu de realizat (chiar si cu documentatia completa) decat a unui port paralel clasic (doar doua instructiuni: In si Out).

Oricum recomandarea mea este sa nu achizitionezi un astfel de cablu ca nu ai ce face cu el.
Daca chiar vrei sa folosesti un astfel de cablu esti pe cont propriu, adica identificat circuite, gasire documentatie, scriere sau procurare de drivere pentru acces la nivel de bit etc.

Daca ai un slot PCI liber poti folosi o placa PCI->LPT. Totusi am impresia ca aceste placi au adrese de port diferite de cele standard, lucru minor care se poate corecta in program.
Daca folosesti un laptop atunci solutia ar fi o placa adaptoare PCMCIA cu port LPT care este cam aceeasi treaba cu una pe PCI.

Oricum intrebarea fiind pusa aici am raspuns tot aici cu toate ca nu prea are legatura intrebarea ta (si nici raspunsul meu :D ) cu visual basic ci mai degraba cu electronica/hardware/programare generala.

Succes!

#13
boda_best

boda_best

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 01.01.2007
Bine...dar am mai vazut pe internet...cu anumite drivere ca se putea sa nu il vada ca usb printing support ci ca LPT3....deci nu e adevarata asta??

#14
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007
Posibil... nu zic nu, dar scrierea sau citirea  unui port din spatiul i/o al procesorului nu te duce pe USB. Nu ai cum.
Ar trebui ceva destept sa intercepteze apelurile i/o si sa comande circuitul convertor din acel cablu dar ma indoiesc ca exista asa ceva, posibil, eu unul nu am auzit de asa ceva.

#15
boda_best

boda_best

    Junior Member

  • Grup: Members
  • Posts: 137
  • Înscris: 01.01.2007

View Postmacaz, on Mar 12 2009, 20:48, said:

Posibil... nu zic nu, dar scrierea sau citirea  unui port din spatiul i/o al procesorului nu te duce pe USB. Nu ai cum.
Ar trebui ceva destept sa intercepteze apelurile i/o si sa comande circuitul convertor din acel cablu dar ma indoiesc ca exista asa ceva, posibil, eu unul nu am auzit de asa ceva.
Deci...ca sa inteleg ...dll-ul ala pt program inpout32.dll ala nu se foloseste de driverul care l-a instalat windowsu.....ci el actioneaza ca un driver si el singur trimite informatia catre portul paralel chiar daca ar fi de exemplu dezinstalat din device manager?

#16
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007
Exact! te-ai prins cum sta treaba, acest dll se foloseste si el de un driver (hwinterface.sys) pentru accesul low level la porturile i/o. Il gasesti in device manager la categoria "Non-Plug and Play Drivers" sub numele de "hwinterface". Pentru a vedea aceasta categorie de drivere selectezi "show hidden devices" din meniul View.

#17
Alice

Alice

    Big Boobs

  • Grup: Senior Members
  • Posts: 6,805
  • Înscris: 05.12.2002
Care este diferenta intre un port serial si unul paralel? De ce cele seriale merg fara probleme prin usb, EXACT ca unul autentic in cazul FTDI, si cele paralele nu ar face-o?

#18
macaz

macaz

    Junior Member

  • Grup: Members
  • Posts: 108
  • Înscris: 14.06.2007

View PostAlice, on Mar 13 2009, 00:28, said:

Care este diferenta intre un port serial si unul paralel? De ce cele seriale merg fara probleme prin usb, EXACT ca unul autentic in cazul FTDI, si cele paralele nu ar face-o?

Si totusi... este aria de programare Visual Basic. Am raspuns la intrebarile lui @boda_best pentru ca erau oarecum legate de folosirea unui program vb6 pentru accesul unui port paralel.

Daca ai pus intrebarea cu scopul de a te informa, as putea sa insir o polologhie de doua pagini cu caracter foarte tehnic care nu isi are locul aici; daca intrebarea este pusa cu scopul de a ma testa pe mine, las-o balta.

Un raspuns scurt: dpdv al scopului pentru care au fost proiectate cele doua interfete, ele merg foarte bine atat in implementarea clasica cat si in varianta pe USB.
Ca utilizatorii au exploatat particularitatile portului paralel clasic in scopuri nestandard asta este alta treaba.
Dpdv al programarii acestor interfete, porturile seriale sunt foarte bine integrate in sistemul de operare, accesul la un port serial se face utilizand exclusiv functii API puse la dispozitie de so.
Cu portul paralel este tocmai invers, majoritatea celor care utilizeaza acest port utilizeaza drivere/functii de acces i/o particulare care devin nefolositoare cand se schimba hardware-ul.

Anunturi

Bun venit pe Forumul Softpedia!

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate