|
|
|
|
Hali!
Ilyen távolságokra, meg egyébként is ajánlatos optocsatolós leválasztással megoldani a kommunikációt. (Könnyen 'elszállhat' a port, sőt a PC egyébb áramkörei is) Igény szerint 4 bitet bemenetként is lehet használni, a 8 kimenet mellett. Egy kis ügyességgel akár 1024/2048 be-kimenetet lehet megvalósítani. Ilyen megoldással évek óta használok LPT portot 50-60 méter távolságra.
Üdv. |
|
|
köszönöm a válaszokat! |
|
|
Sziasztok,
Egy 9V-os elemről üzemeltetett eszközt szeretnék kapcsolgatni LPT porton keresztül. LED-et tudtam villogtatni, ezért gondoltam tovább lépek. Olvastam, hogy egy tranzisztor segítségével megoldható a dolog. Ezért vettem egy C547C jelűt, és bekötöttem az alábbi módon:
Emitter: ide rákötöttem az LPT GND-jét illetve az vezérlendő eszköz GND-jét
Bázis: ide jön az LPT D0 vonala, egy 470Ohm-os előtét ellenállással
Kollektor: ide kötöttem a vezérelni kívánt kütyüt
A dolog teljesen jól működik, ha adatot vezérlek a D0-ra akkor az eszköz bekapcsol. A gond ott van, hogy míg az eszköz be van kapcsolva, az USB-s egerem meghal. Nem vagyok nagy elektronikai zseni, ezért nem tudom, hogy hol szúrtam a dolgot, de ez így tuti, hogy nem normális.
Szerintetek miért hal meg az egerem, mit rontottam el?
Köszi
G |
|
|
Szia!
- A 470 Ω egy kicsit kevés bázisellenállásnak, nyugodtan lehet 4k7.. 10k is.
- A vezérelt kütyű a led. Kell egy előtét ellenállás oda is, ez lehet 470 Ω .. 1k a 9V -hoz.
- A negyfényerejű led optikai úton is zavarhatja az egeredet, irányítsd más felé...
A C547C valójának BC547C... |
|
|
Hali!
Szerintem a nem megfelelő bázis és hiányzó LED előtét ellenállás miatt megterhelted az LPT portot és e-miatt az USB feszültséget, amit úgy reagált le az USB HID hogy egyszerűen nem működött.
Ilyen és ehhez hasonló gondok megelőzésére ajánlatos az LPT port galvanikus leválasztása optocsatolóval.
Üdv. |
|
|
Sziasztok,
Kicsit zavarosan írtam, nem LED-et akarok kapcsolgatni, azon már túl vagyok. Most egy 9V elemmel működő elemlámpáról van szó.
Kicseréltem a 470? ellenállást 10k?-ra de ugyan úgy megfagy az egerem.
Én is arra gondoltam, hogy túlterheli a portot, a kapcsolás. Még nagyobb ellenállással kivédhető a dolog?
Hosszútávon tervezek optocsatolót is, 4 lámpát kellene kapcsolnom, ezt a csatolót néztem, szerintetek jó lesz?
Köszi
G |
|
|
| Van valami áramkör az elemlámpában? |
|
|
| Semmi sincs benne. Elem, kapcsoló, izzó. |
|
|
Hello valaki tudna segíteni? LPT portot akarok vezérelni, akartam csinálni egy c++ os programot amivel az adat bitteket tudnám kapcsolgatni. De valamit elrontottam a compiler szerint és nemtudom hogy mit, a dos.h fejfáljról innen hallottam.
A gond ott van, hogy az outportb-t változónak nézi.
Egyébként engem még nem tanitottak programozásra, pseudokódnál tartunk a suliba, de a c++ ból a nehezebb dolgokat nem értem.
#include <DOS.H>
#include <iostream>
#include <stdlib.h>
using namespace std;
int adat;
int main()
{
cout << ("Please enter the data:\n");
cin >>adat;
outportb(378,adat);
system("PAUSE");
return 0;
}
A BIOS-ban Normal üzemmódba van a port. |
|
|
| Szerintem az oldalon nem a c++-ról, hanem a sima c-ről beszél, én a programjaimat c#-ban írtam az inpout32.dll-lel, az sokkal egyszerűbb. |
|
|
Sziasztok!
Fényerőszabályzót szeretnék építeni LPT portra (8 bit), a program meg van, de nem tudom, hogy hogyan építsek hozzá áramkört. Tulajdonképpen a DAC részével van gondom, van ötletetek, hogy hogyan csináljam? |
|
|
| Mihez lesz? Kicsit bővebben fejtsd ki mit is akarsz. |
|
|
Egy trafós asztali halogén lámpához, DC12V-ra.
Pár perce találtam meg az R/2R létrát és most ezt próbálgatom. A fényerőszabályzó áramkört nem tudom, hogy hogyan csináljam, mostmár inkább abban kellene segítség. Esetleg triakkal lehetne szabályozni a trafót. |
|
|
| A halogén lámpa nem szereti a szabályozást, hamar kiég. |
|
|
Szia!
Egy dos -os C, C++ fordítónak még volt ilyen állománya. A Windows 95 után már nem lehet ilyen egyszerűen elérni. |
|
|
| Akkor mindegy, nem a halogén lesz, de kb 50-60W-ra (esetleg 230-ra is) milyen áramkör lenne jó? Néztem a fényerőszabályzós topikokban, de mindenfélét írnak és nem tudom melyik lenne a legjobb. |
|
|
Idézet: „de mindenfélét írnak”
Ez így van, mert nem mindegy, hogy egyen, vagy váltóáramra kell, nagy teljesítményű izzóra, vagy kis LED-ekre, vagy netán fénycsőre.
Tehát, először tudni kell mit szeretnél, s aztán meglesz rá a megoldás, de az adott topikjában keresd. |
|
|
Az LPT porthoz optocsatolón keresztül kapcsolódik egy áramköröm. A ledekhez 10mA-re méreteztem ellenállásokat, de így is megterheli a portot, és kb 1V-ot (a LED nyitófeszültségét sem) ér csak el a kimenet.
A port lábain terheletlenül 4,9V és 3,3V feszültségeket mérek -hogy lehet egyes lábakon eltérő? Keresgéltem, de úgy látom, nem szabványos a port terhelhetősége, nem tudom mire kéne vigyáznom.
Meg kéne hajtani az opto ledjét is valamilyen DC/DC konverterrel táplált CMOS bemenetű logikai IC-vel?
Vagy próbáljam addig növelni a ledek előtét ellenállását, míg ráhibázok arra pontra mikor még kinyit, de már elég kis áramot vesz fel?.... |
|
|
Hali!
Az optocsatoló nem terhelheti a kimenetet. Van a port és az opto.között ellenállás (270-470ohm) ?
Kapcsolási rajzot jó lenne látni.
Üdv. |
|
|
Mit akarsz kapcsolni vele? Kellene valami buffer azért oda, vagy pl: ULN2803A.
Valószínű a port kimenetén is van ellenállás, és ezért nem megy. |
|
|
És valaki tudna segíteni befejezni ezt?
#include <iostream>
#include <stdlib.h>
#include <io.h>
using namespace std;
int s,i,e;
char data;
int main()
{
system ("color 1F");
system ("Title D.Sz controller program");
cout << "\t\t\t\tCopyright(c) 2012\n";
system ("Date /t");
system ("Time /t");
i=0;
do{
cout <<("Parancsra varakozas:\n");
cin >>s;
switch(s)
{
case 1: data='\FF'; break;
case 2: data='\00'; break;
default :{ cout <<("Nem megfelelo billenyut nyomtal le\n");
cout <<("Ha ki akarsz lepni nyomj x-et\n");
cin >>e;
if (e == '\170') return 0;
}
}
outportb(0x378,data);
}
while(i < 2);
system ("PAUSE");
return 0;
}
az outportb nem jó ezért valami dll-es megoldás kell amihez még nem értek
Úgy szeretném vezérelni, hogy minden adatbit-et kulon tudjak kapcsolni és ha D2-t kapcsolom akkor mondjuk D0 ne kapcsoljon be. Lehetséges?
Egyébként az az elvem, hogy állandóan kérjen adatot be és a switchnél lesz 6 eset. A D7,D6, D5 biteket akarom kapcsolni. Azért lenne 6 eset, hogy ki is kapcsoljam őket, azt én megoldom, csak tudjak a portra irni. |
|
|
io.dll
Ezzel lehet kezelni XP alatt tuti jó, próbáltam.
Egyedi bit állítás:
unsigned char data = 0;
PortOut(0x378; data); // 0
data |= 0b00001000;
PortOut(0x378; data); // D3 be
data &= ~0b00001000;
PortOut(0x378; data); // D3 ki
|
|
|
Nekem windows 7 X64 van.
Eddig 2 programmal sikerult mukodesre birni:
LPT Port Test Utility x64;
wndlpt (winamp plugin);
Nemnagyon értek a dll-ekhez, hogy kell meghívni?
Gondolom a header-ek kötzelében kell.
0x378 as a portcim. |
|
|
Hiba: nincs meghíva az io.dll
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
int s,e,f;
unsigned char data = 0;
int main()
{
using namespace std;
system ("color 1F");
system ("Title D.Sz Disco controller program");
cout << "\t\t\t\tCopyright(c) 2012\n";
system ("echo.");
system ("echo **********************************");
system ("Date /t");
system ("Time /t");
f=0;
system ("echo **********************************");
system("echo 1.es Stroboszkop be\n");
system("echo 2.es Stroboszkop ki\n");
system("echo 3.mas Fustgep futoszal be\n");
system("echo 4.es Fustgep futoszal ki\n");
system("echo 5.os Fustkep szivattyu be\n");
system("echo 6.os Fustgep szivattyu ki\n");
system ("echo **********************************");
system("echo.");
//adatok kiirasa dos parancsok hasznalata
do{
cout <<("Parancsra varakozas:\n");
cin >>s;
switch(s)
{
case 1:{data &= ~0b00001000;
PortOut(0x378, data); /* D3 ki*/}; break;
case 2: PortOut(0x378, data); /* 0 */ break;
case 3: cout <<("3-mast nyomtal\n"); break;
case 4: PortOut(0x378, data); /* 0 */ break;
case 5: cout <<("5-ost nyomtal\n"); break;
case 6: PortOut(0x378, data); /* 0 */ break;
default:{ cout <<("Nem megfelelo billenyut nyomtal le:\n");
system ("echo **********************************");
cout <<("1.es Stroboszkop be\n");
cout <<("2.es Stroboszkop ki\n");
cout <<("3.mas Fustgep futoszal be\n");
cout <<("4.es Fustgep futoszal ki\n");
cout <<("5.os Fustkep szivattyu be\n");
cout <<("6.os Fustgep szivattyu ki\n");
system ("echo **********************************");
cout <<("\tMost kilepek\n");
system ("echo **********************************");
system ("PAUSE");
return 0;
}
}
}
while(f > 5); /* A vegtelenszer kerje be az s-t*/
system ("PAUSE");
return 0;
}
|
|
|
Mikor ide irtam az előző HSZ-t siettem és azt hittem a kommentekből kifolyólag, hogy a D3 ki az nemmás mint D3 mason adat kiküldés, de suliba menet eszembej jutott, hogy milyen hülye voltam 
Most leegyszerűsítettem, pl: a portout-ot a switchen kivül helyeztem el.
Csak anyit segítsen még valaki, hogy az io.dll-t meg tudjam hívni, mert másképp a PortOut nem használható, eddig dll-ekkel nem foglalkoztam, de tudom hogy mi az. |
|
|
Az oldalon fenn az egész egy zip ben.
van c file is benne amiben ott van hogyan kell betölteni a dllt. |
|
|
Köszi a segítséget de én azért írok ide mert meg akarom tudni mi miért van.
#include <iostream>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
//Dll function signature
typedef void (WINAPI *PORTOUT) (short int Port, char Data);
int main(int argc, char *argv[])
{
PORTOUT PortOut;
// Load DLL file
HINSTANCE hinstLib = LoadLibrary(TEXT("io.dll"));
if (hinstLib == NULL) {
printf("ERROR: unable to load DLL\n");
return 1;
}
// Get function pointer
PortOut = (PORTOUT)GetProcAddress(hinstLib, "PortOut");
if (PortOut == NULL) {
printf("ERROR: unable to find DLL function\n");
FreeLibrary(hinstLib);
return 1;
}
int s,e,f;
unsigned char data = 0;
using namespace std;
system ("color 1F");
system ("Title D.Sz Disco controller program");
cout << "\t\t\t\tCopyright(c) 2012\n";
system ("echo.");
system ("echo **********************************");
system ("Date /t");
system ("Time /t");
f=0;
system ("echo **********************************");
system("echo 1.es Stroboszkop be\n");
system("echo 2.es Stroboszkop ki\n");
system("echo 3.mas Fustgep futoszal be\n");
system("echo 4.es Fustgep futoszal ki\n");
system("echo 5.os Fustkep szivattyu be\n");
system("echo 6.os Fustgep szivattyu ki\n");
system ("echo **********************************");
system("echo.");
//adatok kiirasa dos parancsok hasznalata
do{
cout <<("Parancsra varakozas:\n");
cin >>s;
switch(s)
{
case 1:data |= 0b00001000; break;
case 2:data &= ~0b00001000; break;
default:{ cout <<("Nem megfelelo billenyut nyomtal le:\n");
system ("echo **********************************");
cout <<("1.es Stroboszkop be\n");
cout <<("2.es Stroboszkop ki\n");
cout <<("3.mas Fustgep futoszal be\n");
cout <<("4.es Fustgep futoszal ki\n");
cout <<("5.os Fustkep szivattyu be\n");
cout <<("6.os Fustgep szivattyu ki\n");
system ("echo **********************************");
cout <<("\tMost kilepek\n");
system ("echo **********************************");
system ("PAUSE");
return 0;
}
}
// Call function.
PortOut(0x378, data); // a data valtozo alapjan kiirja a portra a biteket.
}
while(f > 5);
//We free the dll
FreeLibrary(hinstLib);
system ("PAUSE");
return 0;
}
Erre a kódra lefut a compiler meg is lesz belőle az .exe és csakis Administrator engedélyel fut, ami nem gond, de amikor lenyomom az 1-est akkor lefagy az ablak. De nemhiszem hogy a Dll hívásal van gond. |
|
|
Szerintem az oprendszerrel van baja.
Meg kéne próbálni olyan dll-t ami jó WIN7 x64 re is.
Bővebben: Link
Esetleg megpróbálhatod ezt is, bár a neve alapján ez is 32 bites rendszerre van, de ott az az egész pack, próbáld ki az exét, ha megy akkor ez alapján el lehet indulni.
Igaz ez C#, .NET framework, de ha ismered a C-t nemhiszem h gondot okoz átírni a mintaprogramot. |
|
|
| Köszi de jelenleg van egy ilyen inpout x64.dll es file-om azt akarom betölteni, remélem hogy sikerul. De hova kell másolni a dll-eket? az exe könyvtárába? |
|
|
Igen, az exe mellé kell.
Megpróbáltad debuggolni a kódot? Kiderült, hogy hol fagy le?
Amúgy pont azt az inpoutx64.dll-t linkeltem be én is  |
|
|