Kartuş ve yazıcılar

Başlatan yldzelektronik, 15 Mayıs 2013, 21:16:22

yldzelektronik

Selamlar.

Bugün elime bir şekilde bir yazıcının kartuş kısmı geçti.Gördüğüm kadarıyla 18 pin ile yazıcı kartuşu kontrol ediyor.Ancak hangi pin nedir ne değildir,neyi kontrol ediyor bilmiyorum.Bu konuda bilgisi olan var mı?

Bu kartuşların belirli bir haberleşme protokolleri mi vardır?Her firma kendi standardını mı oluşturur?Haberleşme nasıl işliyor?

Not: Benim ihtiyacım olan hp nin kartuşları.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Kabil ATICI

En az ikisi termal direnç bacağıdır. Diğerleri muhtemelen multiplex olarak sürülüyor. Birkaç tanesi GND olarak tanımlanır. Bir bölümü adres, bir pölümü primitive diye tanımlanan bacaklardır. 18 bacak çok az...
Seri olarak sürülüyor bile olabilir.

HP için
26A diye tanımlananlar her bir bacak bir direnç sürüyordu. 48 püskürtme deliği
45A serisinde 22 adres,14 primitive vardı. 300 püskürtme deliği
300 serisi  400 küsür püskürtme deliği vardıki ben bundan sonra koptum...
Yeni kartuşları hiç tanımıyorum...
Diğer yazıcı üreticilerinki model ve yazıcısına göre değişiyor...


ambar7

yldzelektronik

Yalnız bu bahsettiğim 18 pin kartuşların takıldığı gövdenin arkasındaki flat kablodaki sayı.?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Kabil ATICI

Önce kartuşun ağız kısmına bir büyüteçle bakmaya çalış görebilirsen delik sayısına bak. Çünkü kaç taneli püskürtme deliği olduğu önemlidir.

Bu tür sistemi anlamak için doğrudan yazıcı üzerindeki kafaya bakılıyor. Yazıcının gnd'si konumunda bağlantı noktasına göre GND bağlantısı bulunuyor.
Sonrası daha kolay;
kafa üzerine yassı kablolar (bilgisayar hd kablosu) ile bağlantılar yapılır ve yazıcı çalışırken bu bağlantılar izlenir.
Artık sinyaller ne olursa...

Birde adresleme kullanılırsa bunlarda yaklaşık 10K gibi direnç ile birlikte esd diyodu vardır. (paralel) GND ile adresleme bacağında görülebilir. Primitive ise bildiğim kadarı ile esd diyodu olması lazım.

Tabii bu kartuş böyledir diyemiyorum.. Patentleri bir araştır belki patentini almışlardır... İsmi farklı olabilir.
ambar7

vedo35

#4
ben yazici kafalarla bayagi hasir nesir olmustum bir ara hp, canon, epson her markadan elimden geldi gecti. Eski modellerin pin outlari ve thermal inkjet printer driver diye googleda aratin birseyler bulursunuz.
Mesela:

http://www.datasheetarchive.com/inkjet%20print%20head%20driver-datasheet.html

burdada birseyler var
http://spritesmods.com/?art=inker&page=2
Biliyormusun dedi, ben ne yaptiysam kader icabi yaptim dedi. Ben gene sustum.... Kimbilir sende belki kaderin memurusun vazifeni yapiyorsun dedi.

z

Bazen forumda soruluyor; bitirme projemi seçmekte yardımcı olurmusunuz?

Al bir tane inkjet yazıcı, sök ve kır at elektronik kartını. Kalsın motorlar, sensörler ve kafa.

Tasarla yeni baştan bir kart. Printeri çalışır hale getir.

Çok mu abarttım?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yldzelektronik

Alıntı yapılan: z - 16 Mayıs 2013, 02:33:06
Bazen forumda soruluyor; bitirme projemi seçmekte yardımcı olurmusunuz?

Al bir tane inkjet yazıcı, sök ve kır at elektronik kartını. Kalsın motorlar, sensörler ve kafa.

Tasarla yeni baştan bir kart. Printeri çalışır hale getir.

Çok mu abarttım?

Ne yazık ki. :S Ama konu bu değil.

Gördüğüm kadarıyla iş aslında basitmiş.EN azından hard seviyede zor gözükmedi.

@vedo35

Bu konuda verebileceğin başka bilgiler var mı?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

yldzelektronik

Bir kaç bir şeyler buldum.Bazı şeyler daha netleşti.Ancak atmel ile yazılmış bazı kodlar var.Ben pek bir şey anlamadım.Kodları çevirmem için yardım edebilir misiniz?C'ye çevirsek de olur.
;Inker.asm: firmware to drive a HP model 40 inkjet cartridge.
;This software is licensed under the GNU GPL.
;(c) 2006 Jeroen Domburg

;If you want to adjust the text this device prints, look at the bottom
;of this file.

;We're using a tiny2313 here.
.device ATTiny2313
;You might want to include the ATTiny2313-definitions included with
;your assembler. I use gavrasm, which doesn't need them.
;.include "tn2313def.inc"

;The fuses should be configured as follows:
;FUSE_L=0xc4
;FUSE_H=0xdf

;Timing variables. Play with this to maximize the contrast of the output

;The duration any nozzle is activated. Pick this too short and some nozzles
;won't shoot. Pick this too long and the DC/DC-converter won't be able to
;keep up.
.equ TIMESHOOT      = 15
;Cooling time. Longer = lighter output, shorter = more power usage, which again
;can mean the DC-DC-converter can't keep up.
.equ TIMECOOL       = 30
;Dots per pixel. Higher number = text takes longer to be completely written. If
;you adjust the speed you pull the nozzle over the paper accordingly, the output
;will become more dense.
.equ DOTSPERPIXEL   = 12
;If this value is 1, the pwm generator will be turned off when printing a space.
;If this value is 0, the pwm generator will continue running. Make this 0 when
;there are large number of spaces next to eachother in the text.
.equ PWMOFFWHENSPACE    = 0

.def dat    =   r0  ;Data from an lpm instruction ends up here
.def temp   =   R16     ;The temp register
.def temp2  =   R17     ;Second temp register
.def temp3  =   R18
.def row1   =   r21
.def row2   =   r22
.def row3   =   r23
.def row4   =   r24
.def textpos    =   r25
.def charpos    =   r26
.def zlo    =   r30
.def zhi    =   r31


    rjmp start      ; reset vector
    reti            ; External Int 0 not enabled
    reti            ; External Int 1 not enabled
    reti            ; Timer 1 Capture Int not enabled
    reti            ; Timer 1 Compare match A Int not enabled
    reti            ; Timer 1 Overflow Int not enabled
    reti            ; Timer 0 Overflow Int not enabled
    reti            ; UART ReceiveInt
    reti            ; UART Date Reg Empty Int not enabled
    reti            ; UART tx'ed Int Not enabled
    reti            ; Anacomp interrupt Not enabled


start:
    ldi temp,RAMEND     ; top of memory
    out SPL,temp        ; init stack pointer
    ldi temp,$ff        ; Port B direction options
    out DDRB,temp       ; Setup port direction
    ldi temp,0b100110   ; Port D direction options
    out DDRD,temp       ; Setup port direction
    ldi temp,$11        ; Port A direction options
    out DDRA,temp       ; Setup port direction
    
    
    ;Set up timer 0 as a pwm generator to drive the DC-DC-converter
    ldi temp,0b100011
    out tccr0a,temp
    ldi temp,0b01
    out tccr0b,temp
    ldi temp,$20
    out ocr0b,temp

vast:
    ;Reset textpos and charpos so the next code will pick up the first char
    ldi textpos,0
    ldi charpos,9
loop:
    inc charpos ;Next column of the character
    cpi charpos,10  ;Final row?
    brne nonewchar  ;No -> skip the next part
    
    ldi charpos,0   ;reset charpos

    ;put the position of the next character in z
    ldi zlo,low(text*2)
    ldi zhi,high(text*2)
    ldi temp,0
    add zlo,textpos
    adc zhi,temp
    inc textpos ;we're at the next character now
    lpm     ;get the ascii value
    cp temp,dat ;=0? (signals end of string)
    breq vast   ;Yep -> restart from the beginning
    ldi temp2,32    ;Character data starts from ascii 32
    sub dat,temp2

;This might not work with your assembler. Just comment out the if
;and endif if that's the case.
.if (PWMOFFWHENSPACE==1)
    ;Re-enable pwm generator
    ldi temp2,0b01
    out tccr0b,temp2
    ldi temp2,0 ;Char is space?
    cp dat,temp2
    brne notspace
    ;Yep -> disable pwm-gen to save power and keep the voltage from 
    ;rising too high
    ldi temp2,0b01000000
    out tccr0b,temp2
notspace:
.endif
    
    ;Character row-data is at z+dat*8
    ldi zlo,low(font*2)
    ldi zhi,high(font*2)
    ;dat*8
    lsl dat
    rol temp
    lsl dat
    rol temp
    lsl dat
    rol temp
    ;z=z+dat*8
    add zlo,dat
    adc zhi,temp
nonewchar:
    ;We'll need to get the next column of character data
    ldi temp,0
    cpi charpos,8   ;charpos>8?
    brsh emptyline  ;Yep -> we're in the inter-character-blank space.
        lpm     ;Get char column data
    mov temp,dat
    adiw zlo,1  ;Select next column
emptyline:
    ;Fill the row data according to the character. This just assigns
    ;4 nozzles to each bit in the column data.
    ldi row1,0
    ldi row2,0  
    ldi row3,0  
    ldi row4,0  
    sbrc temp,0
     ori row1,$0f
    sbrc temp,1
     ori row1,$f0
    sbrc temp,2
     ori row2,$0f
    sbrc temp,3
     ori row2,$f0
    sbrc temp,4
     ori row3,$0f
    sbrc temp,5
     ori row3,$f0
    sbrc temp,6
     ori row4,$0f
    sbrc temp,7
     ori row4,$f0

    ;Send the column data
    rcall sendmul
    rjmp loop


    ;Send the nozzle data DOTSPERPIXEL times, so the output won't be so compressed
sendmul:
    ldi temp,DOTSPERPIXEL
sendmul1:
    push temp
    rcall sendthis
    pop temp
    dec temp
    brne sendmul1
    ret
    
    ;Send the data in the row registers one time.
sendthis:
    ldi temp2,1 ;Select 1st nozzle
sendnext:
    mov temp,row1   ;Sector data
    and temp,temp2  ;Mask the selected nozzle
    out portb,temp  ;and enable it
    sbi portd,1 ;Enable sector 1
    rcall waitnozzle ;wait for the drop to fire
    cbi portd,1 ;disable sector 1
    rcall waitcool  ;and wait for the nozzle to cool.

    ;Same with sector 2 to 4.
    mov temp,row2
    and temp,temp2
    out portb,temp
    sbi porta,1
    rcall waitnozzle
    cbi porta,1
    rcall waitcool
    
    mov temp,row3
    and temp,temp2
    out portb,temp
    sbi porta,0
    rcall waitnozzle
    cbi porta,0
    rcall waitcool

    mov temp,row4
    and temp,temp2
    out portb,temp
    sbi portd,2
    rcall waitnozzle
    cbi portd,2
    rcall waitcool

    lsl temp2   ;Next nozzle
    cpi temp2,0 ;All nozzles done?
    brne sendnext   ;No -> loop.

    ;Check and adjust the pwm value according to the output of the dc-dc converter.
    in temp,ocr0b   ;get current pwm value
    subi temp,2 ;assume it's too high
    sbis pind,6 ;>20V?
     subi temp,-4   ;Yep -> cancel the assumed value and add 2.
    cpi temp,$f0    ;Underflow?
    brlo noudf  ;Nope -> skip
    ldi temp,0  ;Undo underflow
noudf:
    cpi temp,$50    ;Overflow?
    brlo noovf  ;Nope -> skip
    ldi temp,$50    ;Undo overflow
noovf:
    out ocr0b,temp  ;and set the pwm value

    ret ;end of the routine :)

;Loop to wait for the nozzle to cool
waitcool:
    push temp
    ldi temp,TIMECOOL
cwait:
    nop
    dec temp
    brne cwait
    pop temp
    ret

;Loop to wait while the nozzle is firing.
waitnozzle:
    push temp
    ldi temp,TIMESHOOT
nwait:
    dec temp
    brne nwait
    pop temp
    ret

;The text the unit sends. Don't forget the ",0 on the end.
text:
    .db "http://www.elektuur.nl/         ",0
    
;Include the font file.
font:
.include "font8x8nr.inc" ;8x8 font


Burada da kod tablosu gibi bir şey var.

;This font is adapted from the font_pearl_8x8.c-file in the Linux-kernel, and
;as such licensed under the GPL. Original header:
;/**********************************************/
;/*                                            */
;/*       Font file generated by cpi2fnt       */
;/*       ------------------------------       */
;/*       Combined with the alpha-numeric      */
;/*       portion of Greg Harp's old PEARL     */
;/*       font (from earlier versions of       */
;/*       linux-m86k) by John Shifflett        */
;/*                                            */
;/**********************************************/
;This font contains the characters from 32 (space) to 128. The rest is trimmed
;to fit the uC.

    .db 0,0,0,0,0,0,0,0
    .db 0,0,0,28,190,190,28,0
    .db 0,0,6,6,0,6,6,0
    .db 40,40,254,254,40,254,254,40
    .db 0,0,72,92,214,214,116,36
    .db 140,140,204,96,48,24,204,196
    .db 96,96,252,158,178,110,244,144
    .db 0,0,0,8,14,6,0,0
    .db 0,0,0,56,124,198,130,0
    .db 0,0,0,130,198,124,56,0
    .db 16,16,84,124,56,56,124,84
    .db 0,0,16,16,124,124,16,16
    .db 0,0,0,0,192,192,0,0
    .db 0,0,16,16,16,16,16,16
    .db 0,0,0,0,192,192,0,0
    .db 128,128,192,96,48,24,12,6
    .db 124,124,254,178,186,154,254,124
    .db 0,0,4,4,254,254,0,0
    .db 132,132,198,226,178,154,142,132
    .db 68,68,198,130,146,146,254,108
    .db 48,48,56,44,38,254,254,32
    .db 78,78,206,138,138,138,250,114
    .db 120,120,252,150,146,146,240,96
    .db 2,2,194,226,50,26,14,6
    .db 108,108,254,146,146,146,254,108
    .db 12,12,30,146,146,210,126,60
    .db 0,0,0,0,204,204,0,0
    .db 0,0,0,0,204,204,0,0
    .db 0,0,16,56,108,198,130,0
    .db 0,0,72,72,72,72,72,72
    .db 0,0,0,130,198,108,56,16
    .db 0,0,4,6,162,178,30,12
    .db 124,124,254,130,186,186,190,60
    .db 240,240,248,44,38,44,248,240
    .db 254,254,254,146,146,146,254,108
    .db 124,124,254,130,130,130,198,68
    .db 254,254,254,130,130,130,254,124
    .db 254,254,254,146,146,146,130,130
    .db 254,254,254,18,18,18,2,2
    .db 124,124,254,130,130,146,246,116
    .db 254,254,254,16,16,16,254,254
    .db 0,0,130,130,254,254,130,130
    .db 96,96,224,128,128,128,254,126
    .db 254,254,254,16,56,108,198,130
    .db 254,254,254,128,128,128,128,128
    .db 254,254,252,24,48,24,252,254
    .db 254,254,254,12,24,48,254,254
    .db 124,124,254,130,130,130,254,124
    .db 254,254,254,18,18,18,30,12
    .db 124,124,254,162,226,194,254,124
    .db 254,254,254,18,50,114,222,140
    .db 68,68,206,154,146,178,230,68
    .db 0,0,2,2,254,254,2,2
    .db 126,126,254,128,128,128,254,126
    .db 6,6,30,120,224,224,120,30
    .db 254,254,254,96,48,96,254,254
    .db 130,130,198,108,56,56,108,198
    .db 6,6,14,24,240,240,24,14
    .db 130,130,194,226,178,154,142,134
    .db 0,0,0,254,254,130,130,0
    .db 2,2,6,12,24,48,96,192
    .db 0,0,0,130,130,254,254,0
    .db 16,16,24,12,6,12,24,16
    .db 0,0,0,0,0,0,0,0
    .db 0,0,0,0,6,14,8,0
    .db 64,64,232,168,168,168,248,240
    .db 254,254,254,136,136,136,248,112
    .db 112,112,248,136,136,136,216,80
    .db 112,112,248,136,136,136,254,254
    .db 112,112,248,168,168,168,184,48
    .db 16,16,252,254,18,2,6,4
    .db 48,48,120,72,72,72,248,248
    .db 254,254,254,8,8,8,248,240
    .db 0,0,0,8,250,250,0,0
    .db 128,128,128,0,0,0,250,250
    .db 254,254,254,32,112,216,136,0
    .db 0,0,0,2,254,254,0,0
    .db 248,248,248,24,48,24,248,240
    .db 248,248,248,8,8,8,248,240
    .db 112,112,248,136,136,136,248,112
    .db 248,248,248,72,72,72,120,48
    .db 48,48,120,72,72,72,248,248
    .db 248,248,248,16,8,8,24,16
    .db 144,144,184,168,168,168,232,72
    .db 0,0,8,126,254,136,200,64
    .db 120,120,248,128,128,128,248,120
    .db 56,56,120,192,128,192,120,56
    .db 120,120,248,192,96,192,248,120
    .db 136,136,216,112,32,112,216,136
    .db 8,8,24,176,224,96,48,24
    .db 136,136,200,232,168,184,152,136
    .db 0,0,16,16,124,238,130,130
    .db 0,0,0,0,254,254,0,0
    .db 0,0,130,130,238,124,16,16
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Kabil ATICI

bunun sizin aradığınız kartuşla ilgili olduğuna emin misiniz?
HP 40 kartuşlara ait bir kod..Elektor dergisinde yayınlanmıştı... Ve kartuşun tüm bacaklarını kullanmıyor...

Yalnız asm'yi c'ye çevirdiğinde zamanlamaların yeterince kesin olması durumunu nasıl halletmeyi düşünüyorsun?

Çünkü kartuşun püskürtme direncini fazla ısıtırsan yanar. Hatta bağlı olduğu mosfeti de yakar.
ambar7

yldzelektronik

Aslına bakarsan ben bu kodu kendi projem için kullanmayacağım.Sadece örnek bir kod olması açısından, anlayabileceğim bir dil olması,referans olması açısından çevirmek istiyorum.Aradığım HP'nin en büyük olan tonerlerinden.1 lt lik olan varmış.Emin değilim sadece aldığım duyuma göre konuştum.En uygun kartuşu bulur, pinoutunu araştırır bir şekilde elde edebilirsem bu kodu ve kartuşu referans alarak bir şeyler yapabilirim diye düşündüm.Yanlış mı düşündüm :( ?
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

z

Bu 1 Lt lik kartuşla ilgili link varmı?  Bulursan buraya da yazarmısın?
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

yldzelektronik

Alıntı yapılan: z - 16 Mayıs 2013, 12:07:06
Bu 1 Lt lik kartuşla ilgili link varmı?  Bulursan buraya da yazarmısın?

Bulabilsem zaten güzel olacak ancak bulamıyorum ve işin kötü yanı aldığım duyumdan da şüphe etmeye başladım.
Kişinin başına gelen hayır Allah'tandır. Kişinin başına gelen şer nefsindendir. Nefislerimizle kendimize zulüm ediyoruz.

Kabil ATICI

#12
Sanırım tanklı ürünlerden birinden söz ediyorsun. O kartuşun bacak bağlantıları baya farklıdır. Kartuşun altına bak, püskürtme deliklerine.
Aslında büyük fark olabilir. Çünkü buradaki kartuş primitive ve adres olarak çalışan bir model.

(mesela 45A ve 29A kartuşlar gibi)

Kartuşun yazdırma mantığı aslında doğrudan  kayan yazı mantığına benzer.(ve şu havaya yazı yazan sistemlerin)  Sadece her seferinde sadece bir deliğin püskürtmesi gerekir. (güç sorunu nedeniyle). O nedenle yazı yazarken bir sıranın tamamlanması için kartuş bir süre için yerinde durur. (Biz göremesekde) Yada bu hareketi tolere edecek şekilde püskürtme dengelenir. Kartuşun altında 2-4 sıra arasında değişen delikler vardır ki bunların hareket esnasında aynı hizaya gelecek şekilda baskı yapmaları gerekir.

Burada belirlemen gereken püskürtme için kaç volt gerekiyor (ne kadar amper), ne kadar süre ile akım uygulanıyor ,püskürtme delikleri nasıl adresleniyor?
Püskürtme delikleri içinda alüminyum-tantal alaşımı ısıtma dirençleri var bunlar fazla ısıtılırsa veya mürekkep yokken ısıtılırsa yanar.

Tabi yine de çalışmana mani olmayayım..

O modeler plotter tipi yazıcılarda kullanılıyordu yanlış hatırlamıyorsam 650ml civarında olması lazım... (yenileri çıkmadıysa)
ambar7

z

Benim elimde 30'a yakın kutusunda açılmamış inkjet türü yazıcı kartuşu var. Zamanında alınmış ancak yazıcıları tarih olmuş, bozulmuş sadece kartuşları kalmış. Atmaya kıyamadığım için saklıyorum ve arada bir çalışma yaparmıyım diye bakıyorum.

Ancak detayları bilmediğim için kolumu kımıldatmıyorum. Inkjet proje linkleri varsa bilmek isterim.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

diot

@Z son kullanma tarihlerine baktınmı ?.