Kami memprogram ulang kasir dan mencetaknya Keanu Reeves

Halo, Habr!

Setelah saya memiliki "pekerjaan" - perlu mengatur kasir Shtrikh-FR-K. Sejak karir saya dimulai dengan perbaikan KKT, saya memutuskan untuk mengambil pekerjaan ini.

gambar

Beginilah tampilan box office dan gambar percobaan rekan saya:

gambar

Juga, melewati kontrol mesin dan kepala termal di perangkat, saya harus menulis skrip python kecil menggunakan perpustakaan OpenCV. Jadi ayo pergi.

Semuanya dimulai dengan studi rem. berlabuh. ke meja kas ini dan koneksi selanjutnya dari penganalisis logika ke pin kepala termal. Saya mengirim huruf "C" untuk mencetak melalui tes batang. Dan inilah yang saya dapat:

gambar

Menurut DATA, nilai poin (432 poin per baris), sinyal SCK - clock, STB0, STB1, STB2 - strobe untuk memanaskan kepala termal, kait data LATCH -. Saya mengendarai garis ke register geser, membakarnya, melanjutkan.

Langkah selanjutnya adalah menyelesaikan papan untuk mempercepat proses pengembangan.

gambar

Sekarang mari kita beralih ke kode.

void go(int n, int shag) { switch (shag) { case 0: PORTA=0b10001000; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 1: PORTA=0b10101010; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 2: PORTA=0b00100010; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 3: PORTA=0b01100110; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 4: PORTA=0b01000100; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 5: PORTA=0b01010101; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 6: PORTA=0b00010001; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; case 7: PORTA=0b10011001; PORTD|=(1<<2); dela(n); PORTD&=0b11111011; PORTA=0; PORTD|=(1<<2); PORTD&=0b11111011; break; } } 

Ada dua sirkuit kontrol motor stepper untuk box office ini. 4 langkah dan 8 langkah. Saya memilih 8 karena mesinnya bekerja lebih baik.

 #define DATA 2 #define SCK 1 #define LATCH 3 #define STB0 2 #define STB1 3 #define STB2 4 #define DATA_IN PORTB #define STB_IN PORTE int sck() { _delay_us(3); DATA_IN|= (1<<SCK); DATA_IN&= 0b11111101; } int x; int bit; void bait(int bait1) { x=0; while(x<8) { bit|= (1<<x); bit =bait1&bit; if (bit>0) { DATA_IN|=(1<<DATA); } else {DATA_IN&=0b11111011;} sck(); x++; } } void latch() { DATA_IN&=0b11110111; DATA_IN|=(1<<LATCH); } 

Kode untuk mengirim data ke kepala termal. Kepala termal berfungsi sebagai register geser. Cara kerjanya, saya tulis di atas.

 void print_all_pixel() { while(n<55) { print_stroka(str[n]); _delay_us(3); n++; } latch(); n=0; STB_IN&=0b11111011; _delay_us(500); STB_IN|=(1<<STB0); STB_IN&=0b11110111; _delay_us(500); STB_IN|=(1<<STB1); STB_IN&=0b11101111; _delay_us(500); STB_IN|=(1<<STB2); //vpered(300); //n=0; //_delay_ms(100); //vpered(100); } 

Fungsi mencetak dan membakar garis.

 void recieve() { ///while(f); if ((com==0x50)&&(rezhim==0))/// P { //USART_Transmit('X'); com=0; USART_Transmit('B'); rezhim=1; } if ((rezhim==1)&&(send!=0)) { str[iFF]=com; send=0; iFF++; if (send == 1) { USART_Transmit('B'); } if (iFF==54) { USART_Transmit('P'); USART_Transmit('R'); USART_Transmit('I'); USART_Transmit('N'); USART_Transmit('T'); USART_Transmit('E'); USART_Transmit('D'); PORTB|=1<<0; _delay_ms(1); print_all_pixel(); //print_all_pixel(); go1(1500,ggg); rezhim=0; iFF=0; ggg++; if (ggg==8) { ggg=0; } } } if ((com==0x52)&&(rezhim==0))///R { com=0; go1(1000,ggg); rezhim=0; iFF=0; ggg++; if (ggg==8) { ggg=0; } USART_Transmit('O'); USART_Transmit('K'); //vpered(300); } } 

Fungsi utama yang berputar dalam file abadi. Ketika huruf "P" masuk, saya mengaktifkan mode cetak. Selanjutnya, semua karakter lain mulai diketik ke dalam buffer. Selanjutnya, ketika buffer dikemas dengan 54 byte (atau 432 bit), maka kami mencetak baris dan mengirim kata DICETAK melalui USART.
Ya, itu saja dengan bagian besi. Pada bagian selanjutnya saya akan menulis tentang bagian perangkat lunak, yaitu tentang program dengan python. Sumber .

gambar

Source: https://habr.com/ru/post/id465867/


All Articles