(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);
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.