Goto page Previous 1, 2
BartoszK
Guest
Thu Oct 19, 2006 11:59 am
Mariusz Dybiec napisał(a):
Quote:
BartoszK napisał(a):
J.F. napisał(a):
A czy twoje urzadzenie poprawnie udaje drukarke - tzn generuje sygnal
Busy i/lub Ack ?
Bo bios/dos/windows pieknie wysylaja dane do drukarki, ale wlasnie "do
drukarki".
Mozesz sie jeszcze zastanowic nad udawaniem drukarki w trybach
rozszerzonych [EPP].
I tu właśnie jest chyba cały problem, stąd następne pytanie:
Na jakie piny podać odpowiednie stany tak aby system myślał że ma
podłączoną drukarkę ?
/ACK (10) stan niski oznacza dotowość odebrania nowego bajtu
BUSY(11) wysoki oznacza stan off-laine - czyli musi być niski
PAP(12) oznacza brak papieru - czyli ma być niski
ONOF(13) syganlizuje obecność drukarki - ma byc wysoki
/ERR(15) niski stan oznacza błąd drukarki - ma być wysoki
Pięknie dziękuje i już grzeje lutownicę :)
pozdrawiam
Bartek
Waldemar
Guest
Thu Oct 19, 2006 12:03 pm
BartoszK schrieb:
Quote:
Waldemar napisał(a):
przeca ci napisałem. Chcesz programowo czy naprawdę udawać drukarkę?
Jak ma się twoje ustrojstwo zachowywać drukarkowo, to musisz zachować
protokół drukarki, czyli odpowiednio wysterować piny busy, ack, pe.
Jak programowo, to wystarczy pisać na adres IO portu, czyli 0x378,
0x278, 0x3BC czy jaki adres tam masz.
Waldek
Ok

teraz już wiem że to urządzenie ma udawać prawdziwą drukarkę.
Stąd pytanie Waldemarze:
Na jakie piny podać odpowiednie stany tak aby system myślał że ma
podłączoną drukarkę ?
nie pamiętam logiki, musisz zajrzeć to jakieś antycznej książki jaki
jest protokół drukarki. PE jest chyba negatywna logika, czyli 1 na fest
dać, by laptop wiedział, że jest papier
Busy i ACK nie pamiętam, wcięło mi książki. Ale na grzyba ci to wszystko.
Waldek
Waldemar
Guest
Thu Oct 19, 2006 12:13 pm
BartoszK schrieb:
Quote:
Waldemar napisał(a):
BartoszK schrieb:
Waldemar napisał(a):
coś chyba nie jest tak...
jest nie tak, bo przy ww komendach dos oczekuje drukarki, której nie
masz. Tylko zrozumiałem, że chcesz to robić programowo, a nie przez
kopiowanie pliku. To jak to jest?
Chce to robić programowo, tym poleceniem 'dir >> prn' chciałem tylko
sprawdzić czy cokolwiek się zmieni na porcie.
no to nie grzeb tym dalej, bo tylko szlag cię trafi. W jakim języku
piszesz?
W c po prostu outp(0x378,val) wysyła byte val na D0-D7 LPT1. Musisz
tylko sprawdzić adres portu w biosie. Coponiektóre laptopy mają prn na
adresie 0x3BC.
Waldek
Do testów używam tego programu:
http://www.luberth.com/cstep/
O ile mi wiadomo jest pisany w C, drugim programem na którym sprawdzałem
to ustrojstwo to
http://www.cnczeus.com/download/ i za cholerę ani na
jednym ani na drugim w dosie nie ma żadnej zmiany na porcie. Co
śmieszniejsze jak uruchomię te programy spod win98 wszystko śmiga
wyśmienicie.
nie jest śmieszne, bo idą przez driver, który nie robi nic innego, jak
mapowanie portów procesora do przestrzeni użytkownika. z punktu widzenia
programisty masz tam bezpośrednie wejście na port. W dosie tego
mapowania nie ma (bo niepotrzebne, tu wsio chodzi w user mode). Jak
program będziesz pisał sam, to nie ma sprawy, robisz jak napisałem.
Nawiasem mówiąc, tu jest jedna funkcja mojego programu
(dasbyte jest zdefiniowane globalnie, bo jest to sterownik do 2 silników
krokowych). Funkcja jest maszyną stanów do kroku w lewo pierwszego silnika
void m1tickleft (void){
byte c,e;
c= dasbyte & 0x0F;
if ( halfmode ) {
e = 2;
if(c == 2 ) e = 3;
if(c == 3 ) e = 1;
if(c == 1 ) e = 5;
if(c == 5 ) e = 4;
if(c == 4 ) e = 12;
if(c == 12 ) e = 8;
if(c == 8 ) e = 10;
if(c == 10 ) e = 2;
} else {
e = 3;
if(c == 3 ) e = 5;
if(c == 5 ) e = 12;
if(c == 12 ) e = 10;
if(c == 10 ) e = 3;
}
dasbyte &= 0xF0;
dasbyte |= e;
outp(0x378,dasbyte);
}
Tu silnik krokowy wisi bezpośrednio przez driver na porcie drukarki, bez
żadnego procesora. WW program chodzi pod LabWindows, bo dosa już nie
używamy, ale ww funkcja została skopiowana 1:1 ze starego programu
dosowego. LabWindows ma wbudowany driver do wirtualnych portów.
Waldek
Mariusz Dybiec
Guest
Thu Oct 19, 2006 12:13 pm
Waldemar napisał(a):
Quote:
BartoszK schrieb:
Waldemar napisał(a):
przeca ci napisałem. Chcesz programowo czy naprawdę udawać drukarkę?
Jak ma się twoje ustrojstwo zachowywać drukarkowo, to musisz
zachować protokół drukarki, czyli odpowiednio wysterować piny busy,
ack, pe. Jak programowo, to wystarczy pisać na adres IO portu, czyli
0x378, 0x278, 0x3BC czy jaki adres tam masz.
Waldek
Ok

teraz już wiem że to urządzenie ma udawać prawdziwą drukarkę.
Stąd pytanie Waldemarze:
Na jakie piny podać odpowiednie stany tak aby system myślał że ma
podłączoną drukarkę ?
nie pamiętam logiki, musisz zajrzeć to jakieś antycznej książki jaki
jest protokół drukarki. PE jest chyba negatywna logika, czyli 1 na fest
dać, by laptop wiedział, że jest papier
Busy i ACK nie pamiętam, wcięło mi książki. Ale na grzyba ci to wszystko.
Chyba po to aby system wysyłał bajty, myśląc że jest podpięta drukarka.
Pytanie po kiego grzyba na LPT a nie RS.
--
Pozdrawiam
MD
BartoszK
Guest
Thu Oct 19, 2006 12:41 pm
Mariusz Dybiec napisał(a):
Quote:
Waldemar napisał(a):
BartoszK schrieb:
Waldemar napisał(a):
przeca ci napisałem. Chcesz programowo czy naprawdę udawać drukarkę?
Jak ma się twoje ustrojstwo zachowywać drukarkowo, to musisz
zachować protokół drukarki, czyli odpowiednio wysterować piny busy,
ack, pe. Jak programowo, to wystarczy pisać na adres IO portu, czyli
0x378, 0x278, 0x3BC czy jaki adres tam masz.
Waldek
Ok

teraz już wiem że to urządzenie ma udawać prawdziwą drukarkę.
Stąd pytanie Waldemarze:
Na jakie piny podać odpowiednie stany tak aby system myślał że ma
podłączoną drukarkę ?
nie pamiętam logiki, musisz zajrzeć to jakieś antycznej książki jaki
jest protokół drukarki. PE jest chyba negatywna logika, czyli 1 na
fest dać, by laptop wiedział, że jest papier
Busy i ACK nie pamiętam, wcięło mi książki. Ale na grzyba ci to wszystko.
Chyba po to aby system wysyłał bajty, myśląc że jest podpięta drukarka.
Pytanie po kiego grzyba na LPT a nie RS.
Polutowałem i ożyło

, 5V podałem na piny 10/13/15 (ACK/SELECT/ERROR) i
0V czyli GND na 11 i 12 (BUSY i PAPER END). Używam LPT dlatego że już
mam gotowy soft do tego urządzenia w dodatku z graficznym interfejsem

, a RS232 dla mnie jak na razie to zbyt dużo zabawy.
pozdrawiam
Bartek
Mariusz Dybiec
Guest
Thu Oct 19, 2006 1:15 pm
BartoszK napisał(a):
Quote:
Polutowałem i ożyło

, 5V podałem na piny 10/13/15 (ACK/SELECT/ERROR) i
0V czyli GND na 11 i 12 (BUSY i PAPER END). Używam LPT dlatego że już
mam gotowy soft do tego urządzenia w dodatku z graficznym interfejsem

, a RS232 dla mnie jak na razie to zbyt dużo zabawy.
Gratulacje. Myślałem, że wszystko robisz sam od zera. Jeśli skorzystałeś
z jakiegoś darmowego projektu z netu to podaj linka. Może ktoś będzie
zainteresowany.
--
Pozdrawiam
MD
BartoszK
Guest
Thu Oct 19, 2006 5:19 pm
Mariusz Dybiec napisał(a):
Quote:
BartoszK napisał(a):
Polutowałem i ożyło

, 5V podałem na piny 10/13/15 (ACK/SELECT/ERROR)
i 0V czyli GND na 11 i 12 (BUSY i PAPER END). Używam LPT dlatego że
już mam gotowy soft do tego urządzenia w dodatku z graficznym
interfejsem

, a RS232 dla mnie jak na razie to zbyt dużo zabawy.
Gratulacje. Myślałem, że wszystko robisz sam od zera. Jeśli skorzystałeś
z jakiegoś darmowego projektu z netu to podaj linka. Może ktoś będzie
zainteresowany.
http://www.luberth.com/cstep/
program, źródła i wile innych ciekawych rzeczy znajdziesz na stronie.
a oto przykłady:
http://bartek.no-ip.org/plotter/
pozdrawiam
bartek
J.F.
Guest
Thu Oct 19, 2006 7:16 pm
On Thu, 19 Oct 2006 13:59:40 +0200, BartoszK wrote:
Quote:
/ACK (10) stan niski oznacza dotowość odebrania nowego bajtu
BUSY(11) wysoki oznacza stan off-laine - czyli musi być niski
PAP(12) oznacza brak papieru - czyli ma być niski
ONOF(13) syganlizuje obecność drukarki - ma byc wysoki
/ERR(15) niski stan oznacza błąd drukarki - ma być wysoki
Pięknie dziękuje i już grzeje lutownicę
Najpierw spojrz na to
http://www.fapo.com/cenmode.htm
Strobe powinno wyzwolic dwa impulsy - Busy przez pewien czas,
i pod jego koniec nACK. przyda sie kilka 555, albo 74123.
Jest szansa ze windowsowi wystarczy tylko jeden sygnal - ACK.
J.
Goto page Previous 1, 2