Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

(Using pic18f1220 assymbly laguage, and showing comments, and algorith, and flow

ID: 2085472 • Letter: #

Question

(Using pic18f1220 assymbly laguage, and showing comments, and algorith, and flow chart) (this course is ece 270, microprocessor) (I know this is at tough question but do your best, even if its not perfect, thank you) You've been hired to implement a PIC-based system for controlling a fish tank. The tank has 2 sensors: one for LOW temperature (connected to pin 17) and one for HIGH temperature (connected to pin 8). It has 4 buttons connected to PORTA<3:0> which fish can use to request different types of food, along with 4 FOOD DISPENSER mechanisms connected to PORTA<7:4>.

The feeding logic works as follows:

- when PORTA<0>=1, you should set PORTA<4> to 1

- when PORTA<1>=1, you should set PORTA<5> to 1

- when PORTA<2>=1, you should set PORTA<6> to 1

- when PORTA<3>=1, you should set PORTA<7> to 1

(if an input is 0, set the corresponding output to 0)

The tank also has a HEATER, which is connected to pin 10. If you output a 1 to the heater, the tank will get warmer: outputting 0 turns the heater off.
Your main loop should monitor PORTA<3:0> and set PORTA<7:4> accordingly, repeatedly.
Additionally, if at any time the LOW temperature sensor outputs 1, you should turn the heater on; if the HIGH temperature sensor outputs 1, you should turn the heater off. This must be done via interrupts.
Show complete code for this PIC system, including all initialization, interrupt setup, etc.

Explanation / Answer

main materials for this project:

Code:

//the relays connect to int IN1 = 11;//light

int IN2 = 10;//feed goldfish

int IN3 = 9;//water filter with air

int IN4 = 8;//water pump

int W_L_S = A0;//water level sensor int val;

#define ON 0 #define

OFF 1 void setup()

{

relay_init();//initialize the relay

}

void loop()

{

relay_SetStatus(ON, OFF, OFF, OFF); //turn on

RELAY_1 delay(600000);//delay 10min

relay_SetStatus(ON, ON, OFF, OFF); //turn on

RELAY_1_2 delay(2000);//delay 2s

relay_SetStatus(ON, OFF, ON, OFF); //turn on

RELAY_1_3 delay(43200000);//delay 12h

relay_SetStatus(ON, ON, OFF, OFF); //turn on

RELAY_1_2 delay(2000);//delay 2s

relay_SetStatus(ON, OFF, OFF, OFF); //turn on

RELAY_1 delay(600000);//delay 10min

relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all

RELAY delay(2400000);//delay 40min

val = analogRead(W_L_S); //Here the analog pin decides to whitch state ON or OFF she is

if (val < 100)

{

//and keeps it until the end of the loop digital

Write(IN4, ON);

}

else if (val > 100)

{

digitalWrite(IN4, OFF);

}

delay(15000);//delay 15s

val = analogRead(W_L_S);

if (val < 100)

{

digital

Write(IN4, ON);

}

else

if (val > 100)

{

digitalWrite(IN4, OFF);

}

delay(15000);

val = analog

Read(W_L_S);

if (val < 100)

{

digitalWrite(IN4, ON);

}

else if (val > 100)

{

digitalWrite(IN4, OFF);

}

delay(15000);

val = analogRead(W_L_S);

if (val < 100)

{

digitalWrite(IN4, ON);

}

else if (val > 100)

{ d

igitalWrite(IN4, OFF);

}

delay(15000);

val = analog

Read(W_L_S);

if (val < 100)

{

digitalWrite(IN4, ON);

}

else if (val > 100)

{

digitalWrite(IN4, OFF);

}

delay(15000); val = analog

Read(W_L_S); if (val < 100)

{

digitalWrite(IN4, ON);

}

else if (val > 100)

{

digitalWrite(IN4, OFF);

}

delay(15000); val = analogRead(W_L_S);

if (val < 100)

{ digitalWrite(IN4, ON);

}

else if (val > 100)

{

digitalWrite(IN4, OFF);

}

delay(15000); val = analogRead(W_L_S);

if (val < 100)

{

digitalWrite(IN4, ON);

}

else if (val > 100)

{

digitalWrite(IN4, OFF);

}

delay(15000); relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all RELAY delay(39600000);//delay 11h

}

void relay_init(void)//initialize the relay { //set all the relays OUTPUT pinMode(IN1, OUTPUT); pinMode(IN2, OUTPUT); pinMode(IN3, OUTPUT); pinMode(IN4, OUTPUT); relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all the relay } //set the status of relays void relay_SetStatus( unsigned char status_1, unsigned char status_2, unsigned char status_3, unsigned char status_4) { digitalWrite(IN1, status_1); digitalWrite(IN2, status_2); digitalWrite(IN3, status_3); digitalWrite(IN4, status_4);

//the relays connect to

int IN1 = 11;//light

int IN2 = 10;//feed goldfish

int IN3 = 9;//water filter with air

int IN4 = 8;//water pump

int W_L_S = A0;//water level sensor

int val;

#define ON   0

#define OFF  1

void setup()

{

  relay_init();//initialize the relay

}

void loop() {

  relay_SetStatus(ON, OFF, OFF, OFF); //turn on RELAY_1

  delay(600000);//delay 10min

  relay_SetStatus(ON, ON, OFF, OFF); //turn on RELAY_1_2

  delay(2000);//delay 2s

  relay_SetStatus(ON, OFF, ON, OFF); //turn on RELAY_1_3

  delay(43200000);//delay 12h

  relay_SetStatus(ON, ON, OFF, OFF); //turn on RELAY_1_2

  delay(2000);//delay 2s

  relay_SetStatus(ON, OFF, OFF, OFF); //turn on RELAY_1

  delay(600000);//delay 10min

  relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all RELAY

  delay(2400000);//delay 40min

  val = analogRead(W_L_S); //Here the analog pin decides to whitch state ON or OFF she is

  if (val < 100) {        //and keeps it until the end of the loop

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);//delay 15s

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all RELAY

  delay(39600000);//delay 11h

}

void relay_init(void)//initialize the relay

{

  //set all the relays OUTPUT

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  pinMode(IN3, OUTPUT);

  pinMode(IN4, OUTPUT);

  relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all the relay

}

//set the status of relays

void relay_SetStatus( unsigned char status_1,  unsigned char status_2, unsigned char status_3, unsigned char status_4)

{

  digitalWrite(IN1, status_1);

  digitalWrite(IN2, status_2);

  digitalWrite(IN3, status_3);

  digitalWrite(IN4, status_4);

}

//the relays connect to

int IN1 = 11;//light

int IN2 = 10;//feed goldfish

int IN3 = 9;//water filter with air

int IN4 = 8;//water pump

int W_L_S = A0;//water level sensor

int val;

#define ON   0

#define OFF  1

void setup()

{

  relay_init();//initialize the relay

}

void loop() {

  relay_SetStatus(ON, OFF, OFF, OFF); //turn on RELAY_1

  delay(600000);//delay 10min

  relay_SetStatus(ON, ON, OFF, OFF); //turn on RELAY_1_2

  delay(2000);//delay 2s

  relay_SetStatus(ON, OFF, ON, OFF); //turn on RELAY_1_3

  delay(43200000);//delay 12h

  relay_SetStatus(ON, ON, OFF, OFF); //turn on RELAY_1_2

  delay(2000);//delay 2s

  relay_SetStatus(ON, OFF, OFF, OFF); //turn on RELAY_1

  delay(600000);//delay 10min

  relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all RELAY

  delay(2400000);//delay 40min

  val = analogRead(W_L_S); //Here the analog pin decides to whitch state ON or OFF she is

  if (val < 100) {        //and keeps it until the end of the loop

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);//delay 15s

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  val = analogRead(W_L_S);

  if (val < 100) {

    digitalWrite(IN4, ON);

  }

  else if (val > 100) {

    digitalWrite(IN4, OFF);

  }

  delay(15000);

  relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all RELAY

  delay(39600000);//delay 11h

}

void relay_init(void)//initialize the relay

{

  //set all the relays OUTPUT

  pinMode(IN1, OUTPUT);

  pinMode(IN2, OUTPUT);

  pinMode(IN3, OUTPUT);

  pinMode(IN4, OUTPUT);

  relay_SetStatus(OFF, OFF, OFF, OFF); //turn off all the relay

}

//set the status of relays

void relay_SetStatus( unsigned char status_1,  unsigned char status_2, unsigned char status_3, unsigned char status_4)

{

  digitalWrite(IN1, status_1);

  digitalWrite(IN2, status_2);

  digitalWrite(IN3, status_3);

  digitalWrite(IN4, status_4);

}