Paso 3: Rutinas de código básico
Lo que quería hacer era leer las ROMs de los carros de tinta y luego los use para tratar de emular el falta cartucho de tinta que no tengo. Esto significa crear una biblioteca que actuará como anfitrión para leer los datos pero también puede utilizarse para emular un cartucho de tinta.Utilizando el conocimiento previo de la creación de protocolos de software de base, crea un archivo de encabezado con estas funciones:
• extern void epsnCartInit(void);
• extern void epsnCartStart (addr unsigned char, unsigned char escritura);
• extern void epsnCartStop(void);
• extern void epsnCartWrite (datos unsigned char);
externo • unsigned char epsnCartRead(void);
También he creado las siguientes definiciones que ayudan con recordar que pin era lo que:
Microcontrolador, necesita modificar estos valores para su aplicación
#define _ecSCKTRIS TRISCbits.TRISC0 #define _ecSCKLat LATCbits.LATC0 #define _ecSCK PORTCbits.RC0 #define wait() DelayUS(50)
#define _ecSDATRIS TRISCbits.TRISC1
#define _ecRSTTRIS TRISCbits.TRISC2
#define _ecVDDTRIS TRISBbits.TRISB1
#define _ecSDALat LATCbits.LATC1
#define _ecRSTLat LATCbits.LATC2
#define _ecVDDLat LATBbits.LATB0
#define _ecSDA PORTCbits.RC1
#define _ecRST PORTCbits.RC2
#define _ecVDD PORTBbits.RB1
Nota: Utiliza un PIC18F y cierres para ajuste de las salidas, es sólo mi preferencia en la elección. Le invitamos a utilizar cualquier microcontrolador con que está familiarizado.
void epsnCartInit() {} _epsnCartSCK = 0; _epsnCartSCKLat = 0;
_epsnCartSCKTRIS = 0;
_epsnCartSDATRIS = 0;
_epsnCartRSTTRIS = 0;
_epsnCartVDDTRIS = 0;
_epsnCartSDA = 0;
_epsnCartRST = 0;
_epsnCartVDD = 0;
_epsnCartSCKLat = 0;
_epsnCartSCKLat = 0;
_epsnCartSCKLat = 0;
}
La función de inicio tira VDD alto, espera y luego establece SDA según el bit de dirección así como el SCK. Espera, tira SCK baja, espera otra vez y luego tira SDA alta en consecuencia a la dirección. Esto repite 2 veces más excepto en el 4 º tiempo, SDA se encuentra bajo porque queremos leer que no escriben los datos de las EEPROMs.
{} void epsnCartStart (unsigned char addr, char sin signo de escritura) _ecVDDLat = 1; Set VDD alto tmp = addr; Copia la dirección en la variable temp
char i = 0; Utilizado para el recuento de
char tmp = 0; / / Temp variable de almacenamiento
DelayMS(1); Espere las EEPROMs para prepararse
_ecRSTLat = 1; Habilitar el EEPROMs para la comunicación
if(write) {/ / si nos quiere escribir
Temp | = 0x08; establecer el bit 4 de alto (' |' significa o)
}
while(i<4) {}
_ecSDALat = (tmp & 0 x 01); SDA alta o baja según el LSB
Wait(); Espere aproximadamente 50uS
_ecSCKLat = 1; Conjunto de reloj de alta
Wait(); Esperar otro 50uS
_ecSCKLat = 0; Reloj bajo
Wait(); Esperar otro 50uS
tmp >> = 1; Derecho uno desplaza todos los bits en tmp
i ++; incrementar el contador en uno
}
}
La siguiente función a implementar es parada:
void epsnCartStop() {}
_ecRSTLat = 0; SET RST bajo
DelayMS(1); Esperar un poco
_ecVDDLat = 0; Apague el EEPROMS
}
Y por último la función de leer: while(i<8) {} i ++; Incrementar el contador en 1
unsigned char epsnCartRead() {}
char i = 0;
char temp = 0 x 00;
Temp >> = 1; Derecho uno cambiar la variable temp
_ecSCKLat = 1; SCK alto
Wait(); Espere aproximadamente 50uS
if(_ecSDA) {/ / SDA si es alta
Temp | = 0 x 80; Entonces set bit 7 alta
}
_ecSCKLat = 0; Traer SCK baja otra vez
Wait(); esperar otro 50uS
}
devolver a temp; Devolver lo que hemos leído
}
Ahora tenemos las funciones básicas que necesitamos para leer datos de los cartuchos de tinta, permite configurar nuestro microcontrolador y establecer los resultados.