Stránka 1 z 1

Procesory PIC a tisk na tiskárnu přes LPT

Napsal: 20 říj 2007, 16:37
od Jirka
Zdravím,

Mám takový teoretický dotaz. :)

Zkoušel jste někdo tisknout z procesoru PIC přes LPT port na jehličkové tiskárny nebo termotiskárny? Je to vůbec reálné, případně byly by nějaké odkazy na tuto problematiku?

Zamýšlel jsem tisknout z malého terminálu samolepící štítky s pořadovým pětimístným číslem a PICka by mi do toho zapojení "seděla". Postisku tlačítka by se přičetla jednička a soubor znaků pro tisk (v ASCII) by se odeslal na tiskárnu přes LPT. Tak nějak bych si to představoval.

Napsal: 20 říj 2007, 17:03
od Hop377
Je to realne, staci ked si pozries specifikaciu protokolu centronics a lahko to pochopis.

Napsal: 20 říj 2007, 21:05
od Crifodo
někde na webu by měl být ke stažení disassemblovaný výpis ROM Didaktiku Gama a tam je rutina pro Z80 pro obsluhu tiskárny s rozhraním Centronics, asi by se z toho dalo inspirovat. Vešlo se to do pár stovek bajtů.

Napsal: 21 říj 2007, 08:40
od eljaro
záléží taky co budeš chtít tisknout ! text půjde podle textovéch sad v dané tiskarně asi to bude docela jednoduché už si to moc nepamatuji ale odešleš esc sekvenci ve které nastavýš tiskárnu do text režimu - zvolíš typ písma a způsob pohybu vozíku uzavřeš inicializaci a začneš sypat text s příslušným generováním konce řádku . U grafiky je to podobné jen se místo typu nastavuje hustota dpi a místo dat tam pošleš 0101 podle toho jak má zrovna tisknout a opět přeskok na další řádek . je dobré projít protokol k tiskárnám - v zásedě takto budeš moci tisknout i Hp s plc3 ten protokol je obdobný jako pro jehličkové. Ruina pro centronix je tady http://www.piclist.com/techref/microchip/Centronix.htm ale zbytek asi musíš nastudovat sám :roll:

Napsal: 21 říj 2007, 13:18
od Jirka
Tak jsem si k tomu stáhl PDFka z hw.cz a nějaký scripta + něco z www.piclist.com/techref/microchip/ .
Zkusím se tím prokousat, snad se v tom "neutopím".

eljaro: potřebuju vytisknout 5-místné číslo, data (formát), co chci poslat na tiskárnu, mám. Co hledám, je způsob jak to dostat z PICky do tiskárny přes LPT -> v podstatě rutinu.
Sorry to all you MPLAB users that it is in Parallax code.

Ouu, Parallax, ja něpanimaju.

Zatím díky za odpovědi.

Napsal: 22 říj 2007, 20:30
od eljaro
ten paralax nebude takové terno jen přepsat to jejich cje a podobné zkratky to nebude žádná hruza jinak je to zdroják joko každý jiný ta syntaxe je podobná jako u u atmelů tak to jen porovnat a aplikovat do mplabu

Napsal: 22 říj 2007, 22:22
od Josef Chroustal
Já bych to řešil tak,že bych tu konkrétní tiskárnu připojil k PC.Naladil vše tak aby to tisklo tak jak chci.Programově odchytil data.Nasledně bych zjišťoval rychlosti a vše ostatní kolem toho.

Napsal: 23 říj 2007, 13:18
od jankop
To by nebylo účelné. Komunikace s běžnou tiskárnou je velmi primitivní a je dokonale popsána. Odeslat pár znaků je triviální úloha. Pro základní komunikaci je třeba 9 výstupních bitů a 1-2 vstupní.
Odešlu na výstup jeden byte dat a potvrdím ho signálem STROBE.
A čekám, až mi tiskárna potvrdí přijetí dat signálem ACKNLQ (nebo BUSY). Pak odesílám další byte. Ostatní signály mohu ignorovat.
Napsat rutinu pro tohle je otázkou několika řádků kódu. A pokud nechci tisknout obrázky, tak daty budou přímo ASCII kódy číslic. Nevím co řešíte.
Mimochodem, spoustu jehličkových tiskáren lze při zapnutí kombinací tlačítek převést do módu, kdy tiskárna tiskne hexa číslice všech kódů, které dostává. Pro ladění to není k zahození.

Napsal: 28 říj 2007, 11:04
od Jirka
Jak tím listuju, tak by to mělo jít jednoduše, na http://lpt.hw.cz/ je to pěkně popsané. Až mi přijdou objednané součástky, tak se do toho pustím.

Napsal: 24 lis 2007, 00:39
od Jirka
Tak jsem se k tomu konečně dostal a funguje to.

zapojení:

Kód: Vybrat vše

; PIC16F628 a krystal 4,00MHz
;
;**************************************************************************
;*                                  PIC16F628                             *
;*                             --------\/--------                         *
;*                vstup nACK  -|RA2          RA1|-  výstup STROBE         *
;*               vstup ERROR  -|RA3          RA0|-  vstup BUSY            *
;*                  tlacitko  -|RA4ck       osc1|-  \ Krystal 4,00MHz     *
;*                       +5V  -|MCLR        osc2|-  /                     *
;*                        0V  -|Vss          Vdd|-  +5V                   *
;*                data bit 0  -|RB0/INT  PGD/RB7|- data bit 7             *
;*                data bit 1  -|RB1      PGC/RB6|- data bit 6             *
;*                data bit 2  -|RB2          RB5|- data bit 5             *
;*                data bit 3  -|RB3          RB4|- data bit 4             *
;*                             ------------------                         *
;*                                                                        *
;**************************************************************************

Hexa kód znaku, který chci tisknout. vždy připravím do W a potom zvolám tuto rutinu:

Kód: Vybrat vše

odesli  movwf   PORTB           ;přesuň data na port
        btfsc   PORTA,0         ;kontrola BUSY, jestli je v 0
        goto    $-1             ;není v 0 -> vrať se
        bcf     PORTA,1         ;je v 0, shoď STROBE
        nop
        nop
        nop
        nop
        nop
        bsf     PORTA,1         ;nahoď STROBE
        btfss   PORTA,2         ;kontrola nACK, jestli je v 1   
        goto    $-1             ;není v 1 -> vrať se
        return                  ;je v 1, návrat pro další znak


Jen mi pořád vrtá hlavou, jestli správně kontroluji signál nACK, tedy ve správný okamžik. Jestli ho nekontroluji ještě předtím, než přejde do nuly, ale když jsem to zkoušel jako posloupnost nejdřive 0, pak 1, tak to netisklo. Signál ERROR zatím nevyužívám. To dodělám, až zase budu mít čas si s tím "hrát".

Napsal: 30 pro 2007, 21:38
od Atlan
skus definovat STROBE skor program bude prehladnejsi.... bcf strobe je lepsie ako bcf porta,1 s popisom

Napsal: 30 pro 2007, 23:08
od Jirka
To jsou detaily, každý je zvyklý na jiný způsob zápisu.
Jinak už testuju tisk i přes RS-232.