Nous reprogrammons le caissier et imprimons dessus Keanu Reeves

Bonjour, Habr!

Une fois que j'avais un «travail» - il fallait gérer la caisse enregistreuse Shtrikh-FR-K. Depuis que ma carrière a commencé avec la réparation de KKT, j'ai décidé de reprendre ce travail.

image

Voici à quoi ressemble le box-office lui-même et l'image d'essai de mon collègue:

image

De plus, après le contrôle des moteurs et de la tête thermique de l'appareil, j'ai dû écrire un petit script python en utilisant la bibliothèque OpenCV. Alors allons-y.

Tout a commencé avec l'étude de rem. quai. à cette caisse et la connexion ultérieure de l'analyseur logique aux broches de la tête thermique. J'ai envoyé la lettre «C» pour imprimer à travers un test de barre. Et voici ce que j'ai obtenu:

image

Selon DATA, la valeur des points (432 points par ligne), SCK - signal d'horloge, STB0, STB1, STB2 - stroboscopes pour chauffer la tête thermique, LATCH - verrou de données. J'ai enfoncé une ligne dans le registre à décalage, je l'ai brûlé, j'ai continué.

L'étape suivante consistait à finaliser le conseil d'administration pour accélérer le processus de développement.

image

Passons maintenant au code.

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; } } 

Il existe deux circuits de commande de moteur pas à pas pour ce box-office. 4 étapes et 8 étapes. J'ai choisi 8 car les moteurs fonctionnaient mieux.

 #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); } 

Code d'envoi de données à la tête thermique. La tête thermique fonctionne comme un registre à décalage. Comment cela fonctionne, j'ai écrit ci-dessus.

 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); } 

La fonction d'impression et de gravure des lignes.

 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); } } 

La fonction principale qui tourne dans le fichier éternel. Lorsque la lettre «P» entre, j'active le mode d'impression. De plus, tous les autres caractères commencent à être saisis dans le tampon. De plus, lorsque le tampon est emballé avec 54 octets (ou 432 bits), nous imprimons la ligne et envoyons le mot IMPRIMÉ via USART.
Eh bien, c'est tout avec la partie en fer. Dans la partie suivante, j'écrirai sur la partie logicielle, à savoir sur le programme en python. Sources .

image

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


All Articles