Mikrokontroleri

Autor: Branko Petljanski

E-mail: brankop@uns.ns.ac.yu

 

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.

3b31.jpg (15262 bytes)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).

3b32.gif (4852 bytes)
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.

3b33.gif (4645 bytes)
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
Bit po bit
Povezivanje ADC-a sa 68HC11
Serijski EEPROM, šta i kako
Kako upaliti sijalicu?
Konverzija
Množenje celog i realnog broja
Povezivanje male tastature 
AD konverzija

C o p y r i g h t  1998 mikroElektronika. All Right Reserved. Za sva pitanja obratite se redakciji