|
[ Alef @ 23.08.2004. 22:13 ] @
| Da li neko može da mi kaže gde grešim… Pokušavam da pokrenem paralelni port. Ubo sam četiri led diode između D0 i D1, D2 i D3, D4 i D5 i između D6 i D7, a program je sledeći:
Code:
#include <stdio.h>
#include <unistd.h>
#include <asm/io.h>
#define BASEPORT 0x3bc /* lp0 */
int main()
{
/* Otvaram port */
if (ioperm(BASEPORT, 3, 1)) {perror("ioperm"); exit(1);}
/* Šaljem na prvi bajt pota, redom od 0 - 256 */
int i;
for(i=0; i < 256; i++) {
outb(i, BASEPORT);
/* pauza */
usleep(500000);
}
/* Zatvaram port */
if (ioperm(BASEPORT, 3, 0)) {perror("ioperm"); exit(1);}
exit(0);
}
E sad, diode bi trebale da se upale kada im se na jednu nožicu dovede 1, a na drugu 0, znači da bi dioda ubodena u D0 i D1 trebala da zasvetli kada pošaljem ili 1 ili 2, itd. (zbog polarizacije), ali ne događa se apsolutno ništa?!
[Ovu poruku je menjao Alef dana 24.08.2004. u 19:12 GMT] |
[ stalker @ 23.08.2004. 23:29 ] @
Koji OS?
Zar nije paralelni 0x378 ili 0x37a, ne secam se napamet?
Kako to bodes diode (ne znam sta ti je to d0,d1...), jesi li proverio da li sve katode idu do mase?
[ blaza @ 24.08.2004. 04:29 ] @
"LPT1 is normally assigned base address 378h, while LPT2 is assigned 278h".
Da bi LE dioda svetlila, mora se pravilno polarisati. Anoda mora biti na pozitivnijem potencijalu od katode. Struju kroz LE diodu je potrebno ograniciti na naki nacin. Sami drajveri izlaznih linija porta ogranicavaju struju na obicno 12mA? (sink/ source). Kada su LE diode inverzno polarisane ponasaju se kao slabe zener diode sa zenerovim naponom 3-5V, pa u odredjenim slucajevima inverznog polarisanja moze doci do ostecenja istih.
[ Alef @ 24.08.2004. 08:13 ] @
Aj, iz početka:
1) OS je Linux (naravno  )
2) U HOWTO-u piše da je lp0 na 0x3bc, a meni je paralelni na lp0, bar koliko sam ja uspeo da provalim.
3) D0-D7 su izlazni pinovi paralelnog porta.
4) Pa jednostavno sam gurnuo LED u rupice paralelnog porta  .
5) Ne znam zašto bi bilo bitno da katoda bude na masi, dovoljno je da pin u koji je ubodena anoda bude setovan, a pin u koji je ubodena anoda resetovan. Razlika potencijala između ta dva pina je onda 5V, što je dovoljno da dioda zasvetli. Ali probao sam i da ubodem katodu u masu, a anodu u neki od izlaznih pinova i opet se ništa ne događa?!
6) Proverio sam diode, rade…
[ Alef @ 24.08.2004. 08:33 ] @
Ipak je bio 378h  . Hvala vam.
[ stalker @ 24.08.2004. 11:38 ] @
Paralelni port rulz:)
[ Alef @ 24.08.2004. 18:04 ] @
E sad problem nastaje kada hoću da pokrenem ovaj program kao obican korisnik, a ne kao root. Prijavljuje mi:
Code:
ioperm: Operation not permitted
Čak i kada mu dodam sticky uid (chmod u+s program). Znam da postoji neka varijanta sa open, pa write i read, i onda dodam dozvolu korišćenja na /dev/štagod, ali nekako mi ne uspeva  … U stvari, ja u /dev/ ni nemam lp0, lp1 ili bilo šta slično…
Neki predlog?
[ Alef @ 10.10.2004. 00:20 ] @
Pojavio se još jedan problem. Hteo sam da ukombinujem ovaj program sa jednim c++
programom, ali mi prijavljuje:
Code:
port.cc:102: `ioperm' undeclared (first use this function)
port.cc:102: (Each undeclared identifier is reported only once for each function it appears in.)
port.cc: In function `int main()':
port.cc:138: `usleep' undeclared (first use this function)
O čemu se radi?
[ Alef @ 10.10.2004. 12:45 ] @
Rešio sam problem tako što sam zamenio:
Code: #include <asm/io.h>
sa
Code: #include <sys/io.h>
?!
Ali se novi problem pojavio kada sam pokušao da program portujem na Windows kompajlirajući ga sa MinGW-om (čitav program je prikačen uz poruku). Tamo ne postoji sys/io.h. A prijavljuje mi da _outp nije definisano, kada ga kompajliram sa g++-om. Sa gcc-om sve odradi kako treba…
[ leka @ 16.10.2004. 12:32 ] @
Viktore, moram da priznam da je ideja bas kul. Ja nisam elektronicar, niti sam imao prilike da isprobam kako sve ovo radi, ali verujem da bi se mogla napraviti neka zanimljiva stvar sa tim kodom (ako radi). :)
[ Alef @ 16.10.2004. 14:07 ] @
Meka mi je i rekao da bi tebe ovako nešto interesovalo, pa sam mu poslao kod, ali ne znam da li ti je prosledio.
Elem, sredio sam kod i sada radi na Win98, WinME (MinGW), Linux-u (gcc) i možda na FreeBSD-u i WinXP-u (nemam dotična dva, pa nisam ni isprobao), a mogao bih da ga implementiram i za Borland C, Turbo C, DJGPP, i Microsoft Visual C, ali me mrzelo da to radim, jer ih nikada ne koristim. Funkcije su, jelda, identične, samo je implementacija druga.
Napravio sam i jedno glupavo malo FLTK programče koje setuje i resetuje DATA portove koristeći te funkcije.
[ drgncuca @ 18.02.2006. 13:36 ] @
Ako si ovo probao da radis pod win XP ili pod win2000 nebih rekao da moze jer moras da radis preko inpout32.dll.Ako radis pod win98 onda jednostavno koristis outport(0x378,podatak); sa inkludom #include <stdio.h>.
Ako nadjes resenje za win XP ili 2000 molim te posalji mi na [email protected]
[ Confused Confused @ 11.04.2006. 12:53 ] @
Pozdrav svima!!
malo da opet ozivimo ovu temu...............nadam se da nema ljutnje!!???! pregledao sam skoro sve thread-ove u nadi da cu naci nesto sto mogu iskoristiti ali bez uspjeha!!!
i ja sam poceo da se igram malo sa paralelnim port-om i odmah sam zapao u probleme.......tja nista neradi..
imam jednostavan program koji je nakon svih problema spao na svega 2-3 linije.... ali i dalje neradi
#include <stdio.h>
#include <conio.h>
#include <dos.h>
void main(void)
{
outportb(0x378,0xff);
getche();
}
i ovdje nema nista da se objasnjava cak za C - laika kao sto sam ja!!
tokom kompiliranje dobijem error koji kaze......tja nema puno opcija  : "undefined function "outportb""!!???
btw: koristim Borland C++ 5 pod Win98!!!
isti tako outportb (i "_outp" i "outp" i "_outportb" i naravno "outportb" )funkciju mogu da nadjem u DOS header-u ali ih kompiler ne moze vec naci!!!????
PS:
"debug" pod Dos-om sa ovom komandom: -"o 378 ff" aktivira sve port pinove bez problema!!!!??!
Moze li ikako neko objasnjenje na ovo?? Moram priznati da me je sramota ovo postirati ali nemam izbora.... necu nikada ni nauciti!!!
puno pozdrava,
Confused
[ Confused Confused @ 12.04.2006. 07:40 ] @
zar niko nema ideja u vezi ovoga???
[ z@re @ 13.04.2006. 12:31 ] @
Ti si uvrstio header file u kojem se nalazi deklaracija outportb funkcije, ali nemas njezin kod. Njezin kod se nalazi u nekoj od biblioteka koje dolaze sa Borlandovim C++ 5. Moras tu bibiloteku nac, i ulinkat je zajedno sa svime, u projektu. Ne poznajem BCpp 5-icu, tako da ces morat se sam snac oko toga. Barem sam ti rekao o cemu se radi.
Citat: Confused:
PS:
"debug" pod Dos-om sa ovom komandom: -"o 378 ff" aktivira sve port pinove bez problema!!!!??!
Sta je tu cudno? Sa Debugom mozes mijenjat datoteke na najnizem nivou, ili baratat s hardverom na najnizem nivou. Ti si tom komandom poslao FF bitove na adresu 378, koja je paralelni port. Debugom mozes i rucno zapisat nesto na disk, disketu, iako to nije preporucljivo, osim ako znas sta radis.
Debug je jako handy tool. Zato sta, recimo tvoj kod nece radit pod winNT, jer svi direktni pozivi prema hardveru se blokiraju, i moraju ic preko hardware abstraction layera. A to nije toliko jednostavno kao ove simple output funkcije. Postoje dodatne biblioteke...ali to je druga prica. Uglavnom, htjedoh rec da debug postoji i u winNT sistemima (NT4, 2000, XP...), a svaki direktan poziv kojeg radis preko debug-a ce se fino "konvertirat" i provuc kroz HAL. Tako da ti bez problema mozes testirat sta koja sekvenca bitova poslana na neku adresu tocno radi, bez da pises relativno zakomplicirani kod koji prolazi kroz HAL. "o 378 ff" radi bez problema i na winNT. Dok outportb(0x378, 0xFF) nema sanse da proradi.
[ Confused Confused @ 14.04.2006. 09:36 ] @
pozdrav Z@re,
djelimicno si u pravo....u svakom slucaju hvala na objasnjenju oko NT problematike....nisam uopste bio upoznat sa tim a namjeravam se igrati sa time!! (ps. probao sam debug-er pod Win NT i neradi :-)) imas li kakav dobar link oko NT systema i paralelnih portova??
get to the case:
Ja sam locirao i pototype funkcije outport-a i samu kodu funkcija ali nista neradi.
Nasao sam kasnije na borland faq-u da ver. 5 C/C++ kompajlera (koji kreira 32-bitni kod) da on uopste nepodrzava outport (i ostale out_ funkcije) iako se nalaze u biblioteci. te funkcije vaze samo na 16-bitnom kompileru (borland C++ ver 3). znaci nema teoretske sanse da ovo radi u svakom slucaju pod BC++ v.5.
Ipak sam uspio da upalim lampice uz pomoc inline assembler (TASM opcode) i sve radi ok. Znaci sami hardwerski interface sam uradio u asm-u a ostatak u C-u otprilike ovako:
main void()
{
// neka C koda .....
_asm {
mov dx,0x378
mov ax, 0xff
out dx,ax
}
sleep(10); // 10 sek. ON
_asm {
mov dx,0x378
mov ax, 0x00
out dx,ax // LED OFF
}
}
dobro jednostavno (On & Off) a i radi fino.... probao sam da to malo automatiziram u samom C-u gdje sam asm kodu uvezao u funkcije i dalje radi fino.
mogu da kontrolisem mali dc motor preko tastova. :-) Znaci moze se ovako iako nije elegantno.
pozdrav,
confused.
[ z@re @ 16.04.2006. 19:24 ] @
Eto, pomocu tog inline assemblera mozes sam napravit winNT biblioteku i svoju outport funkciju ;)
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|