/************************************************************************************
* Name: *
* Written by: Jama Yusuf and Steffen Rogne Automasjonsutvikling AS, 2006 *
* Parameters: . *
* Description: this software controls the Pellet Brenner and it has a *
* multible functions that runs the flow of the pellet *
* feeding & the speed of the fan that blows air to the cup *
* it also reads a temperatures sensers *
*************************************************************************************/
/*This is NOT the final program*/
/*I havent done a lot on the looks on the source*/
#define RS_LCD PORTB.2
#define RW_LCD PORTB.1
#define E_LCD PORTB.0
#define Select PORTB.4
#define RI PORTB.5
#define Ignite PORTC.0
#define M2_ PORTC.1
#define M1_ PORTC.2
#define CTS PORTC.3
#define RST PORTC.4
#define SD PORTC.5
#define TXD PORTC.6
#define RXD PORTC.7
#define LED PORTA.5
#define leftup PORTA.0
#define leftdown PORTA.1
#define rightup PORTA.2
#define rightdown PORTA.3
#define GO_DONE ADCON0.2
#pragma char AD_LO @ 0x20
#pragma char AD_HI @ 0x21
#define FEED_LO CCPR2L
#define FEED_HI CCPR2H
#define FAN_LO CCPR1L
#define FAN_HI CCPR1H
#define ViTre 0
#define Bio 1
void PICint(void);
void SetUp_Menu(void);
void read_EEPROM (int adr_read, int *value_return);
void write_EEPROM(int *adr_write, int *data2write);
void recovery_menu(void);
void last_check (int *GO_GO);
void default_start (void);
void default_speed (void);
void recovery_start(void);
void active_state (void);
void igniter(void);
void temperature_reader (int temp_check,int *temp_true_false);
void default_feed_speed (void);
void default_fan_speed (void);
void start_fan_speed (void);
void start_feed_speed(void);
void restart (void);
void rightDpressed(void);
void rightUpressed(void);
void STOP_FEED(void);
void finishing_state (void);
void STOP_FAN(void);
void lcd_disp(char t, char p);
void lcd_prints(const char *p);
void delay2(int lc);
void delay1(int lc);
void delay_s(int sec);
void bin2dec(int valHI, int valLO);
void bincount(void); // 5+1 array...
void math(unsigned int varHi,unsigned int varLo,unsigned int *varHiOut,unsigned int *varLoOut);
void system_error(int ER_AD,int ER_COD);
/*******************************************************************************************************************/
/* Globals */
/*******************************************************************************************************************/
char dig[6]; // a global verable that is used to controll the display.
int lastx;// a global verable that is used to control the count of the Bin to DEC
int pos; // A global verable that is used to show the possion of the number
int STOP_flag; // a global verable that is used to sett a flag for the system stop
int state1;
int state2;
int vendor;
//int stat;
//int speed;
//int unloop;
//----------------------------------------------------------
// ISR
//-----------------------------------------------------------
#pragma origin 4
/*interrupt interruptISR(void)
{
// int_save_registers // W, STATUS (and PCLATH)
// INTF = 0;
// T0IF = 0;
// int_restore_registers // W, STATUS (and PCLATH)
}
/*******************************************************************************************************************/
/* Main program */
/*******************************************************************************************************************/
void main ()
{
//int T1;
//int T2;
int true_false;
vendor = Bio;
//vendor = ViTre;
PICint (); //calling for the PIC initialization
delay_s(1);
lcd_disp(1,0x38);
lcd_disp(1,0x0C);
lcd_disp(1,0x01); // clear screen
if(leftup ==0)
SetUp_Menu ();
lcd_disp(1,0x01); // clear screen
lcd_prints(" Welcome");
lcd_disp(1,0xC0); // Second row
lcd_prints("Demo V1.2");
delay_s(2);
//read_EEPROM(1,&true_false);//calling for the EEPROM reading the check the last information stored...specially if it
// was stopped and pellets burn out succesfull or not...
//if(true_false == 1)// checking the resolt from the EEPROM
default_start();// If it was stopped it would call for the default start which would start the system opprotion
//else
//recovery_menu();// if it was not stopped then it would call for the recovery menu to run some "recovery"
/*******************************************************************************************************************/
// when the call for the default start or the recovery menu returns whitout ERRORS
// the system rests here in stopped or active state
/*******************************************************************************************************************/
do{
active_state();// calling for the active state AND staying there until it's stopped and then it would return here
default_start();//calling for start when the system is stopped and returns here by itselv to active state
}while (1);
}
/*******************************************************************************************************************/
/* this function is the default menu where the system normaly starts if it has been stopped correctly */
/* and the Message of that action has been correctly writen to the EEPROM */
/*******************************************************************************************************************/
void default_start(void)
{
int temp_check3;// a variable that is used to read back the informaion of the temperature senser
int temp_check4; // a variable that is used to read back the informaion of the temperature senser
int loop_check;// a variable that is used to read back the informaion of the temperature senser
lcd_disp(1,0x01); // clear screen
lcd_prints (" Welcome");
lcd_disp(1,0xC0); // Line two
lcd_prints(" Push Start");
delay_s(1);
while(leftup != 0);
//if(leftup == 0){// if start is been pressed
start_feed_speed();// calling the feed a head of everything to get the pellets in to the cup
start_fan_speed(); // calling the fan to be blowed in to full speed to help the burn
igniter();// calling the igniter to start the burn
temperature_reader (1,&temp_check4);// calling the temperature reader to see if the temperature is rising
if(temp_check4 == 0)// checking if the temperature is rising or not if it's not rising it would call for restart
restart ();// calling for restart if the temperature didn't rise
default_speed (); // calling for the default speed
}
/*******************************************************************************************************************/
/* this function alows the value of the speed to be entered here and also keep */
/* the system running at this area until it's stopped it also writes the stopp message to the EEPROM */
/*******************************************************************************************************************/
#define MAXSTATE1 11
#define MAXSTATE2 11
void active_state (void)
{
int x;
state1 = 0;
state2 = 0;
while(leftdown != 0){
if (vendor == Bio){
switch(state1){
case 0:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 1000 Watt ");
delay2(255);
FEED_LO = 0x50;
FAN_LO = 0x70;
break;
case 1:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 2000 Watt ");
delay2(255);
FEED_LO = 0x53;
FAN_LO = 0x70;
break;
case 2:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 3000 Watt ");
delay2(255);
FEED_LO = 0x60;
FAN_LO = 0x70;
break;
case 3:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 4000 Watt ");
delay2(255);
FEED_LO = 0x70;
FAN_LO = 0x70;
break;
case 4:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 5000 Watt ");
delay2(255);
FEED_LO = 0x80;
FAN_LO = 0x80;
break;
case 5:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 6000 Watt ");
delay2(255);
FEED_LO = 0x90;
FAN_LO = 0x90;
break;
case 6:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 7000 Watt ");
delay2(255);
FEED_LO = 0xa0;
FAN_LO = 0xa0;
break;
case 7:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 8000 Watt ");
FEED_LO = 0xb0;
FAN_LO = 0xb0;
delay2(255);
break;
case 8:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 9000 Watt ");
FEED_LO = 0xc0;
FAN_LO = 0xc0;
delay2(255);
break;
case 9:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 10,000 Watt ");
FEED_LO = 0xd0;
FAN_LO = 0xd0;
delay2(255);
break;
case 10:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 11,000 Watt ");
FEED_LO = 0xe0;
FAN_LO = 0xe0;
delay2(255);
break;
case 11:
lcd_disp(1,0x01); // clear screen
lcd_prints("Fuel: Biobrensel");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 12,000 Watt ");
FEED_LO = 0xff;
FAN_LO = 0xff;
delay2(255);
break;
}
while(rightup && rightdown&&leftdown);
if(rightup == 0){
if(state1 != MAXSTATE1)
state1 = state1 +1;
}
if(rightdown == 0){
if(state1 != 0)
state1 = state1-1;
}
}
else{
switch(state2){
case 0:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 1000 Watt ");
FEED_LO = 0x26;
FAN_LO = 0x01;
delay2(255);
break;
case 1:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 2000 Watt ");
FEED_LO = 0x2e;
FAN_LO = 0x01;
delay2(255);
break;
case 2:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 3000 Watt ");
FEED_LO = 0x37;
FAN_LO = 0x04;
delay2(255);
break;
case 3:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 4000 Watt ");
FEED_LO = 0x40;
FAN_LO = 0x0a;
delay2(255);
break;
case 4:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 5000 Watt ");
FEED_LO = 0x48;
FAN_LO = 0x15;
delay2(255);
break;
case 5:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 6000 Watt ");
FEED_LO = 0x51;
FAN_LO = 0x23;
delay2(255);
break;
case 6:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 7000 Watt ");
FEED_LO = 0x5a;
FAN_LO = 0x35;
delay2(255);
break;
case 7:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 8000 Watt ");
FEED_LO = 0x63;
FAN_LO = 0x4b;
delay2(255);
break;
case 8:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 9000 Watt ");
FEED_LO = 0x6b;
FAN_LO = 0x65;
delay2(255);
break;
case 9:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 10,000 Watt ");
FEED_LO = 0x74;
FAN_LO = 0x82;
delay2(255);
break;
case 10:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 11,000 Watt ");
FEED_LO = 0x7d;
FAN_LO = 0xa3;
delay2(255);
break;
case 11:
lcd_disp(1,0x01); // clear screen
lcd_prints(" Fuel: ViTre");
lcd_disp(1,0xC0); // Line two
lcd_prints(" 12,000 Watt ");
FEED_LO = 0x85;
FAN_LO = 0xc8;
delay2(255);
break;
}
while(rightup && rightdown&&leftdown);
if(rightup == 0){
if(state2 != MAXSTATE2)
state2 = state2 +1;
}
if(rightdown == 0){
if(state2 != 0)
state2 = state2-1;
}
}
}
if(leftdown == 0)
lcd_disp(1,0x01); // clear screen
lcd_prints("BPS System ble");
lcd_disp(1,0xC0); // Line two
lcd_prints(" stoppet");
delay_s(2);
finishing_state();
}
/*******************************************************************************************************************/
/* this function setts the fan and the feed to the default speed which is 50 by default but can be changed by user*/
/*******************************************************************************************************************/
#pragma codepage 1
void default_speed (void)
{
default_feed_speed();// call for the default feed speed. this is 50 by default but it can be set to higher
// or lower by the user and the information is saved to EEPROM
default_fan_speed();// call for the default fan speed. this is 50 by default but it can be set to higher
// or lower by the user and the information is saved to EEPROM
}
/**************************************************************************************************************************/
/* this is a recovery function that is connected to the recovery menu and starts in different way then the default start */
/**************************************************************************************************************************/
void restart (void)
{
int temp_check2;
//int x;
int loop;
//int ERROR;
int error_adr;
STOP_FEED ();
loop = 0;
do {
lcd_disp(1,0x01); // clear screen
lcd_prints(" System Being");
lcd_disp(1,0xC0); // Line two
lcd_prints(" Restarted");
delay_s(10);
igniter();
temperature_reader (0,&temp_check2);
if(temp_check2 == 1) break;
loop = loop +1;
}while(loop < 2);
if (temp_check2 == 0)
system_error(0,0);
}
/*******************************************************************************************************************/
/* this function is the start feed fuction...it's connected to the default start */
/*******************************************************************************************************************/
void start_feed_speed(void)
{
int x;
FEED_LO = 0xFF;
lcd_disp(1,0x01); // clear screen
lcd_prints(" Starting Feed");
lcd_disp(1,0xC0); // Line two
lcd_prints(" For 15 sec ");
for(x=1; x < 15; x++){
delay_s(1);
bin2dec(0,x);
lcd_disp(1,0xCC); // clear screen
lcd_prints(" ");
lcd_disp(1,0xCC); // clear screen
lcd_prints(&dig[pos]);
}
FEED_LO = 0x00;
}
/*******************************************************************************************************************/
/* this function keeps the fan run until the temperature starts to go down which means no more pellets to burn */
/*******************************************************************************************************************/
void finishing_state (void)
{
int x;
int pellets_left;
STOP_FEED();
do{
lcd_disp(1,0x01); // clear screen
lcd_prints((char*)" Pre-STOP State");
lcd_disp(1,0xC0); // Line two
lcd_prints((char*)" Please wait");
delay_s(2);
if(pellets_left != 4)
pellets_left = pellets_left + 1;
if(leftup == 0)
break;
}while(pellets_left < 3);
STOP_FAN();
}
/*******************************************************************************************************************/
/* this function Stops the feed: */
/*******************************************************************************************************************/
void STOP_FAN(void)
{
int x;
FAN_LO = 0x00;
lcd_disp(1,0x01); // clear screen
lcd_prints((char*)" Stopping");
lcd_disp(1,0xC0); // Line two
lcd_prints((char*)" The FAN");
delay_s(2);
}
/*******************************************************************************************************************/
/* this function Stops the feed: */
/*******************************************************************************************************************/
void STOP_FEED(void)
{
int x;
FEED_LO = 0x00;
lcd_disp(1,0x01); // clear screen
lcd_prints(" Stopping");
lcd_disp(1,0xC0); // Line two
lcd_prints(" the Feeding");
delay_s(2);
}
/*******************************************************************************************************************/
/* this function is the default feed speed fuction: */
/*******************************************************************************************************************/
void default_feed_speed (void)
{
int x;
FEED_LO = 0x32;
lcd_disp(1,0x01); // clear screen
lcd_prints(" Setting FEED");
lcd_disp(1,0xC0); // Line two
lcd_prints("to Default speed");
delay_s(2);
}
/*******************************************************************************************************************/
/* this function is the start fan fuction: */
/*******************************************************************************************************************/
void start_fan_speed (void)
{
int x;
FAN_LO = 0x80;
lcd_disp(1,0x01); // clear screen
lcd_prints(" Starting");
lcd_disp(1,0xC0); // Line two
lcd_prints(" the FAN");
delay_s(2);
}
/*******************************************************************************************************************/
/* this is the default fan speed fuction: */
/*******************************************************************************************************************/
void default_fan_speed (void)
{
int x;
FAN_LO = 0x32;
lcd_disp(1,0x01); // clear screen
lcd_prints(" Setting FAN");
lcd_disp(1,0xC0); // Line two
lcd_prints("To Default speed");
delay_s(2);
}
/*******************************************************************************************************************/
/* this function is the start igniter fuction...it's connected to the default start and restart functions */
/*******************************************************************************************************************/
void igniter (void)
{
int z;
int x;
Ignite = 1;
lcd_disp(1,0x01); // clear screen
lcd_prints(" Setting Igniter");
lcd_disp(1,0xC0); // Line two
lcd_prints(" ON ");
for(x=1; x < 25; x++){
delay_s(1);
z = 25-x;
bin2dec(0,z);
lcd_disp(1,0xCC); // clear screen
lcd_prints(" ");
lcd_disp(1,0xCC); // clear screen
lcd_prints(&dig[pos]);
}
lcd_disp(1,0x01); // clear screen
lcd_prints(" Turning");
lcd_disp(1,0xC0); // Line two
lcd_prints("The Igniter OFF");
delay_s(2);
Ignite = 0;
}
/*******************************************************************************************************************/
/* this function reads the temperature and it's connected to the default start, restart, system check, recovery menu */
/*******************************************************************************************************************/
#pragma codepage 0
void temperature_reader (int temp_check, int *temp_true_false)
{
int T1, T2;
int a;
int x;
uns16 z;
uns24 av;
a = 1;
av = 0;
// PORTA = 0x00;
ADCON1 = 0x80;
ADCON0 = 0x39;
lcd_disp(1,0x01); // clear screen
lcd_prints(" Reading");
lcd_disp(1,0xC0); // Line two
lcd_prints(" Temperature");
delay_s(2);
lcd_disp(1,0x01); // clear screen
lcd_prints(" Please wait");
lcd_disp(1,0xC0); // Line two
for(x = 0; x < 4; x++)
{
GO_DONE = 1;
while (GO_DONE);
GO_DONE = 1;
while (GO_DONE);
AD_LO = ADRESL;
AD_HI = ADRESH;
z = AD_HI;
z = z << 8;
z = z & 0xFF00;
z = z | AD_LO;
av = av + z;
}
av = av >> 2;
z = av;
z = z-233;
ADCON1= 0x06;
AD_LO = z & 0xFF;
z = z >> 8;
AD_HI = z;
lcd_prints (" ");
lcd_disp(1,0xC0);
math(AD_HI,AD_LO,&T1, &T2);
bin2dec(T1,T2);
lcd_prints(" is ");
lcd_prints(&dig[pos]);
lcd_prints(" ");
lcd_disp(0,0xDF);
lcd_prints("C");
delay_s(4);
if(AD_HI > 1){
lcd_disp(1,0x01); // clear screen
lcd_prints(" Temperature");
lcd_disp(1,0xC0); // Line two
lcd_prints("rise succesfully");
delay_s(2);
*temp_true_false =1;
}
else{
lcd_disp(1,0x01); // clear screen
lcd_prints("Temperature is");
lcd_disp(1,0xC0); // Line two
lcd_prints(" not rising");
delay_s(2);
*temp_true_false = 0;
}
}
void delay1(int lc)
{
int lc2 = 0x20;
lc = lc << 1;
while(lc)
{
while(lc2)
lc2 = lc2 - 1;
lc = lc - 1;
lc2 = 0x20;
}
}
void delay2(int lc)
{
int lc2 = 0xFF;
int lc3 = 0xFF;
while(lc)
{
while(lc2)
{
while(lc3){
lc3 = lc3 - 1;
}
lc2 = lc2 - 1;
}
lc = lc - 1;
lc2 = 0xFF;
}
}
void delay_s(int sec)
{
int x;
for(x=0; x < sec; x++){
delay2(255);
delay2(255);
delay2(255);
delay2(255);
}
}
void lcd_disp(char t, char p)
{
if(t==1)
RS_LCD = 0;
else
RS_LCD = 1;
RW_LCD = 0;
PORTD = p;
E_LCD = 0;
delay1 (5);
E_LCD = 1;
if(p == 0x01)
delay1(70);
else
delay1(10);
}
void lcd_prints(const char *p)
{
char x;
while(*p)
{
x = *p;
lcd_disp(0,x);
p= p + 1;
}
}
void bincount(void) // 5+1 array...
{
dig[4]= dig[4]+1;
if(dig[4] == 0x3A){
dig[4] = 0x30;
dig[3]= dig[3]+1;
if(dig[3] == 0x3A){
dig[3] = 0x30;
dig[2]= dig[2]+1;
if(dig[2] == 0x3A){
dig[2] = 0x30;
dig[1]= dig[1]+1;
if(dig[1] == 0x3A){
dig[1] = 0x30;
dig[0]= dig[0]+1;
}
}
}
}
}
void bin2dec(int valHI, int valLO)
{
dig[0] = '0';
dig[1] = '0';
dig[2] = '0';
dig[3] = '0';
dig[4] = '0';
dig[5] = 0;
while(valLO != 0){
bincount();
valLO=valLO-1;
}
while(valHI != 0){
valLO = valLO-1;
bincount();
while(valLO != 0){
bincount();
valLO = valLO -1;
}
valHI=valHI-1;
}
pos= 0;
if(dig[0] == '0'){
dig[0] = ' ';
pos= 1;
if(dig[1] == '0'){
dig[1] = ' ';
pos= 2;
if(dig[2] == '0'){
dig[2] = ' ';
pos= 3;
if(dig[3] == '0'){
dig[3] = ' ';
pos= 4;
}
}
}
}
}
void math(unsigned int varHi,unsigned int varLo,unsigned int *varHiOut,unsigned int *varLoOut)
{
unsigned int temp1;
temp1 = varLo;
temp1=temp1- 0;
if( varHi > 3){
*varHiOut = 3;
*varLoOut = 0xFF;
}
else{
if(temp1 > varLo){
if(varHi == 0){
*varHiOut = 0;
*varLoOut = 0;
}
*varHiOut = varHi-1;
*varLoOut = temp1;
}
else{
*varHiOut = varHi;
*varLoOut = temp1;
}
}
}
#pragma codepage 1
/*******************************************************************************************************************/
/* this function reads the EEPROM and directs the program to the right start system */
/*******************************************************************************************************************/
void SetUp_Menu(void)
{
int x;
lcd_disp(1,0x01); // clear screen
lcd_prints("Set-Up Menu");
lcd_disp(1,0xC0); // Second row
lcd_prints("set vendor pls");
while(leftup != 1);
while(rightup && rightdown);
if(rightup == 0){
lcd_disp(1,0x01); // clear screen
lcd_prints("Vender is set to");
lcd_disp(1,0xC0); // Second row
lcd_prints(" Vi-Tre");
vendor = ViTre;
}
if(rightdown == 0){
lcd_disp(1,0x01); // clear screen
lcd_prints("Vender is set to");
lcd_disp(1,0xC0); // Second row
lcd_prints(" Biobrensel AS");
vendor = Bio;
}
delay_s(3);
}
/*********************************************************************************************************************/
/* this function is a recovery function. the program gets here if the system suddently gets shut-down or lost power */
/* it reads the temperature senser and the EEPROM in order to stor the system to it's original routine. */
/*********************************************************************************************************************/
void recovery_menu(void)
{
int x;
int temp_check4;
lcd_disp(1,0x01); // clear screen
lcd_prints ("Press Start to");
lcd_disp(1,0xC0); // Line two
lcd_prints(" Recover");
while(leftup);
if(leftup == 0)
lcd_disp(1,0x01); // clear screen
lcd_prints (" recovering");
lcd_disp(1,0xC0); // Line two
lcd_prints(" Please Wait...");
delay_s(2);
temperature_reader (0,&temp_check4);
if (temp_check4 == 0)
recovery_start();
temperature_reader (1,&temp_check4);
if (temp_check4 == 0)
restart ();
}
/**************************************************************************************************************************/
/* this is a recovery function that is connected to the recovery menu and starts in different way then the default start */
/**************************************************************************************************************************/
void recovery_start(void)
{
start_fan_speed();//call for the start fan speed to set the fan to full speed
igniter(); //call for the igniter while the fan is in full speed to help the burn speed
default_feed_speed();//call for the default feed speed to reduce the speed of the feeding
}
#pragma codepage 0
void system_error(int ER_AD,int ER_COD)
{
int x;
FAN_LO = 0X00;
FEED_LO = 0X00;
do{
lcd_disp(1,0x01); // clear screen
lcd_prints(" ERROR Code 01");
lcd_disp(1,0xC0); // Line two
lcd_prints(" Was found");
delay_s(3);
lcd_disp(1,0x01); // clear screen
lcd_prints("If Problem Fixed");
lcd_disp(1,0xC0); // Line two
lcd_prints(" REBOOT System");
delay_s(1);
}while(1);
}
/*******************************************************************************************************************/
/* this function reads the EEPROM */
/*******************************************************************************************************************/
void read_EEPROM (int adr_read, int *value_return)
{
//this is not really a function: it does not read the EEPROM....It just reads the value that it has been given to
// adr_read and moves to value return...the real function here is not yet been
lcd_disp(1,0x01); // clear screen
lcd_prints((char*)"Reading EEPROM");
lcd_disp(1,0xC0); // Line two
lcd_prints((char*)"Please wait...");
delay_s(1);
if(adr_read == 1) // checking the value of adr to read and setting it flag if it's = 1
*value_return = 1; // moving the value or adr_read to value return
else // checking the value of adr to read and setting it flag if it's = 0
*value_return = 0;//moving the value of adr_read to value return if it = 0
/*
EEADR = *adr_read ;
EECON1 = 0x01;
*true_false= EEDATA;
*/
/*
MOVF DATA_EE_ADDR,W ; Data Memory
MOVWF EEADR ; Address to read
BSF STATUS,RP0 ; Bank 3
BCF EECON1,EEPGD ; Point to Data
; memory
BSF EECON1,RD ; EE Read
BCF STATUS,RP0 ; Bank 2
MOVF EEDATA,W ; W = EEDATA
*/
}
/*******************************************************************************************************************/
/* this function write the EEPROM */
/*******************************************************************************************************************/
void write_EEPROM(int *adr_write, int *data2write)
{
// NOTE: This is not the real function it's not yet been writen or proved
EEADR = *adr_write;
EEDATA = *data2write;
EECON1 = 0x04;
EECON2 = 0x55;
EECON2 = 0xAA;
EECON1 = 0x06;
EECON1 = 0x02;
/*
BTFSC EECON1,WR ;Wait for write
MOVF DATA_EE_ADDR,W ;Data Memory
MOVWF EEADR ;Address to write
MOVF DATA_EE_DATA,W ;Data Memory Value
MOVWF EEDATA ;to write
BCF EECON1,EEPGD ;Point to DATA memory
BSF EECON1,WREN ;Enable writes
BCF INTCON,GIE ;Disable INTs.
MOVLW 55h ;
MOVWF EECON2 ;Write 55h
MOVLW AAh ;
MOVWF EECON2 ;Write AAh
BSF EECON1,WR ;Set WR bit to begin write
BSF INTCON,GIE ;Enable INTs.
BCF EECON1,WREN ;Disable writes
*/
}
#pragma codepage 1
void PICint(void)
{
PORTA = 0;
PORTB = 0;
PORTC = 0;
PORTD = 0;
ADCON0 = 0x38;
ADCON1 = 0x06;
TRISD = 0;
TRISA = 0xFF;
PORTA = 0xFF;
TRISB = 0xE0;
TRISC = 0x88;
E_LCD = 1;
RW_LCD = 0;
RS_LCD = 1;
LED = 0;
M1_ = 0;
M2_ = 1;
Ignite = 0;
T2CON = 0x07;
TMR2 = 0x00;
PR2 = 0xFF;
CCP1CON = 0x0F;
CCP2CON = 0x0F;
FAN_LO = 0x00;
FAN_HI = 0x00;
FEED_LO = 0x00;
FEED_HI = 0x00;
}
#pragma codepage 0