Stap 3: Basic-Code Routines
Wat ik wilde doen was voorgelezen aan de ROMs van de inkt karren en die vervolgens te gebruiken om te proberen te emuleren de ontbrekende inktcartridge, die ik heb geen. Dit betekent het creëren van een bibliotheek die zal fungeren als een host om de gegevens te lezen maar kan ook worden gebruikt om te emuleren een inktcartridge.Voorkennis van het creëren van software gebaseerde protocollen gebruikt, ik heb een headerbestand gemaakt met deze functies:
• extern nietig epsnCartInit(void);
• extern void epsnCartStart (unsigned char addr, unsigned char schrijven);
• extern nietig epsnCartStop(void);
• extern void epsnCartWrite (unsigned char gegevens);
• extern unsigned char epsnCartRead(void);
Ik heb ook de volgende definities die helpen met onthouden welke pin was wat gemaakt:
Voor u microcontroller moet u deze waarden aanpassen aan uw toepassing wijzigen
#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
Opmerking: Ik gebruikte een PIC18F en hendels voor het instellen van de uitgangen gebruikt, het is gewoon mijn voorkeur in keuze. U bent welkom om het gebruik van een microcontroller die u bekend met bent.
ongeldig 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;
}
De functie start trekt VDD hoog, wacht en SDA ingesteld volgens de adres bits evenals SCK. Wacht, trekt SCK lage, wacht nog eens en dan trekt SDA hoge dienovereenkomstig naar het adres. Dit 2 keer behalve op de 4de keer wordt herhaald, SDA ligt laag omdat we willen lezen dat de gegevens in de EEPROMs niet schrijven.
VOID epsnCartStart (unsigned char addr, unsigned char schrijven) {} _ecVDDLat = 1; Instellen van VDD hoge tmp = addr; Kopieer het adres in de temp-variabele
char i = 0; Gebruikt voor het tellen van
char tmp = 0; / / opslag variabele Temp
DelayMS(1); Wachten op de EEPROMs om klaar
_ecRSTLat = 1; Inschakelen van de EEPROMs voor communicatie
if(write) {/ / als we willen schrijven
Temp | = 0x08; Stel de 4de bit hoge (' |' betekent of)
}
while(i<4) {}
_ecSDALat = (tmp & 0x01); SDA hoge of lage volgens de LSB
wait(); Wacht ongeveer 50uS
_ecSCKLat = 1; Set Clock hoge
wait(); Wacht een andere 50uS
_ecSCKLat = 0; Klok instellen laag
wait(); Wacht een andere 50uS
tmp >> = 1; Rechts verschuiven alle bits in tmp door een
i ++; de teller verhogen met één
}
}
De volgende functie uit te voeren is stop:
ongeldig epsnCartStop() {}
_ecRSTLat = 0; Stel de eerste laag
DelayMS(1); Een beetje wachten
_ecVDDLat = 0; De EEPROMS uitschakelen
}
En tot slot de Lees functie: while(i<8) {} i ++; De teller met 1 ophogen
unsigned char epsnCartRead() {}
char i = 0;
char temp = 0x00;
Temp >> = 1; Juiste verschuiving de temp-variabele door een
_ecSCKLat = 1; SCK hoog ingesteld
wait(); Wacht ongeveer 50uS
if(_ecSDA) {/ / als SDA is hoog
Temp | = 0x80; Vervolgens bit set 7 hoge
}
_ecSCKLat = 0; SCK lage wederbrengen
wait(); wacht een andere 50uS
}
retourneren temp; Terug wat we hebben gelezen
}
We hebben nu de basisfuncties die we nodig hebben om gegevens te lezen van de inktcartridges, laat onze microcontroller en stellen van de resultaten.