Étape 3: Routines de Code de base
Ce que je voulais faire était de lire les ROMs les chariots d’encre et les utiliser ensuite pour essayer d’imiter la cartouche d’encre manquant, que je n’ai pas. Cela signifie la création d’une bibliothèque qui agira comme un hôte pour lire les données, mais peut également être utilisé pour émuler une cartouche d’encre.Utilisation des connaissances préalables de la création de protocoles logiciels basés, j’ai créé un fichier d’en-tête avec ces fonctions :
• extern void epsnCartInit(void) ;
• extern void epsnCartStart (addr unsigned char, unsigned char écriture) ;
• extern void epsnCartStop(void) ;
• extern void epsnCartWrite (données unsigned char) ;
• extern unsigned char epsnCartRead(void) ;
J’ai également créé les définitions suivantes qui aident à se souvenir de quel code pin ce qui a été :
Pour vous le microcontrôleur, vous devez modifier ces valeurs pour convenir à votre application
#define _ecSCKTRIS TRISCbits.TRISC0 #define _ecSCKLat LATCbits.LATC0 #define _ecSCK PORTCbits.RC0 wait() #define 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
Remarque : J’ai utilisé un PIC18F et loquets pour définir les sorties, c’est juste ma préférence au choix. Nous vous invitons à utiliser n’importe quel microcontrôleur avec que vous êtes familier.
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 fonction de démarrage tire la DMV haute, attend, puis définit la SDA selon le bit de l’adresse ainsi que la SCK. Attend, tire SCK faible, attend encore une fois et puis tire SDA haute en conséquence à l’adresse. Ceci répète 2 fois plus sauf sur la 4ème fois, SDA a la valeur faible parce que nous voulons lire que les données dans les EEPROMs pas écrire.
void epsnCartStart (addr unsigned char, unsigned char write) {} _ecVDDLat = 1 ; Définir la DMV haute tmp = addr ; Copiez l’adresse dans la variable temp
char i = 0 ; Utilisé pour le comptage
char tmp = 0; / / Temp variable de stockage
DelayMS(1) ; Attendez que l’EEPROM pour se préparer
_ecRSTLat = 1 ; Activez l’EEPROM pour la communication
if(Write) {/ / si nous voulons écrire
Temp | = 0 x 08 ; définir la 4e peu élevé (' |' signifie ou)
}
while(i<4) {}
_ecSDALat = (tmp & 0 x 01) ; SDA haute ou basse selon le LSB
Wait() ; Attendre environ 50uS
_ecSCKLat = 1 ; Ensemble horloge haute
Wait() ; Attendre un autre 50uS
_ecSCKLat = 0 ; Réglage de l’horloge faible
Wait() ; Attendre un autre 50uS
tmp >> = 1 ; Juste passer tous les bits dans tmp par un
i ++ ; incrémenter le compteur par un
}
}
La fonction suivante pour implémenter est stop :
void epsnCartStop() {}
_ecRSTLat = 0 ; SET RST faible
DelayMS(1) ; Attendre un peu
_ecVDDLat = 0 ; Désactiver les EEPROMS
}
Et enfin la fonction de lecture : while(i<8) {} i ++ ; Incrémenter le compteur de 1
unsigned char epsnCartRead() {}
char i = 0 ;
temp de char = 0 x 00 ;
Temp >> = 1 ; Décalage vers la droite la variable temp par un
_ecSCKLat = 1 ; attachées haut SCK
Wait() ; Attendre environ 50uS
if(_ecSDA) {/ / si SDA est élevé
Temp | = 0 x 80 ; Puis ensemble bit 7 haut
}
_ecSCKLat = 0 ; Ramènerai SCK faible
Wait() ; attendre un autre 50uS
}
Return temp ; Revenir à ce que nous avons lu
}
Nous avons maintenant les fonctions de base qu’il faut lire des données dans les cartouches d’encre, permet de configurer notre microcontrôleur et les résultats.