|
POKRENIMO
ŠTAMPAČ
Najispravnije je posmatrati štampač
kao zaseban računar. Takvo stajalište uopšte nije preterano jer on u sebi ima sve
elemente računara: kontroler, memoriju i U/I sklop.
U ovom projektu oslanjamo se na
9-to iglični EPSON LX-300 kao klasični predstavnik matričnih printera.Upotrebljen je
mikrokontroler 68HC11A1 u čijih 512 bajta bez problema staje ceo program.
Kada
se jednom poveže mikrokontro-ler sa printerom, upravljanje njegovim radom je vrlo
jednostavno. Printeru se šalju unapred dogovoreni znakovi koji predstavljaju komande.
Tako npr. ako mu se pošalje kontrolni znak 7 printer će se oglasiti zvučnim signalom.
Ako mu pošaljemo niz kontrolnih znakova: 27,120,48 printer će dalje ispisivati znakove u
draft modu. Naravno, nama je glavni cilj da ispisujemo tekst na papiru, a to se postiže
slanjem broja koji predstavlja ASCII ekvivalent željenog slova ili brojke. Kontrolnih
znakova ima dosta, i svi se mogu naći u priručniku koji se odbija uz printer.
Prilikom
uključenja printera on se nalazi u nekom uobičajenom stanju, npr. štampanje u draft
modu, tako da se nove komande šalju samo u slučaju da želimo drugačiji oblik slova ili
način rada nego što je uobičajeno.
Posebnu pažnju treba obratiti na dve komande koje koristimo u programu. Naime,
printer poseduje bafer kojim se povećava brzina rada. On u taj bafer smešta znakove sve
dok ga ne popuni. Tek kada printer popuni bafer ispisuje sadržaj istog na papir. Pošto
noviji printeri poseduju velike bafere, trebalo bi mnogo poruka poslati printeru pre nego
što bi se odštampale. Stoga, posle svake poruke treba printeru poslati kontrolne znakove
13 i 10, koji predstavljaju komande CR (Carriage Return) i LF (Line Fide). Izvršenjem
ovih komandi printer će odštampati sadržaj bafera, vratiti glavu u početni položaj i
preći u novi red.
Povezivanje
Komunikacija između
mikrokontrolera i printera obavlja se preko tzv. printer porta. Na tom portu su za razliku
od serijskog porta TTL naponski nivoi, pa nema potrebe za naponskim pretvaračima, već
direktno spajamo pinove mikrokontrolera sa ulazom u printer. Priključak za printer je
25-to pinski muški konektor. Za štampanje znakova nije potrebno da upravljamo i
kontrolišemo sve linije prema i od printera. Dovoljno je da kontrolišemo sledeće
linije: STROBE, BUSY, ERROR i DATA (D0-D7).

Slika 1. Šema povezivanja mikrokontrolera i štampača
Linija STROBE je na visokom
logičkom nivou. Kada mikrokontroler ima pripremljene podatke za printer, signal se
spušta na niski logički nivo najmanje 0.5ms. Printer detektuje niski nivo STROBE signala
i očita podatak sa D0-D7.BUSY linija na visokom logičkom nivou određuje uslov da
printer ne može primati podatke. Signal je na visokom nivou u sledećim slučajevima: za
vreme operacije štampanja, ‘offline’ stanja, nedostatak papira te za vreme statusa
greške štampača.
Linija ERROR je na niskom logičkom nivou kada sa printerom nešto nije uredu. Npr.
‘offline’ ili nedostatak papira.D0-D7 predstavlja bitove podatka koje mikrokontroler
šalje printeru.
Kao što se vidi linije BUSY i ERROR su u slučajevima koji su nama važni
invertovani. U programu moramo obe linije kontrolisati jer se može desiti da je printer
isključen, a tom slučaju će mikrokontroler ‘videti’ BUSY signal kao da je printer
spreman da primi podatak.
Od portova mikrokontrolera iskoristili smo Port B i Port C. Port B je izlazni, tako
da je on iskorišten za paralelno slanje podatka ka printeru. Pored data linija imamo
jednu upravljačku liniju prema printeru (STROBE) i dve linje koje odražavaju status
printera (BUSY i ERROR). Pomenute linije se nalaze na portu C čiji smo prvi pin
redefinisali kao izlazni. Potrebno je spojiti i masu printera sa masom mikrokontrolera.
Šema povezivanja se vidi na slici 1.Na slici 2 je vremenski dijagram za paralelni prenos
između mikrokontrolera i printera.

Slika 2. Vremenski dijagram paralelnog prenosa između mikrokontrolera i štampača
Mikrokontroler treba stalno da
kontrolise logički nivo na BUSY liniji, jer tom linijom printer daje do znanja da je
spreman da primi signal. Kada se ona spusti na nizak logički nivo, potrebno je da se na
linijama D0-D7 nalazi podatak koji šaljemo jer spuštanjem STROBE signala na logičku
nulu printer preuzima podatak.
Ako želimo da mikrokontroler konstatuje da li je uzrok greške nedostatak papira,
tada treba i pin 12 printera (Paper End) spojiti sa portom C. U slučaju logičke jedinice
na tom pinu došlo je do nedostatka papira.
Program
Program napravljen da demonstrira
rad konfiguracije mikrokontroler- printer je vrlo jednostavan. Mikrokontroler radi u BOOT
modu, a upisali smo ga u EEPROM pomoću programa PCbug. Ukratko, program uzima ASCII
znakove poruke i smešta ih na port B i to će raditi sve dok ne dođe do znaka sa kodom
35 (#). Kada postavi znak na port, mikrokontroler proverava stanje printera tako što
očita pinove PC1(ERROR) i PC2(BUSY), te ako je printer slobodan spušta za trenutak na
logičku nulu pin PC0(STROBE). Postavlja se pitanje da li niski logički nivo na pinu PC0
dovoljno dugačko traje jer je minimalna potrebna dužina 0.5us. Kako instrukcija
BCLR(IND,X) traje 7 ciklusa, to znači da će niski logički nivo na PC0 trajati oko 3.5us
pri upotrebljenom kristalu od 8MHz. To je sasvim dovoljno da printer registruje da je
podatak spreman i da ga može preuzeti sa DATA linije.
Na kraju poruke šaljemo printeru i kodove 13 i 10 da bi printer odštampao
sadržaj bafera. Posle svakog reseta, printer će odštampati poruku “TEST PORUKA”.
preći u novi red i postaviti glavu na početak.
| Listing
|
PORTB EQU $1004 ;I/O Port
B
PORTC EQU $1003 ;I/O Port C
DDRC EQU $1007 ;Data Direction for Port C
ORG $B600 ;Početak programa na
adresi $B600
LDS #$FF ;Definišemo stek
LDX #$1000 ;Početak tablice
registara
LDAA #%00000001 ;PC0 definišemo
kao izlazni pin
STAA DDRC
BSET $03, X #%00000001;STROBE=1
LDY #PORUKA ;Početna adresa poruke
koju štampamo
LAB2 LDAA $0,Y ;u ACCA ide znak za štampanje
CMPA #35 ;da li je kraj teksta?
BEQ LAB3
STAA PORTB ;Postavljamo podatak na
DATA linije
LAB1 BRSET $03,X#%00000100 LAB1 ;Skoči ako je BUSY=1
BRCLR $03,X #%000000010
LAB1
;Skoči ako je EER=0
BCLR $03,X #%00000001 ; STROBE=0
BSET $03,X #%00000001 ; STROBE=1
INY ;Pokazivač na sledeće slovo u
poruci
BRA LAB2 ;Skoči na ponovno
štampanje znaka
LAB3 BRA LAB3 ;Ovde se vrti posle odštampane poruke
PORUKA FCC ‘TEST PORUKA’
FCB 13,10,35 ;Kodovi novog reda i
kraj poruke |
| Pročitajte
više o ovoj temi |
|
|
|