RTV forum PL | NewsGroups PL

Inicjalizacja portu LPT w DOS do sterowania AVR w IBM ThinkPad 380XD?

LPT + DOS i AVR

NOWY TEMAT

elektroda NewsGroups Forum Index - Elektronika Polska - Inicjalizacja portu LPT w DOS do sterowania AVR w IBM ThinkPad 380XD?

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 Smile 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 Wink
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 Wink
(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 Smile 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 Wink
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 Smile 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 Wink
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 Smile, 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
Smile, 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 Smile, 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
Smile, 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 Smile, 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 Smile, 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ę Smile

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

elektroda NewsGroups Forum Index - Elektronika Polska - Inicjalizacja portu LPT w DOS do sterowania AVR w IBM ThinkPad 380XD?

NOWY TEMAT

Regulamin - Zasady uzytkowania Polityka prywatnosci Kontakt RTV map News map